目录
- 引言
- OpenNJet介绍
- OpenNJet优势
- 1. 性能无损动态配置
- 2. 灵活的CoPilot框架
- 3. 支持HTTP/3
- 4. 支持国密
- 5. 企业级应用
- 6. 高效安全
- OpenNJet 编译与安装
- 环境准备
- 编译环境配置
- 配置yum源
- yum 安装软件包
- 创建符号连接
- 修改 ld.so.conf 配置
- 编译代码
- 部署 WEB SERVER
- 配置OpenNJet
- 部署 Web 应用程序
- 启动 NJet
- 访问 Web 应用程序
- 个人体验分享
- 安装过程
- 意外发现
- 总结
- 附录
引言
在当今快速发展的云计算时代,云原生技术正成为企业数字化转型的核心驱动力。云原生架构以其灵活性、可扩展性和高效的资源利用,为软件的快速迭代和持续集成提供了强大的支持。在这一背景下,高性能的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源
- 执行命令:安装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
- 从Mercurial官方网站下载CentOS 7版本的存储库配置文件
sudo curl -o /etc/yum.repos.d/mercurial.repo https://www.mercurial-scm.org/release/centos7/mercurial.repo
- 上面步骤完成后,文件系统的目录/etc/yum.repos.d 将生成对应的repo文件。
- 可以查看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在未来云原生世界中的精彩表现。
当然,以下是一些建议,您可以根据这些建议增加一些个人心得和经验:
附录
- GitHub:OpenNJet
- OpenNJet使用手册
- OpenNJet快速上手
- OpenNJet 编码规范以及新手指引
- OpenNJet功能特性