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

目录

    • 一、初识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.mzph.cn/bicheng/7996.shtml

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

相关文章

【Unity】使用Resources.LoadAll读取文件的顺序问题

最近在做客户的一个项目,其中的一个模块使用到了照片,但是发现了一个很严重的问题。当你在使用Unity的时候,它竟然不按照顺序读取?这个机器人是不是逻辑有问题?如下图: 名字脱敏了哈。。。 照片比较多&…

【小迪安全2023】第61天:服务攻防-中间件安全CVE复现K8sDockeruettyWebsphere

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…

编程语言QT、C++、C#、Matlab、SQL Server开发日志总结

目录 引言 正文 1、Qt连接SQL server数据库 2、C#使用chart绘制实时折线图,波形 3、ORACLEXE数据库 4、QT通过ODBC驱动连接Oracle数据库 5、Microsoft SQL Server 2014 安装图解 6、SQL Server 2014应用 7、C/C​​​​​​​ 8、QT…

Kubernetes容器编排简介

1.1 Kubernetes的诞生到应用 Kubernetes的诞生源于对高效管理和部署大规模容器化应用的需求,它由Google基于其内部使用的Borg系统的核心理念而设计,并在2014年开源,迅速吸引了全球开发者和企业的关注。凭借其开放性和灵活性,Kuber…

Vue3:menu导航栏出现多个同一跳转路径的菜单处理

文章目录 需求整理实现思路实现过程 需求整理,实现思路 最近公司想将之前老的项目整理出来,因为这个老项目内容太杂什么页面都往里面塞,导致菜单特别多,公司就像将这个老的项目迁出来,这个旧的项目本来是后端PHP写的。…

【intro】图注意力网络(GAT)

论文阅读 https://arxiv.org/pdf/1710.10903 abstract GAT,作用于图结构数据,采用masked self-attention layers来弥补之前图卷积或类似图卷积方法的缺点。通过堆叠layers,让节点可以添加其邻居的特征,我们就可以给不同的邻居节…

如何更好地使用Kafka? - 事先预防篇

要确保Kafka在使用过程中的稳定性,需要从kafka在业务中的使用周期进行依次保障。主要可以分为:事先预防(通过规范的使用、开发,预防问题产生)、运行时监控(保障集群稳定,出问题能及时发现&#…

Cargo - 构建 rust项目、管理依赖包

文章目录 关于 Cargo构建项目创建工程编译运行buildclean 管理依赖添加依赖updatecheck计时 manual rust 安装可参考:https://blog.csdn.net/lovechris00/article/details/124808034 关于 Cargo Cargo 官方文档 : https://doc.rust-lang.org/cargo/crat…

文本转图表的AI工具-Chart-GPT

Chart-GPT Chart-GPT一款基于 GPT 实现的开源工具,可在几秒内,将文本快速转换为各种图表。用户只需在输入字段中输入数据说明和所需的图表类型,Chart-GPT的后台生成器即可建出多种类型的图表,包括条形图、折线图、组合图、散点图、…

「Dasha and Photos」Solution

简述题意 给定一个 n m n \times m nm 的方格,每个格子里有一个小写英文字母。 现在你有 k k k 个 n m n \times m nm 的方格,这些方格都是给定方格的基础上将左上角为 ( a i , b i ) (a_i,b_i) (ai​,bi​),右下角为 ( c i , d i ) …

【LAMMPS学习】八、基础知识(5.11)磁自旋

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

FFmpeg 音视频处理工具三剑客(ffmpeg、ffprobe、ffplay)

【导读】FFmpeg 是一个完整的跨平台音视频解决方案,它可以用于音频和视频的转码、转封装、转推流、录制、流化处理等应用场景。FFmpeg 在音视频领域享有盛誉,号称音视频界的瑞士军刀。同时,FFmpeg 有三大利器是我们应该清楚的,它们…

2024年第九届数维杯数学建模B题思路分享

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间:2024…

Ansible-playbook剧本

目录 一、Ansible playbook简介 2.1 playbook格式 2.2 playbook组成部分 二、playbook示例 2.1 yaml文件编写 2.2 运行playbook 2.3 定义、引用变量 2.4 指定远程主机sudo切换用户 ​编辑 2.5 when条件判断 ​编辑​编辑 2.6 迭代 ​编辑 ​编辑 三、总结 Ansib…

2023黑马头条.微服务项目.跟学笔记(五)

2023黑马头条.微服务项目.跟学笔记 五 延迟任务精准发布文章 1.文章定时发布2.延迟任务概述 2.1 什么是延迟任务2.2 技术对比 2.2.1 DelayQueue2.2.2 RabbitMQ实现延迟任务2.2.3 redis实现3.redis实现延迟任务4.延迟任务服务实现 4.1 搭建heima-leadnews-schedule模块4.2 数据库…

简单了解泛型

基本数据类型和对应的包装类 在Java中, 基本数据类型不是继承自Object, 为了在泛型代码中可以支持基本类型, Java给每个基本类型都对应了一个包装类型. 简单来说就是让基本数据类型也能面向对象.基本数据类型可以使用很多方法, 这就必须让它变成类. 基本数据类型对定的包装类…

sql注入练习

1.什么是SQL注入 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库 2.sql注入原理 攻击者注入一段包含注释符的SQL语…

能将图片转为WebP格式的WebP Server Go

本文完成于 2023 年 11 月 之前老苏介绍过 webp2jpg-online,可以将 webp 格式的图片,转为 jpg 等,今天介绍的 WebP Server Go 是将 jpg 等转为 webp 格式 文章传送门:多功能图片转换器webp2jpg-online 什么是 WebP ? WebP 它是由…

Vue 路由

单应用程序 SPA - Single Page Application 所有功能在一个html页面上实现 单页面应用 多用于 系统类网站/内部网站/文档类网站/移动端站点 多页面应用 多用于 公司官网/电商类网站 路由 单页面应用按需更新页面,需要明确访问路径和组件的对应关系 Vue中的路…

重学java 30.API 1.String字符串

于是,虚度的光阴换来了模糊 —— 24.5.8 一、String基础知识以及创建 1.String介绍 1.概述 String类代表字符串 2.特点 a.Java程序中的所有字符串字面值(如“abc”)都作为此类的实例(对象)实现 凡是带双引号的,都是String的对象 String s "abc&q…