下一代云原生应用引擎OpenNJet快实践起来吧

2024-04-28 17:12

本文主要是介绍下一代云原生应用引擎OpenNJet快实践起来吧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • OpenNJet 概述
    • 比NGINX更加强大
    • CentOS 编译环境配置
      • 常用命令
    • Upstream API实现动态添加、删除、修改http模块和stream模块的 upstream server
    • 高可用部署支持
      • 测试验证

OpenNJet 概述

OpenNJet 是基于 NGINX 的一款应用引擎,旨在为互联网和云原生应用提供高性能和多样化的运行时组态服务程序,作为底层引擎,OpenNJet 实现了NGINX 云原生功能增强、安全加固和代码重构,OpenNJet 通过动态加载机制可以实现不同的产品形态,如Web服务器流媒体服务器负载均衡代理(Proxy)应用中间件API网关消息队列等产品形态等等。
在这里插入图片描述

更多特性可以查看官网:https://njet.org.cn/

比NGINX更加强大

在这里插入图片描述
OpenNJet最早是基于NGINX1.19基础,fork并独立演进的开源应用引擎,并随着NGINX版本迭代,吸收上游NGINX的更新,已经同步更新到NGINX1.23.1版本。
相比市面其他类型的API网关,高性能是NGINX主要的优点,但动态配置能力的缺乏一直受到业界的诟病。OpenNJet在NGINX的架构上进行了扩充,对其框架进行了改写,增加了 C 及可持久化的动态存储能力,解决了指令配置变更动态生效的关键问题,扩展了OpenNJet的应用场景。此外,业界对应用引擎可观测性的需求,需要应用引擎持续不断的采集性能指标、日志数据以及注入跟踪信息,但这对应用引擎的性能造成了不可忽视的影响,OpenNJet利用Copilot framwork隔离了业务处理及配置变更和指标采集,避免了遥测对性能的影响。作为云原生的应用引擎,OpenNJet需要支持业界流行的Ingress及Sidecar的api规范,基于动态配置+ Copilot framework架构,NJet可以通过不断更新独立的相关Copilot module,实现对响应标准规范的及时支持
话不多说我们接下来实操体验一波。

CentOS 编译环境配置

首先需要准备一台可以访问外网的机器,我这里使用的是CentOS7环境。

  1. 如果本机已配置yum源,则直接执行以下命令安装软件包
sudo yum install -y devtoolset-8-make devtoolset-8-toolchain ca-certificates mercurial zlib-devel cmake3 ninja-build libunwind-devel pcre-devel openssl-devel libtool libtool-ltdl

1.1 如果没有配置yum源则执行以下命令配置yum源后再执行上面的命令安装软件包:

  1. 执行以下指令:sudo yum --enablerepo=extras install -q -y epel-release centos-release-scl-rh [https://repo.ius.io/ius-release-el7.rpm](https://gitee.com/link?target=https%3A%2F%2Frepo.ius.io%2Fius-release-el7.rpm)
  2. sudo curl -o /etc/yum.repos.d/mercurial.repo [https://www.mercurial-scm.org/release/centos7/mercurial.repo](https://gitee.com/link?target=https%3A%2F%2Fwww.mercurial-scm.org%2Frelease%2Fcentos7%2Fmercurial.repo)
  3. 上面步骤完成后,文件系统的目录/etc/yum.repos.d 将生成对应的repo文件,可以通过ls -al /etc/yum.repos.d/mercurial.repo查看。

二、创建符号链接

  1. sudo ln -s /opt/rh/devtoolset-8/root/usr/bin/gcc /usr/local/bin/gcc
  2. sudo ln -s /opt/rh/devtoolset-8/root/usr/bin/c++ /usr/local/bin/c++
  3. sudo ln -s /opt/rh/devtoolset-8/root/usr/bin/cc /usr/local/bin/cc
  4. sudo ln -s /opt/rh/devtoolset-8/root/usr/bin/make /usr/local/bin/make

三、编译代码

  1. 把OpenNJet 1.0.zip 包上传到 /home 目录下。 并解压 unzip njet1.0.zip,如图:
    在这里插入图片描述

  2. 执行:sh build_cc.sh conf
    在这里插入图片描述

  3. 执行命令:make

如果make 后,有如下提示:则继续 执行 make 指令。

正确编译完成:如图:
在这里插入图片描述

  1. 最后执行:make install安装完成。

常用命令

显示帮助信息:njet -h
启动:njet -p /tmpr/njet/ -c conf/njet.conf
​常见启动参数:

​ -p 指定prefix配置文件路径,不指定,默认/etc/njet

​ -c 指定配置文件,不指定,默认njet.conf

​ -e 指定error 日志文件

测试配置信息是否有错误:njet -t
显示版本:​ njet -v
显示编译阶段的参数:​ njet -V
快速停止: njet -s stop 或者 kill -TERM {进程id}
优雅停止服务:njet -s quit 或者 kill -QUIT {进程id}
重新加载配置:​ njet -s reload 或者 kill -HUP {进程id}

Upstream API实现动态添加、删除、修改http模块和stream模块的 upstream server

比原有的nginx更强大,可以实现态添加、删除、修改http模块和stream模块的 upstream server ,要开启该功能, 需在 ctrl.conf 配置文件的 main 块中加载该模块:

load_module modules/njt_http_upstream_api_module.so;

并在 http 块下,指定该模块的配置文件:

http {access_log logs/access_ctrl.log combined;server {listen         8081  ;location /api {dyn_module_api;}}
}

Upstream api,配置ACL控制

load_module modules/njt_http_upstream_api_module.so; server {listen       8081;location /api {dyn_module_api;limit_except GET {auth_basic "NGINX plus API";auth_basic_user_file /etc/njet/htpasswd;}}}

更多具体操作细节可以查看官方文档:https://gitee.com/njet-rd/docs

高可用部署支持

为了简化部署及配置,NJet 通过Copilot 扩展机制实现了VRRP协议的HA模块,只要加载HA Copilot 并提供相应的配置文件,即可实现高可用功能。
开启HA功能需在njet.conf的 main block 中添加如下指令

helper ha modules/njt_helper_ha_module.so conf/vrrp.conf;

并在conf目录下提供vrrp配置文件,配置项的说明如下。

配置项必填配置说明
vrrp_instancevrrp_instance的string为设置的VRRP的实例名。
state设置当前节点的初始化状态,状态为MASTER或者BACKUP
interface可以绑定vip的接口名称,比如eth0,bond0,br0。
通过IP -a查看自己的网卡信息
nopreempt设置是否抢占虚拟IP,添加即为不抢占
virtual_router_id设置虚拟路由器惟一标识,范围:0-255,同属一个集群的多个njet节点该id相同,不同的njet集群该值必须不同,务必要确认在同一网络中此值必须唯一。
priority设置当前njet节点的优先级,范围:[1-254],值越大优先级越高
virtual_ipaddress设置虚拟IP对应的子网掩码

测试验证

  • 配置三台服务器测试机,IP分别是:
  1. 192.168.100.66
  2. 192.168.100.66
  3. 192.168.100.68
  • 使用虚拟IP:
  1. 192.168.100.50

192.168.100.66服务器vrrp.conf配置如下:

vrrp_instance m{state MASTERinterface eth192virtual_router_id 32 priority 200 virtual_ipaddress {192.168.100.50/24 }
}

192.168.100.67服务器vrrp.conf配置如下:

vrrp_instance m{state BACKUPinterface eth192virtual_router_id 32 priority 10 virtual_ipaddress {192.168.100.50/24 }
}

192.168.100.68服务器vrrp.conf配置如下:

vrrp_instance m{state BACKUPinterface eth192virtual_router_id 32 priority 100 virtual_ipaddress {192.168.100.50/24 }
}

三台服务器上的NJet都启动时,由于100.66是MASTER,该主机将获取到VIP;
停止100.66主机上的NJet实例后,由于100.68主机的优先级priority 较高,100.68将获得VIP;
重新启动100.66主机上的NJet实例后,100.66将重新获得VIP。

OpenNJet 作为基于 NGINX 的应用引擎,为互联网和云原生应用提供了多样化、灵活和高性能的解决方案。其动态加载机制和模块化设计使得其在多种产品形态中都能表现出色。无论是 Web 服务器、流媒体服务器、负载均衡、代理,还是 API 网关和消息队列,OpenNJet 都能够轻松适应。这种灵活性和可扩展性使其成为各种应用场景中的理想选择。
对于寻求高性能和灵活性的开发者和企业,OpenNJet 是一个值得考虑的解决方案。无论是作为核心应用引擎,还是作为云原生架构的一部分,OpenNJet 都能提供强大的支持和稳定的性能。
由于文章篇幅有限,更多功能和实战可以查看官方:https://njet.org.cn/

参考:
开源地址:

  • https://github.com/OpenNJet/OpenNJet
  • https://gitee.com/njet-rd/njet

官方提供版本使用手册:https://gitee.com/njet-rd/docs/tree/master/zh-cn

本文内容到此结束了,
如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。
如有错误❌疑问💬欢迎各位指出。
主页:共饮一杯无的博客汇总👨‍💻

保持热爱,奔赴下一场山海。🏃🏃🏃

这篇关于下一代云原生应用引擎OpenNJet快实践起来吧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/943797

相关文章

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

k8s部署MongDB全过程

《k8s部署MongDB全过程》文章介绍了如何在Kubernetes集群中部署MongoDB,包括环境准备、创建Secret、创建服务和Deployment,并通过Robo3T工具测试连接... 目录一、环境准备1.1 环境说明1.2 创建 namespace1.3 创建mongdb账号/密码二、创建Sec

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

centos7基于keepalived+nginx部署k8s1.26.0高可用集群

《centos7基于keepalived+nginx部署k8s1.26.0高可用集群》Kubernetes是一个开源的容器编排平台,用于自动化地部署、扩展和管理容器化应用程序,在生产环境中,为了确保集... 目录一、初始化(所有节点都执行)二、安装containerd(所有节点都执行)三、安装docker-