OpenNJet 应用引擎:在 NGINX 基础上的云原生增强

目录

一、初识OpenNJet

OpenNJet 应用引擎是一个基于 NGINX 的运行时组态服务程序,专为互联网和云原生应用提供支持。通过对 NGINX 架构的改进和扩展,OpenNJet 实现了云原生功能增强、安全加固和代码重构,具备动态加载机制,能够实现多种产品形态,如 Web 服务器、流媒体服务器、负载均衡、代理、应用中间件、API 网关、消息队列等。

想要了解更多可以查看OpenNJet官网:https://njet.org.cn/

二、系统架构

NGINX以其高性能在API网关领域中脱颖而出,但其缺乏动态配置能力一直为业界所批评。为了解决这一问题,OpenNJet在NGINX的基础架构上进行了扩展和改进,增加了C语言编写的可持久化动态存储功能,使得配置更改可以动态生效,从而显著提升了OpenNJet的灵活性和适用性。

此外,随着对应用引擎可观测性需求的增加,OpenNJet采用了Copilot框架,通过将业务处理、配置变更与性能指标采集、日志记录和跟踪信息注入分离,有效减少了遥测数据处理对主要性能的影响。作为一个云原生的应用引擎,OpenNJet支持行业广泛使用的Ingress和Sidecar API规范。基于动态配置和Copilot框架,OpenNJet能够通过更新独立的Copilot模块来快速适应不断变化的行业标准,确保其在现代应用部署中的竞争力。

三、动手实践

OpenNJet 的编译与安装相对简单,需要准备相应的编译环境,并执行简单的编译命令和安装步骤。具体流程清晰明了,开发者能够快速上手。

本文以 CentOS 系统环境为例带大家动手实践一下

1.CentOS 编译环境配置

1.1配置yum源:

首先执行以下指令:

bash 复制代码
sudo yum --enablerepo=extras install -q -y epel-release centos-release-scl-rh https://repo.ius.io/ius-release-el7.rpm
bash 复制代码
sudo curl -o /etc/yum.repos.d/mercurial.repo https://www.mercurial-scm.org/release/centos7/mercurial.repo

上面步骤完成后,文件系统的目录/etc/yum.repos.d 将生成对应的repo文件

bash 复制代码
ls -al /etc/yum.repos.d/mercurial.repo
1.2.yum安装软件包
bash 复制代码
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.3.创建符号连接
bash 复制代码
sudo ln -s /opt/rh/devtoolset-8/root/usr/bin/gcc /usr/local/bin/gcc
sudo ln -s /opt/rh/devtoolset-8/root/usr/bin/c++ /usr/local/bin/c++
sudo ln -s /opt/rh/devtoolset-8/root/usr/bin/cc /usr/local/bin/cc
sudo ln -s /opt/rh/devtoolset-8/root/usr/bin/make /usr/local/bin/make

2.编译代码

cobol 复制代码
https://github.com/OpenNJet/OpenNJet

可以去 GitHub 下载 zip 文件并上传至 /home 目录下,并解压

编译 OpenNJet

执行以下代码

bash 复制代码
sudo sh build_cc.sh conf
执行 make
bash 复制代码
sudo make

正确编译完成如上图所示

最后执行:make install

四、基本使用说明

OpenNJet 提供了丰富的命令和参数,方便进行配置和管理。通过指定配置文件和启动参数,开发者可以快速启动、测试、停止和重新加载服务,同时提供了详细的目录结构和功能说明,方便进行定制和扩展。

1.目录结构概述:

  • build: 包含用于编译rpm/deb的脚本。
  • auto: 自动检测系统环境和编译配置脚本,包括编译器选项(cc)、库(lib)、系统参数(os)和数据类型(types)。
  • conf: 默认配置文件,安装时复制到安装目录。
  • contrib: 包括实用工具如geo配置生成器(geo2njet.pl)。
  • html: 默认网页文件,安装时复制到安装目录。
  • repos: 包含yum数据源。
  • doc: 存放API文档,包括Swagger API、GUI页面和手册。
  • src: njet源代码,包含核心、事件处理、HTTP服务器代码、邮件和网络代理服务器代码等。

2.常用命令:

  • njet -h: 显示帮助信息。
  • njet -p /tmp/njet/ -c conf/njet.conf: 启动,可以指定配置文件路径和配置文件。
  • njet -t: 测试配置信息是否正确。
  • njet -v: 显示版本信息。
  • njet -V: 显示编译参数。
  • njet -s stop: 快速停止服务。
  • njet -s quit: 优雅停止服务。
  • njet -s reload: 重新加载配置。

五、部署 Web 应用程序

配置文件修改

首先我们可以通过修改 njet.conf 文件来配置 OpenNJet。

bash 复制代码
/usr/local/njet/conf/njet.conf
bash 复制代码
worker_processes auto;

cluster_name njet;
node_name node1;

error_log logs/error.log error;

helper ctrl modules/njt_helper_ctrl_module.so conf/njet_ctrl.conf;
helper broker modules/njt_helper_broker_module.so;
#helper ha modules/njt_helper_ha_module.so conf/vrrp.conf;

load_module modules/njt_http_split_clients_2_module.so;  
load_module modules/njt_agent_dynlog_module.so;  
load_module modules/njt_http_dyn_bwlist_module.so; 
load_module modules/njt_dyn_ssl_module.so;
load_module modules/njt_http_vtsc_module.so;
load_module modules/njt_http_location_module.so;
#load_module modules/njt_http_lua_module.so;
#load_module modules/njt_http_modsecurity_module.so;
#load_module modules/njt_http_dyn_modsecurity_module.so;

events {
    worker_connections  1024;
}
http {
    server {
       listen 80;
       server_name example.com;
       location / {
           root /usr/local/njet/html;
           index index.html;
       }
    }
}

/usr/local/njet/html 下我们创建了 index.html 文件

启动 NJet

cobol 复制代码
sudo systemctl start njet

然后我们可以使用服务器的 IP 地址或域名访问这个页面

OpenNJet作为新一代云原生引擎有着多样的安装方式可以满足不同情况的需求,除了上面所展示的基本Web配置外,OpenNJet还具有动态配置,国密支持等等功能,期待能有越来越多的开发者加入进来,一起体验和不断完善OpenNJet的生态环境。

六、总结

本文系统地介绍了OpenNJet,一个基于NGINX的云原生应用引擎,旨在提供对互联网和云原生应用的全面支持。通过对NGINX架构的改进和扩展,OpenNJet解决了NGINX在动态配置能力和性能指标采集方面的不足,并提供了简单的编译和安装流程以及丰富的命令和参数,使用户能够快速上手并灵活配置和管理服务。

相关推荐
传而习乎11 分钟前
Linux:CentOS 7 解压 7zip 压缩的文件
linux·运维·centos
soulteary13 分钟前
突破内存限制:Mac Mini M2 服务器化实践指南
运维·服务器·redis·macos·arm·pika
运维&陈同学2 小时前
【zookeeper01】消息队列与微服务之zookeeper工作原理
运维·分布式·微服务·zookeeper·云原生·架构·消息队列
是阿建吖!2 小时前
【Linux】进程状态
linux·运维
明明跟你说过2 小时前
Linux中的【tcpdump】:深入介绍与实战使用
linux·运维·测试工具·tcpdump
O&REO2 小时前
单机部署kubernetes环境下Overleaf-基于MicroK8s的Overleaf应用部署指南
云原生·容器·kubernetes
运维小文3 小时前
K8S资源限制之LimitRange
云原生·容器·kubernetes·k8s资源限制
Mr_Xuhhh3 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
朝九晚五ฺ11 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
Kkooe12 小时前
GitLab|数据迁移
运维·服务器·git