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

news2024/12/29 9:02:19

目录

    • 一、初识OpenNJet
    • 二、系统架构
    • 三、动手实践
      • 1.CentOS 编译环境配置
        • 1.1配置yum源:
        • 1.2.yum安装软件包
        • 1.3.创建符号连接
      • 2.编译代码
        • 编译 OpenNJet
        • 执行 make
    • 四、基本使用说明
      • 1.目录结构概述:
      • 2.常用命令:
    • 五、部署 Web 应用程序
      • 配置文件修改
      • 启动 NJet
    • 六、总结

一、初识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在动态配置能力和性能指标采集方面的不足,并提供了简单的编译和安装流程以及丰富的命令和参数,使用户能够快速上手并灵活配置和管理服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1647738.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据分析的数据模型

数据分析的数据模型 前言一、优化模型1.1线性优化模型1.1.1线性优化模型定义1.1.2线性优化模型求解算法1. 1.2.1图解法1. 1.2.2. 单纯形法 1.1.3 线性优化模型的应用 1.2非线性优化模型1.2.1非线性优化模型定义1.2.2非线性优化划模型求解方法1. 2.2.1有约束非线性模型算法1.2.2…

“前人种树,后人乘凉”:【薪象营】五一探访活动弘扬传统美德

在五一劳动节这一天,唐刚携带【唐江军】的前成员,前往广州开展了一场特殊的慈善探访活动。这不仅是一个简单的慈善活动,更是唐刚希望向新成立的【薪象营】传承的一种精神和行动典范。 精神传承与实际行动 唐刚,【唐江军】的发起人…

一般显卡3d建模渲染够用吗?3d云渲染助力

3D建模和渲染对计算机硬件有较高要求,特别是显卡。显卡的性能直接影响渲染速度,低端和高端显卡在渲染效率上存在显著差异。对于追求快速渲染的用户,高端显卡是首选。那么,4050显卡是否能够满足3D建模渲染的需求呢?下面我们来探讨…

单目标问题的烟花优化算法求解matlab仿真,对比PSO和GA

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 单目标问题的FW烟花优化算法求解matlab仿真,对比PSO和GA。最后将FW,GA,PSO三种优化算法的优化收敛曲线进行对比。 2.测试软件版本以及运行…

如何在QGIS中安装Python第三方库

目录 1.在QGIS安装目录下,找到Windows批处理文件 OSGeo4W。 2.双击运行该批处理文件,然后使用pip install 命令安装相应的第三方库。 3.在QGIS Python Console 控制平台就可以运行 anaconda jupyter notebook的脚本了。 1.在QGIS安装目录下&#xff0…

信息系统项目管理师0090:项目经理的影响力范围(6项目管理概论—6.3项目经理的角色—6.3.2项目经理的影响力范围)

点击查看专栏目录 文章目录 6.3.2项目经理的影响力范围1.概述2.项目3.组织4.行业5.专业学科6.跨领域6.3.2项目经理的影响力范围 1.概述 项目经理在其影响力范围内可担任多种角色,这些角色反映了项目经理的能力,体现了项目经理的价值和作用,项目经理会涉及项日、组织、行业、…

免费开源论坛社区社交圈子系统,圈子系统,系统开发,支持二开,包含公众号/app/H5,源码交付!

一款追求体验的社区论坛圈子系统 什么是圈子交友系统? 圈子交友系统(多客开源圈子系统)为会员提供精准交友服务 结合多种营销机制为创业者提供低成本、高效获取注册会员,是婚恋交友行业的创业利器! 多类型内容形式 多场景应用 精准推广、直…

鸿蒙 DevEcoStudio:组件实例(页面及组件生命周期函数)

【使用onPageshow等生命周期函数】 在entry/src/main/ets/pages路径下创建Page1.ets: import router from ohos.router Entry Component struct Page1 {State message: string Hello WorldState show: booleantrueaboutToAppear(){console.log(Page1组件创建实例)}aboutToDisa…

【Linux】kaili实现CVE-2019-5736漏洞复现

CVE漏洞复现 一、了解docker逃逸1.Docker逃逸的原理2.常见的Docker逃逸方法3.如何防范Docker逃逸 二、介绍POC,Payload,EXP,Shellcode1.POC(Proof of Concept):2.EXP(Exploit)&#…

学习c#第26天 面向对象基础之类与对象

1.类 1.什么是类? 俗话说,“物以类聚,人以群分”。意思是同类的东西经常聚在一起,志同道合 的人相聚成群。前者说物,后者说人。这里以物来进行举例说明[见图]: 水果超市,所有同类的水果摆放在一起&#xf…

数据同步新突破!一招解决文化公司系统对接难题!

一、客户介绍 某文化传播有限公司,是一家专注于文化艺术领域,集创作、制作、交流等多功能于一体的公司。公司始终秉承创意和质量的双重标准,为观众带来一系列高质量的文化艺术作品。该公司的经营范围广泛,涵盖了组织文化艺术交流…

09 华三 SSH

03 华三SSH 远程登录 1 AI解说官网 Kimi.ai - 帮你看更大的世界 (moonshot.cn) 华三交换机的SSH配置主要目的是通过SSH协议实现安全的远程登录和管理,以确保数据传输的安全性。以下是配置SSH的一般步骤和思路: 生成密钥对:首先需要在交换…

libcity 笔记:libcity/executor/traj_loc_pred_executor.py

1 构造函数 2 _build_optimizer 根据配置中指定的优化器类型创建并返回一个适合用于模型训练的优化器对象 3 _build_scheduler 构建一个学习率调度器(scheduler) 4 train 5 run 6 _valid_epoch 7 load_model & save_model 保存/加载模型的状态字…

应急响应靶机训练-近源渗透OS-1

前言 应急响应靶机训练,为保证每位安服仔都有上手的机会,不做理论学家,增加动手经验,可前来挑战应急响应靶机-近源渗透OS1,此系列后期会长期更新,关注本公众号,被动学习。 挑战内容 前景需要:…

Coze扣子开发指南:怎样建立一个工作流?

Coze扣子的工作流支持通过可视化的方式,对插件、大语言模型、代码块等功能进行组合,从而实现复杂、稳定的业务流程编排。​ 简单的说,目前阶段,单独靠大语言模型能完成的任务还是有限的,那怎么办呢?解决方案…

我独自升级崛起游戏账号登录注册教程 (5.8最新版)

新韩漫公司所发布的这项动作游戏已向玩家们敞开大门,为大家带来了前所未有的游戏体验和乐趣。这个游戏内包含了大量令人着迷的故事、令人印象深刻的战斗场景以及丰富多样的娱乐元素。在这其中最为引人注目的一点就是游戏内容中融入了“虚拟角色”的元素,…

Open CASCADE学习|三重正交标架法则

三重正交标架(Trihedron) 定义:三重正交标架是在三维空间中定义的一个坐标系,由三个互相垂直的向量构成。这些向量分别是: 切线向量(Tangent Vector) - 表示曲线在某一特定点处的切线方向。 主法线向量&…

perl:用 MIDI::Simple 生成midi文件,用 pygame 播放 mid文件

在 csdn.net 下载 strawberry-perl-5.32.1.1-64bit.zip 解压安装在 D:\Strawberry\ 运行 cpan install MIDI::Simple D:\Strawberry\c\bin\gmake.exe test -- OK Running make install for CONKLIN/MIDI-Perl-0.84.tar.gz Installing D:\Strawberry\perl\site\lib\MIDI.pm I…

优惠券样式案例

优惠券样式案例 <template><view class"box"><view class"boxItem"><img src"../../../static/come.png" alt"" class"img"/><span class"icon">&#xffe5;</span><s…

TalkingGaussian:基于高斯溅射的结构保持3D说话人头合成

TalkingGaussian: Structure-Persistent 3D Talking Head Synthesis via Gaussian Splatting TalkingGaussian&#xff1a;基于高斯溅射的结构保持3D说话人头合成 Jiahe Abstract 摘要 TalkingGaussian: Structure-Persistent 3D Talking Head Synthes…