赞
踩
OpenNJet 官网地址:https://njet.org.cn/
应用引擎,作为互联网和云原生应用的运行时服务程序,拥有多种功能特性。它具备环境感知能力,能够灵活应对不同的运行环境;同时,它也具备安全控制功能,确保应用的安全稳定运行。此外,应用引擎还能进行加速优化,提升应用的运行效率。在实际应用中,它通常表现为Web服务、流媒体服务、代理(Proxy)、应用中间件、API网关、消息队列等多种形式。
在云原生架构中,应用引擎除了提供南北向通信网关的基础功能外,还扩展了众多新特性。它支持服务网格中的东西向通信,实现透明流量劫持、熔断、遥测与故障注入等功能,这些特性使其在云原生架构中的地位和作用愈发凸显。
OpenNJet作为一款开源应用引擎,最初基于NGINX1.19版本进行fork和独立演进。随着NGINX版本的迭代更新,OpenNJet也同步更新到NGINX1.23.1版本,确保了技术的先进性和兼容性。OpenNJet的目标是适应国内特定的技术规范及标准,如支持国密算法套件,构建安全可控的云原生数据面,从而支持我国云原生产业生态的发展。作为底层引擎,OpenNJet利用动态加载机制,可以灵活实现多种产品形态,如API网关、消息代理、出入向代理、负载均衡、WAF等,满足不同的应用需求。
相比于市面上的其他API网关,NGINX因其卓越的高性能表现而备受赞誉。然而,它在动态配置能力方面的不足也一直是业界关注的焦点。为了解决这一问题,OpenNJet在NGINX的基础上进行了重大改进。它不仅对原有框架进行了重写,还新增了C语言支持和可持久化的动态存储能力。这些创新使得OpenNJet在指令配置变更后能够立即生效,极大地拓宽了其应用场景。
此外,随着应用引擎的普及,对可观测性的需求也日益增强。应用引擎需要持续采集性能指标、日志数据并注入跟踪信息,但这些操作往往会对性能产生一定影响。OpenNJet巧妙地利用Copilot framework,成功地将业务处理、配置变更以及指标采集隔离开来,从而消除了遥测对性能的潜在影响。
作为云原生的应用引擎,OpenNJet还积极支持业界广泛使用的Ingress及Sidecar的API规范。基于其独特的动态配置+ Copilot framework架构,OpenNJet能够通过不断更新独立的Copilot模块,迅速适应并支持各种新兴的标准规范。这一特性使得OpenNJet在云原生领域具有更强的灵活性和适应性。
├── build 编译rpm/deb脚本 ├── auto 自动检测系统环境以及编译相关的脚本 │ ├── cc 关于编译器相关的编译选项的检测脚本 │ ├── lib njet编译所需要的一些库的检测脚本 │ ├── os 与平台相关的一些系统参数与系统调用相关的检测 │ └── types 与数据类型相关的一些辅助脚本 ├── conf 存放默认配置文件,在make install后,会拷贝到安装目录中去 ├── contrib 存放一些实用工具,如geo配置生成工具(geo2njet.pl) ├── html 存放默认的网页文件,在make install后,会拷贝到安装目录中去 ├── repos 存放yum数据源 ├── doc njet的api文档 │ ├── swagger openapi 接口网页文档 │ ├── gui 前端展示页面文档 │ └── manual njet文档手册 ├── luajit luajit ├── lualib lualib ├── modules njet动态模块以及util模块 └── src 存放njet的源代码 ├── core njet的核心源代码,包括常用数据结构的定义,以及njet初始化运行的核心代码如main函数 ├── event 对系统事件处理机制的封装,以及定时器的实现相关代码 │ └── modules 不同事件处理方式的模块化,如select、poll、epoll、kqueue等 ├── http njet作为http服务器相关的代码 │ └── modules 包含http的各种功能模块 ├── ext/lua lua模块 ├── mail njet作为邮件代理服务器相关的代码 ├── stream tcp/ udp 四层网络代理服务器相关的代码 ├── misc 一些辅助代码,测试c++头的兼容性,以及对google_perftools的支持 └── os 主要是对各种不同体系统结构所提供的系统函数的封装,对外提供统一的系统调用接口
显示帮助信息
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}
1. 安装 Ubuntu 发行版本的 OpenNJet
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://njet.org.cn/download/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/njet.gpg
这里正确的话应该是可以看到一些下载情况的,我之前已经下载过一次了,所以这里就没有内容了
sudo chmod a+r /etc/apt/keyrings/njet.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/njet.gpg] https://njet.org.cn/download/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/njet.list > /dev/null
sudo apt-get update
sudo apt-get install njet
sudo systemctl start njet
浏览器访问:localhost:8080
curl http localhost:8080/
能够看到上述页面,说明 OpenNJet 安装成功了!!!
OpenNJet 的主要配置文件为 njet.conf
。可以通过修改该文件来配置 OpenNJet。
njet.conf
在 /usr/local/njet/conf
目录下
例如,以下是一个简单的 OpenNJet配置文件示例,用于将所有请求重定向到一个 HTML 文件:
http { include mime.types; access_log off; vhost_traffic_status_zone; #lua_package_path "$prefix/lualib/lib/?.lua;/usr/local/njet/modules/?.lua;;"; #lua_package_cpath "$prefix/lualib/clib/?.so;;"; server { #modsecurity on; #modsecurity_rules_file /usr/local/njet/conf/modsec/main.conf; listen 8080; location / { root html; } } }
njet.conf
文件的权限sudo apt install gedit
cd /usr/local/njet/conf
sudo chmod a+w njet.conf
gedit njet.conf
修改 njet.conf
文件的端口为 9090
更改 html
文件内容
在
/usr/local/njet/html
中
cd /usr/local/njet/html
sudo chmod a+w index.html
gedit index.html
更改后
<!DOCTYPE html> <html> <head> <title>黑客帝国代码雨</title> </head> <body> <canvas id="canvas"></canvas> <style type="text/css"> body { margin: 0; padding: 0; overflow: hidden; } </style> <script type="text/javascript"> var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); canvas.height = window.innerHeight; canvas.width = window.innerWidth; var texts = '156dsfcac'.split(''); var fontSize = 16; var columns = canvas.width / fontSize; // 用于计算输出文字时坐标,所以长度即为列数 var drops = []; //初始值 for (var x = 0; x < columns; x++) { drops[x] = 1; } function draw() { //让背景逐渐由透明到不透明 ctx.fillStyle = 'rgba(0, 0, 0, 0.05)'; ctx.fillRect(0, 0, canvas.width, canvas.height); //文字颜色 ctx.fillStyle = '#0F0'; ctx.font = fontSize + 'px arial'; //逐行输出文字 for (var i = 0; i < drops.length; i++) { var text = texts[Math.floor(Math.random() * texts.length)]; ctx.fillText(text, i * fontSize, drops[i] * fontSize); if (drops[i] * fontSize > canvas.height || Math.random() > 0.95) { drops[i] = 0; } drops[i]++; } } setInterval(draw, 33); </script> </body> </html>
在完成 OpenNJet 配置后,可以通过以下命令重启 OpenNJet:
sudo systemctl stop njet
sudo systemctl start njet
访问地址:localhost:9090
OpenNJet是一款高性能、轻量级的云原生应用引擎,它为互联网和云原生应用提供了强大的运行时组态服务。以下是我认为的OpenNJet一些主要优点:
轻量级与灵活性:OpenNJet具有轻量级的特性,这意味着它占用的资源相对较少,使得开发者能够更轻松、高效地进行应用开发。这种轻量级的特性还提高了应用的部署灵活性,使得应用可以在各种云环境中快速部署和运行。
快速开发:OpenNJet为开发者提供了丰富的开发工具和友好的开发环境,有助于开发者快速构建和调试应用。这种快速开发的能力可以显著缩短开发周期,提高开发效率,从而加速将创新转化为商业价值。
高性能:OpenNJet的性能表现优异,其性能甚至达到了CNCF推荐的Envoy的三倍。这种高性能使得OpenNJet能够处理大量的请求和数据,满足高并发、低延迟的应用需求。
动态配置与扩展性:OpenNJet具有动态配置加载的能力,可以实时更改配置而无需重新启动服务器,解决了NGINX等传统工具的长期痛点。此外,它还通过CoPliot副驾驶服务框架实现了高可扩展性,可以在隔离控制面和数据面的情况下进行灵活的扩展。
功能丰富:OpenNJet不仅实现了NGINX的云原生功能增强、安全加固和代码重构,还提供了多种产品形态,如Web服务器、负载均衡、代理、应用中间件、API网关等。同时,它还增加了透明流量劫持、熔断、遥测与故障注入等新功能特性,为应用提供了更全面的保护和管理能力。
环境感知与安全控制:OpenNJet具备环境感知和安全控制的能力,可以根据不同的云环境和应用需求进行智能调整和优化。同时,它还提供了强大的安全控制功能,确保应用的安全性和稳定性。
个人看法,OpenNJet 作为一款高性能、轻量级的云原生应用引擎,具有诸多优点,能够助力企业实现云原生技术的平滑升级并大幅降低IT运营成本。
由于文章篇幅有限,更多功能和实战可以查看官方:https://njet.org.cn/
参考文章:
开源地址:https://github.com/OpenNJet/OpenNJet【可以点个 start 多支持一下】
官方文档:https://njet.org.cn/、https://gitee.com/njet-rd/docs/tree/master/zh-cn
开发指南:https://gitee.com/njet-rd/docs/blob/master/zh-cn/CoPilot%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97.md
使用手册:https://gitee.com/njet-rd/docs/blob/master/zh-cn/OpenNJet%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8Cv2.1.0.md
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。