下一代云原生应用引擎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

相关文章

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python利用PySpark和Kafka实现流处理引擎构建指南

《Python利用PySpark和Kafka实现流处理引擎构建指南》本文将深入解剖基于Python的实时处理黄金组合:Kafka(分布式消息队列)与PySpark(分布式计算引擎)的化学反应,并构建一... 目录引言:数据洪流时代的生存法则第一章 Kafka:数据世界的中央神经系统消息引擎核心设计哲学高吞吐