OpenNJet:云原生技术中的创新者与实践者

发布于:2024-05-07 ⋅ 阅读:(22) ⋅ 点赞:(0)

在这里插入图片描述

引言

在当今快速发展的云计算时代,云原生技术正成为企业数字化转型的核心驱动力。云原生架构以其灵活性、可扩展性和高效的资源利用,为软件的快速迭代和持续集成提供了强大的支持。在这一背景下,高性能的WEB应用与代理软件成为了构建云原生服务网格的关键组件。

OpenNJet应用引擎正是这样一款应运而生的产品,它不仅继承了NGINX的稳定性和高效性,还通过云原生功能增强、安全加固和代码重构,实现了性能的飞跃和功能的丰富。作为云原生服务网格的数据平面,OpenNJet通过动态配置加载、主动式健康检测、集群高可用等特性,为企业提供了一个既强大又灵活的解决方案,以应对不断变化的市场需求。

借此机会,我们来深入了解一下OpenNJet是什么,以及OpenNJet的强大功能和实际应用。

OpenNJet介绍

OpenNJet 应用引擎是基于 NGINX 的面向互联网和云原生应用提供的运行时组态服务程序,作为底层引擎,OpenNJet 实现了NGINX 云原生功能增强、安全加固和代码重构,利用动态加载机制可以实现不同的产品形态,如Web服务器、流媒体服务器、负载均衡、代理(Proxy)、应用中间件、API网关、消息队列等产品形态等等。
OpenNJet 在云原生架构中作为数据平面,除了提供南北向通信网关的功能以外,还提供了服务网格中东西向通信能力。在原有功能基础上增加了透明流量劫持、熔断、遥测与故障注入等新功能特性。

在这里插入图片描述

OpenNJet优势

1. 性能无损动态配置

动态配置能力解决NGINX长期痛点,实时更改NGINX配置而无需重新启动服务器。不中断服务,快速响应流量需求变化

2. 灵活的CoPilot框架

旨在实现高性能的数据处理能力的同时提供方便扩展的管理接口,如指标输出、健康检查、管理界面、配置同步等以便灵活地、动态地监控、配置和管理系统的各个方面,同时确保数据面的稳定性和可靠性

3. 支持HTTP/3

HTTP/3采用了全新的底层传输协议即QUIC,为您提供更快、更可靠和更安全的Web浏览体验,保证互联网数据传输效率的同时减少用户等待,并增强网络的安全性

4. 支持国密

支持国密 SM2、SM3、SM4算法,场景主要为Server和反向代理两种场景,为您提供更强的数据保护,满足合规性

5. 企业级应用

提供集群状态同步及集群配额控制、高可用及运维文档一体化功能,可以帮助企业更好地实现自动化部署、持续集成和持续交付等 DevOps 实践

6. 高效安全

旨在提高现代应用的安全性、可用性和管理效率,特别是涉及到敏感数据、大规模集群和高可用性要求时,帮助企业更好地保护数据、提供可靠的服务,并简化运维任务

在这里插入图片描述

OpenNJet 编译与安装

大致了解了OpenNJet 以及功能和优势,我们来先体验一下编辑和安装吧。

环境准备

  • 能够访问外网的服务器
  • 版本最低为:CentOS Linux release 7.9.2009 (Core)

编译环境配置

配置yum源

  1. 执行命令:安装epel-release、centos-release-scl-rh和https://repo.ius.io/ius-release-el7.rpm
sudo yum --enablerepo=extras install -q -y epel-release centos-release-scl-rh https://repo.ius.io/ius-release-el7.rpm
  1. 从Mercurial官方网站下载CentOS 7版本的存储库配置文件
sudo curl -o /etc/yum.repos.d/mercurial.repo https://www.mercurial-scm.org/release/centos7/mercurial.repo
  1. 上面步骤完成后,文件系统的目录/etc/yum.repos.d 将生成对应的repo文件。
  2. 可以查看mercurial.repo文件的详细信息
ls -al /etc/yum.repos.d/mercurial.repo

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

创建符号连接

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

修改 ld.so.conf 配置

sudo bash -c 'echo "/usr/local/lib" >> /etc/ld.so.conf' 
sudo ldconfig

编译代码

把OpenNJet 1.0.zip 包上传到 /home 目录下。 并解压 unzip njet1.0.zip,如图:
[图片]

运行脚本build_cc.sh

 sh build_cc.sh conf

在这里插入图片描述
执行make命令:如果make 后,有如下提示:则继续 执行 make 指令。
在这里插入图片描述
正确编译的结果如图
在这里插入图片描述
最后执行

make install

部署 WEB SERVER

前提是需要先按照我们上一步正确操作了OpenNJet的编译与安装步骤

配置OpenNJet

OpenNJet 的主要配置文件为 njet.conf。可以通过修改该文件来配置 OpenNJet。 例如,以下是一个简单的 OpenNJet配置文件示例,用于将所有请求重定向到一个 HTML 文件:

http {
    server {
       listen 80;
       server_name example.com;
       location / {
           root /var/www/html;
           index index.html;
       } 
    }
}

上述配置中,在 HTTP 块中定义了一个名为“server”的服务器块。该服务器块监听 80 端口,并将请求的根目录设置为/var/www/html。如果请求的路径不存在,默认会返 回 index.html 文件。

部署 Web 应用程序

在配置 NGINX之前,需要将 Web 应用程序部署到服务器上。可以将 Web 应用程序放置在服务器上的任何位置,只要在 NGINX配置文件中正确设置 root 目录即可。

启动 NJet

在完成 OpenNJet 配置后,可以通过以下命令启动 OpenNJet:

  njet -p /tmpr/njet/ -c conf/njet.conf 
  常见启动参数:
      -p 指定 prefix 配置文件路径,不指定,默认/etc/njet 
      -c 指定配置文件,不指定,默认 njet.conf
      -e 指定 error 日志文件

访问 Web 应用程序

将 Web 应用程序放置在 /var/www/html 目录中,访问结果如下图:
在这里插入图片描述

个人体验分享

安装过程

安装OpenNJet的过程对我来说既是一次学习的机会,也是一次挑战。提前检查系统环境和依赖,避免了在安装过程中可能出现的许多常见问题,从下载到配置,每一步都充满了新鲜感。我选择的是源码安装方式,这样可以让我更深入地了解软件的内部结构。在编译过程中,我遇到了一些依赖性问题,但通过查阅官方文档和社区论坛,我逐渐解决了这些问题。这个过程虽然有些曲折,但也让我对OpenNJet的工作原理有了更深刻的理解。

意外发现

在安装过程中,我发现OpenNJet的配置文件非常灵活,可以轻松地根据不同的应用场景进行调整。此外,我还惊喜地发现OpenNJet内置了许多高级功能,如故障注入和遥测,这些功能在其他同类软件中很少见。这些发现让我对OpenNJet的功能性和可定制性印象深刻。

随着对OpenNJet的深入了解,我开始思考它在云原生架构中更广泛的应用。我认为OpenNJet的动态配置加载和故障注入功能,对于实现微服务架构中的弹性和灵活性至关重要。同时,我也在考虑如何将OpenNJet集成到现有的CI/CD流程中,以实现自动化部署和测试。

总结

通过这次安装和测试,我对OpenNJet有了全面而深入的了解,包括安装、配置和性能等。从灵活的配置到强大的性能,从详尽的文档到活跃的社区,OpenNJet给我留下了深刻的印象。让我们期待OpenNJet在未来云原生世界中的精彩表现。

当然,以下是一些建议,您可以根据这些建议增加一些个人心得和经验:


附录