下一代云原生应用引擎OpenNJet快实践起来吧

2024-04-28 17:12

本文主要是介绍下一代云原生应用引擎OpenNJet快实践起来吧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • OpenNJet 概述
    • 比NGINX更加强大
    • CentOS 编译环境配置
      • 常用命令
    • Upstream API实现动态添加、删除、修改http模块和stream模块的 upstream server
    • 高可用部署支持
      • 测试验证

OpenNJet 概述

OpenNJet 是基于 NGINX 的一款应用引擎,旨在为互联网和云原生应用提供高性能和多样化的运行时组态服务程序,作为底层引擎,OpenNJet 实现了NGINX 云原生功能增强、安全加固和代码重构,OpenNJet 通过动态加载机制可以实现不同的产品形态,如Web服务器流媒体服务器负载均衡代理(Proxy)应用中间件API网关消息队列等产品形态等等。
在这里插入图片描述

更多特性可以查看官网:https://njet.org.cn/

比NGINX更加强大

在这里插入图片描述
OpenNJet最早是基于NGINX1.19基础,fork并独立演进的开源应用引擎,并随着NGINX版本迭代,吸收上游NGINX的更新,已经同步更新到NGINX1.23.1版本。
相比市面其他类型的API网关,高性能是NGINX主要的优点,但动态配置能力的缺乏一直受到业界的诟病。OpenNJet在NGINX的架构上进行了扩充,对其框架进行了改写,增加了 C 及可持久化的动态存储能力,解决了指令配置变更动态生效的关键问题,扩展了OpenNJet的应用场景。此外,业界对应用引擎可观测性的需求,需要应用引擎持续不断的采集性能指标、日志数据以及注入跟踪信息,但这对应用引擎的性能造成了不可忽视的影响,OpenNJet利用Copilot framwork隔离了业务处理及配置变更和指标采集,避免了遥测对性能的影响。作为云原生的应用引擎,OpenNJet需要支持业界流行的Ingress及Sidecar的api规范,基于动态配置+ Copilot framework架构,NJet可以通过不断更新独立的相关Copilot module,实现对响应标准规范的及时支持
话不多说我们接下来实操体验一波。

CentOS 编译环境配置

首先需要准备一台可以访问外网的机器,我这里使用的是CentOS7环境。

  1. 如果本机已配置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.1 如果没有配置yum源则执行以下命令配置yum源后再执行上面的命令安装软件包:

  1. 执行以下指令:sudo yum --enablerepo=extras install -q -y epel-release centos-release-scl-rh [https://repo.ius.io/ius-release-el7.rpm](https://gitee.com/link?target=https%3A%2F%2Frepo.ius.io%2Fius-release-el7.rpm)
  2. sudo curl -o /etc/yum.repos.d/mercurial.repo [https://www.mercurial-scm.org/release/centos7/mercurial.repo](https://gitee.com/link?target=https%3A%2F%2Fwww.mercurial-scm.org%2Frelease%2Fcentos7%2Fmercurial.repo)
  3. 上面步骤完成后,文件系统的目录/etc/yum.repos.d 将生成对应的repo文件,可以通过ls -al /etc/yum.repos.d/mercurial.repo查看。

二、创建符号链接

  1. sudo ln -s /opt/rh/devtoolset-8/root/usr/bin/gcc /usr/local/bin/gcc
  2. sudo ln -s /opt/rh/devtoolset-8/root/usr/bin/c++ /usr/local/bin/c++
  3. sudo ln -s /opt/rh/devtoolset-8/root/usr/bin/cc /usr/local/bin/cc
  4. sudo ln -s /opt/rh/devtoolset-8/root/usr/bin/make /usr/local/bin/make

三、编译代码

  1. 把OpenNJet 1.0.zip 包上传到 /home 目录下。 并解压 unzip njet1.0.zip,如图:
    在这里插入图片描述

  2. 执行:sh build_cc.sh conf
    在这里插入图片描述

  3. 执行命令:make

如果make 后,有如下提示:则继续 执行 make 指令。

正确编译完成:如图:
在这里插入图片描述

  1. 最后执行:make install安装完成。

常用命令

显示帮助信息:njet -h
启动:njet -p /tmpr/njet/ -c conf/njet.conf
​常见启动参数:

​ -p 指定prefix配置文件路径,不指定,默认/etc/njet

​ -c 指定配置文件,不指定,默认njet.conf

​ -e 指定error 日志文件

测试配置信息是否有错误:njet -t
显示版本:​ njet -v
显示编译阶段的参数:​ njet -V
快速停止: njet -s stop 或者 kill -TERM {进程id}
优雅停止服务:njet -s quit 或者 kill -QUIT {进程id}
重新加载配置:​ njet -s reload 或者 kill -HUP {进程id}

Upstream API实现动态添加、删除、修改http模块和stream模块的 upstream server

比原有的nginx更强大,可以实现态添加、删除、修改http模块和stream模块的 upstream server ,要开启该功能, 需在 ctrl.conf 配置文件的 main 块中加载该模块:

load_module modules/njt_http_upstream_api_module.so;

并在 http 块下,指定该模块的配置文件:

http {access_log logs/access_ctrl.log combined;server {listen         8081  ;location /api {dyn_module_api;}}
}

Upstream api,配置ACL控制

load_module modules/njt_http_upstream_api_module.so; server {listen       8081;location /api {dyn_module_api;limit_except GET {auth_basic "NGINX plus API";auth_basic_user_file /etc/njet/htpasswd;}}}

更多具体操作细节可以查看官方文档:https://gitee.com/njet-rd/docs

高可用部署支持

为了简化部署及配置,NJet 通过Copilot 扩展机制实现了VRRP协议的HA模块,只要加载HA Copilot 并提供相应的配置文件,即可实现高可用功能。
开启HA功能需在njet.conf的 main block 中添加如下指令

helper ha modules/njt_helper_ha_module.so conf/vrrp.conf;

并在conf目录下提供vrrp配置文件,配置项的说明如下。

配置项必填配置说明
vrrp_instancevrrp_instance的string为设置的VRRP的实例名。
state设置当前节点的初始化状态,状态为MASTER或者BACKUP
interface可以绑定vip的接口名称,比如eth0,bond0,br0。
通过IP -a查看自己的网卡信息
nopreempt设置是否抢占虚拟IP,添加即为不抢占
virtual_router_id设置虚拟路由器惟一标识,范围:0-255,同属一个集群的多个njet节点该id相同,不同的njet集群该值必须不同,务必要确认在同一网络中此值必须唯一。
priority设置当前njet节点的优先级,范围:[1-254],值越大优先级越高
virtual_ipaddress设置虚拟IP对应的子网掩码

测试验证

  • 配置三台服务器测试机,IP分别是:
  1. 192.168.100.66
  2. 192.168.100.66
  3. 192.168.100.68
  • 使用虚拟IP:
  1. 192.168.100.50

192.168.100.66服务器vrrp.conf配置如下:

vrrp_instance m{state MASTERinterface eth192virtual_router_id 32 priority 200 virtual_ipaddress {192.168.100.50/24 }
}

192.168.100.67服务器vrrp.conf配置如下:

vrrp_instance m{state BACKUPinterface eth192virtual_router_id 32 priority 10 virtual_ipaddress {192.168.100.50/24 }
}

192.168.100.68服务器vrrp.conf配置如下:

vrrp_instance m{state BACKUPinterface eth192virtual_router_id 32 priority 100 virtual_ipaddress {192.168.100.50/24 }
}

三台服务器上的NJet都启动时,由于100.66是MASTER,该主机将获取到VIP;
停止100.66主机上的NJet实例后,由于100.68主机的优先级priority 较高,100.68将获得VIP;
重新启动100.66主机上的NJet实例后,100.66将重新获得VIP。

OpenNJet 作为基于 NGINX 的应用引擎,为互联网和云原生应用提供了多样化、灵活和高性能的解决方案。其动态加载机制和模块化设计使得其在多种产品形态中都能表现出色。无论是 Web 服务器、流媒体服务器、负载均衡、代理,还是 API 网关和消息队列,OpenNJet 都能够轻松适应。这种灵活性和可扩展性使其成为各种应用场景中的理想选择。
对于寻求高性能和灵活性的开发者和企业,OpenNJet 是一个值得考虑的解决方案。无论是作为核心应用引擎,还是作为云原生架构的一部分,OpenNJet 都能提供强大的支持和稳定的性能。
由于文章篇幅有限,更多功能和实战可以查看官方:https://njet.org.cn/

参考:
开源地址:

  • https://github.com/OpenNJet/OpenNJet
  • https://gitee.com/njet-rd/njet

官方提供版本使用手册:https://gitee.com/njet-rd/docs/tree/master/zh-cn

本文内容到此结束了,
如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。
如有错误❌疑问💬欢迎各位指出。
主页:共饮一杯无的博客汇总👨‍💻

保持热爱,奔赴下一场山海。🏃🏃🏃

这篇关于下一代云原生应用引擎OpenNJet快实践起来吧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

Nginx实现高并发的项目实践

《Nginx实现高并发的项目实践》本文主要介绍了Nginx实现高并发的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用最新稳定版本的Nginx合理配置工作进程(workers)配置工作进程连接数(worker_co

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

《MySQLInnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据》mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据... 参考:mysql Innodb表空间卸载、迁移、装载的使用方法注意!此方法只适用于innodb_fi

Spring Retry 实现乐观锁重试实践记录

《SpringRetry实现乐观锁重试实践记录》本文介绍了在秒杀商品SKU表中使用乐观锁和MybatisPlus配置乐观锁的方法,并分析了测试环境和生产环境的隔离级别对乐观锁的影响,通过简单验证,... 目录一、场景分析 二、简单验证 2.1、可重复读 2.2、读已提交 三、最佳实践 3.1、配置重试模板

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

Spring Boot 3 整合 Spring Cloud Gateway实践过程

《SpringBoot3整合SpringCloudGateway实践过程》本文介绍了如何使用SpringCloudAlibaba2023.0.0.0版本构建一个微服务网关,包括统一路由、限... 目录引子为什么需要微服务网关实践1.统一路由2.限流防刷3.登录鉴权小结引子当前微服务架构已成为中大型系统的标

MobaXterm远程登录工具功能与应用小结

《MobaXterm远程登录工具功能与应用小结》MobaXterm是一款功能强大的远程终端软件,主要支持SSH登录,拥有多种远程协议,实现跨平台访问,它包括多会话管理、本地命令行执行、图形化界面集成和... 目录1. 远程终端软件概述1.1 远程终端软件的定义与用途1.2 远程终端软件的关键特性2. 支持的