• 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源:

    首先执行以下指令:

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

    在这里插入图片描述

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

    ls -al /etc/yum.repos.d/mercurial.repo
    

    在这里插入图片描述

    1.2.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.3.创建符号连接
    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.编译代码

    https://github.com/OpenNJet/OpenNJet
    

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

    在这里插入图片描述

    编译 OpenNJet

    执行以下代码

    sudo sh build_cc.sh conf
    

    在这里插入图片描述

    执行 make
    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。

    /usr/local/njet/conf/njet.conf
    

    在这里插入图片描述

    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

    sudo systemctl start njet
    

    在这里插入图片描述

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

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

    六、总结

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

  • 相关阅读:
    Dubbo源码分析
    BigLEN(rat)脑内最丰富的多肽之一、LENSSPQAPARRLLPP
    自动铣刀式分板机市场分析
    538. 把二叉搜索树转换为累加树
    golang优雅退出
    发送post请求渲染el-table,并实现搜索和分页功能
    MAC认证
    进化吧,MySQL锁!无锁->偏向锁->轻量级锁->重量级锁(请自动脑补数码宝贝进化音)
    HTTP协议
    .NET Conf 2023 Chengdu - 成都站圆满结束!
  • 原文地址:https://blog.csdn.net/qq_44273429/article/details/138521398