下一代云原生应用引擎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

相关文章

MySQL 存储引擎 MyISAM详解(最新推荐)

《MySQL存储引擎MyISAM详解(最新推荐)》使用MyISAM存储引擎的表占用空间很小,但是由于使用表级锁定,所以限制了读/写操作的性能,通常用于中小型的Web应用和数据仓库配置中的只读或主要... 目录mysql 5.5 之前默认的存储引擎️‍一、MyISAM 存储引擎的特性️‍二、MyISAM 的主

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

Jvm sandbox mock机制的实践过程

《Jvmsandboxmock机制的实践过程》:本文主要介绍Jvmsandboxmock机制的实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景二、定义一个损坏的钟1、 Springboot工程中创建一个Clock类2、 添加一个Controller

Mysql中的用户管理实践

《Mysql中的用户管理实践》:本文主要介绍Mysql中的用户管理实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录13. 用户管理13.1 用户 13.1.1 用户信息 13.1.2 创建用户 13.1.3 删除用户 13.1.4 修改用户

在Java中基于Geotools对PostGIS数据库的空间查询实践教程

《在Java中基于Geotools对PostGIS数据库的空间查询实践教程》本文将深入探讨这一实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在Java环... 目录前言一、相关技术背景介绍1、评价对象AOI2、数据处理流程二、对AOI空间范围查询实践1、空间查

qtcreater配置opencv遇到的坑及实践记录

《qtcreater配置opencv遇到的坑及实践记录》我配置opencv不管是按照网上的教程还是deepseek发现都有些问题,下面是我的配置方法以及实践成功的心得,感兴趣的朋友跟随小编一起看看吧... 目录电脑环境下载环境变量配置qmake加入外部库测试配置我配置opencv不管是按照网上的教程还是de

Python Flask 库及应用场景

《PythonFlask库及应用场景》Flask是Python生态中​轻量级且高度灵活的Web开发框架,基于WerkzeugWSGI工具库和Jinja2模板引擎构建,下面给大家介绍PythonFl... 目录一、Flask 库简介二、核心组件与架构三、常用函数与核心操作 ​1. 基础应用搭建​2. 路由与参

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应