Gitee 推荐 | 基于 nginx 的应用引擎 OpenNJet

735次阅读
没有评论

OpenNJet 介绍

OpenNJet 应用引擎是基于 NGINX 的面向互联网云原生应用提供的运行时组态服务程序。具备环境感知、安全控制、加速优化等能力,作为底层引擎,OpenNJet 利用动态加载机制可以实现不同的产品形态,如API网关、消息代理、出入向代理,负载均衡,WAF等等。在云原生架构中,OpenNJet 除了提供南北向通信网关的功能以外,还提供了服务网格中东西向通信、透明流量劫持、熔断、遥测与故障注入等新功能特性。

OpenNJet 最早是基于 NGINX1.19 基础 fork 并独立演进,随着 NGINX 版本迭代,吸收上游 NGINX 的更新,已经同步更新到 NGINX1.23.1 版本,OpenNJet 具有高性能、稳定、易扩展的特点,同时也解决了 NGINX 长期存在的难于动态配置、管理功能影响业务等问题。我们目标在于适应国内特定的技术规范及标准,如国密算法套件支持、构建安全可控的云原生数据面,支撑我国云原生产业生态。

🏗️ 技术架构

Gitee 推荐 | 基于 nginx 的应用引擎 OpenNJet

功能特性

继承 nginx-1.23.1 所有功能, 并且100%兼容nginx

OpenNJet 功能特性

C++opilot框架

支持动态加载不同的外部copilot模块

支持外部模块异常退出的自动重启

KV模块

支持键值的查询及设置

支持键值的持久化

动态配置框架

支持控制平面的消息发送

支持RPC消息、组播消息

支持消息持久化

Cache-purge

支持缓存清理

支持按指定前缀清理缓存

开启分片后修改源文件不会造成下载失败

health_check

支持单独在helper进程开启健康检查,不影响数据面业务

支持运行时动态开启或关闭健康检查功能

支持校验返回http code

支持校验返回http header

支持校验返回http body

支持https健康检查

支持国密https健康检查

Split-clients-2

支持蓝绿发布

支持运行时动态调整流量比例

黑白名单

支持黑名单方式进行访问IP的限制

支持白名单方式进行访问IP的限制

 支持运行时动态设置IPv4的黑白名单列表

doc模块

支持location 级别通过doc_api 指令配置,实现对swaggergui页面的访问

支持通过swagger 页面实现对各功能opentapi的访问

支持通过gui页面实现对动态模块配置修改的能力

telemetry(外部编译模块)

支持http请求在不同server间的服务追踪

支持动态开关控制调用链的生成

正向代理(支持http/https

实现了HTTP CONNECT 方法支持http/https正向代理访问

vts模块

支持serverrequestresponsetrafficcache信息的统计,其中serverresponse可以按照response code进行分类统计,分类统计使用的response code1xx2xx3xx4xx5xx

支持upstreamcache信息的统计

支持通过内嵌的html页面进行统计信息的展示

支持通过Prometheusgrafana进行统计信息的展示

支持动态配置serverlocation统计开关,支持动态配置serverfilter key

国密支持

支持server中使用国密

支持反向代理中使用国密

支持国密双证证书

动态(国密)证书更新

动态access log

支持运行中动态关闭access log功能

支持运行中动态修改写入的日志文件

支持运行中切换syslog服务器

支持运行中切换写入文件的变量

支持运行时增加日志format

支持运行时修改日志format

声明式API

支持感知声明式模块注册

支持查询声明式模块查询

支持PUT方式更新声明式配置

边车支持

支持流量劫持,兼容istio 规则

支持协议识别

支持代理http1.1

支持 istio 的双向认证(service-to-service mTLS)

动态location 支持

支持通过api vs 添加 location

支持通过api vs中删除已经添加的location

动态upstream api
支持

支持通过api,对http stream 中的upstream
信息进行查询

支持通过api,对http stream 中的upstream
server 进行, 添加,修改,删除

支持通过api,对http stream 中的upstream
的统计信息进行重置

支持post 添加的upstream
server
持久化或非持久化

动态域名upstream server

支持静态配置upstream server 域名的reslove 属性,定时解析域名,根据域名对应的ip 增减结果,同步更新到upstream server 列表中

支持通过upstream api
post
接口,添加server 域名,并定时解析域名

Http 会话保持支持

支持cookie 会话保持

支持route 会话保持

支持lear 会话保持

💥源码下载

OpenNJet 主库地址:

♻️ 代码仓地址

https://gitee.com/njet-rd/njet

🚀安装

Quic Start:

提供基于 Dockerfile 文件的形式进行快速编译

依赖:

  1. docker 环境(需要在编译机器安装docker并启动docker)

步骤:

  1. 下载 OpenNJet 源码
  2. 执行如下命令:

​ docker build -t njet_main:v1.0 .

​ docker run -v pwd:/njet_main njet_main:v1.0 /bin/bash -c “cd /njet_main && sh build_njet.sh”

  1. 编译完后,在 objs 目录下,主要包含 njet 文件和相关的 so 文件

​ njet 可执行文件

​ *.so 相关模块对应的动态库文件

📝文档

OpenNJet使用手册
OpenNJet快速上手
OpenNJet遗留问题

FAQ

什么是应用引擎?

应用引擎是面向互联网和云原生应用提供的运行时组态服务程序。具备环境感知、安全控制、加速优化等能力,一般呈现为Web服务、流媒体服务、代理(Proxy)、应用中间件、API网关、消息队列等产品形态。

  • 互联网时代国际主流的应用引擎包括:NGINX, Apache, IIS 等。

  • 在云原生时代有许多新的轻量级应用引擎涌现,比较流行的云原生应用引擎包括: NGINX(C语言 ) ,Envoy(C++语言) , Linkerd(Rust语言) 等。

在云原生架构中,应用引擎除了提供南北向通信网关的功能以外,还提供了服务网格中东西向通信、透明流量劫持、熔断、遥测与故障注入、链路追踪、蓝绿发布等新功能特性,因此应用引擎在云原生架构中发挥着更为关键的作用。

Gitee 推荐 | 基于 nginx 的应用引擎 OpenNJet

图1 云原生应用引擎架构

应用引擎的产品形态

Gitee 推荐 | 基于 nginx 的应用引擎 OpenNJet

图2 应用引擎产品形态

如上图所示,应用引擎产品形态包括Web服务器、流媒体服务器、应用服务器和代理服务器等。其中代理服务器又可分为正向代理、反向代理、边车和消息代理等产品。

技术交流QQ群:

群号:607280080

Gitee 推荐 | 基于 nginx 的应用引擎 OpenNJet

Read More 

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 
评论(没有评论)
Generated by Feedzy