【OpenNJet下一代云原生之旅】

news2024/11/19 3:38:49

OpenNJet下一代云原生之旅

  • 1、OpenNJet的定义
    • OpenNJet架构图
  • 2、OpenNJet的特点
    • 性能无损动态配置
    • 灵活的CoPilot框架
    • 支持HTTP/3
    • 支持国密
    • 企业级应用
    • 高效安全
  • 3、OpenNJet的功能特性
  • 4、OpenNJet的安装使用
    • 编译安装
      • 配置yum源
      • 创建符号连接
      • 修改配置
      • 编译
  • 5、通过 OpenNJet 部署 WEB SERVER
    • 配置OpenNJet
    • 部署 Web 应用程序
    • 启动 NJet
    • 访问 Web 应用程序
  • 6、通过OpenNJet 部署反向代理server
    • 配置 njet.conf 配置文件
    • 启动 OpenNJet,指定配置好的配置文件
    • 请求上游资源,验证反向代理服务
  • 7、使用体验感
  • 8、总结

1、OpenNJet的定义

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

OpenNJet架构图

在这里插入图片描述

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

作为底层引擎,OpenNJet利用动态加载机制可以实现不同的产品形态,如API网关、消息代理、出入向代理,负载均衡,WAF等。
我们在学习一个新的知识之前,学习最好的资源那就是看官方文档,所以我们在学习这个产品也是先去看官方文档:https://njet.org.cn/

2、OpenNJet的特点

性能无损动态配置

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

灵活的CoPilot框架

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

支持HTTP/3

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

支持国密

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

企业级应用

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

高效安全

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

3、OpenNJet的功能特性

它继承 nginx-1.23.1 所有功能, 并且100%兼容nginx!!!
它的功能特性很多,我就着重挑选几个来讲解,因为官方文档里面都很详细:

特性描述
Copilot框架支持动态加载不同的外部copilot模块;支持外部模块异常退出的自动重启
动态配置框架支持控制平面的消息发送; 支持RPC消息、组播消息; 支持消息持久化
黑白名单支持黑名单方式进行访问IP的限制;支持白名单方式进行访问IP的限制;支持运行时动态设置IPv4的黑白名单列表
正向代理(支持http/https)实现了HTTP CONNECT 方法支持http/https正向代理访问
Http 会话保持支持支持cookie 会话保持;支持route 会话保持;支持lear 会话保持
负载均衡slow_start 慢启动功能,针对轮询算法,实现server新增或故障转正常后,业务的流量在指定时间,缓慢增长。

4、OpenNJet的安装使用

我们了解学习完之后,就需要我们进行实操,自己搭建一遍产品,我们才能学的更深入。
更多操作文档参考官方手册:
快速上手手册
使用手册
其中NJet官方提供centos,ubuntu,cloudOS等多个版本的2进制安装包,及软件源。而我们就采用centos安装:

编译安装

配置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文件
查看yum源是否配置成功:

ls -al /etc/yum.repos.d/mercurial.repo
-rw-r--r--. 1 root root 267 37 11:26 /etc/yum.repos.d/mercurial.repo

创建符号连接

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

修改配置

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

编译

点击这个OpenNJet地址里面获取到OpenNJet的压缩包,并把它上传到/home目录下进行解压:

unzip njet1.0.zip

执行脚本:build_cc.sh 之后执行make进行编译

sh build_cc.sh conf

最后执行

make install

5、通过 OpenNJet 部署 WEB SERVER

首先我们需要OpenNJet使用手册的说明安装OpenNJet,使用手册指路:使用手册
这里我使用的是快速上手的学习文档:我们可以跟着官方文档先简单的搭建一个web应用程序:

配置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:

Bash  njet -p /tmpr/njet/ -c conf/njet.conf  

常见启动参数:

  • -p 指定 prefix 配置文件路径,不指定,默认/etc/njet
  • -c 指定配置文件,不指定,默认 njet.conf
  • -e 指定 error 日志文件

访问 Web 应用程序

现在,可以使用 Web 浏览器访问 Web 应用程序。只需输入服务器的 IP 地址或域名即 可访问 Web 应用程序。如果您按照上述示例配置 OpenNJet,则应将 Web 应用程序放置在/var/www/html目录中,并使用服务器的 IP 地址或域名访问它。然后我们就可以看到一个网页:上面写着NJet Hello World。说明已经部署成功!!!

6、通过OpenNJet 部署反向代理server

反向代理知识引入:反向代理(Reverse Proxy)是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
正向代理:将配置文件配置在客户端,客户端所有流量都通过正向代理去访问。
因为OpenNJet 支持反向代理功能的使用,所以我们也可以模拟搭建一下环境看看:安装的流程我们就跳过,可以去查看前面的第4点安装流程。

配置 njet.conf 配置文件

使用反向代理功能,需要使用 proxy_pass 指令来进行反向 代理服务,proxy_pass 设置连接被代理服务器的协议、IP 地址或套接字,也可以是域名或 upstream 定义的服务器组,这里我们使用 upstream 作为上游资源服务器组。
配置信息如下:

JSON
http {    
upstream backend1{          
server 127.0.0.1:8080;          
server 127.0.0.1:8081;       
}    
server {       
listen 9000;       
location /{               
proxy_pass http://backend1;       
}     
}
}

启动 OpenNJet,指定配置好的配置文件

配置好文件,开始启动OpenNJet

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

请求上游资源,验证反向代理服务

部署与配置后,我们就要在服务器命令行界面使用 curl 命令来请求上游服务器的资源,就可以验证反向代理服务是否部署成功。

Bashcurl 
http://127.0.0.1:9000/test/hello.html
<!doctype html>
<html lang="en"> 
<head>  
<title>Document</title> 
</head> 
<body>
Njet Hello World! 
</body>
</html>

7、使用体验感

首先是第一次接触到OpenNJet,第一步的学习就是先去查询官网,了解到OpenNJet是什么样的产品,把官网的产品都翻阅了一遍,然后逐渐了解它的特性和它的功能,然后就是跟着有概念之后去上手实操一遍,自己搭建了一遍环境,安装的话都很简单,我使用了编译安装,按照官方文档的指引,一步步安装没问题,有详细的安装文档,如果环境准备的好,跟着官方文档操作是没有问题的。
这个体验给我的感觉非常好,因为整体搭建过程其实是很简单的,因为都写的很详细,我也可能只是挑选了几个平时常用得着的框架测试体验,给我感觉很好用!它的无论是功能配置方面都很灵活使用。它内部集成的镜像构建、正反向代理、声明式API配置、黑白名单等配置简单,底层简化,框架配置更完善。

8、总结

学习使用OpenNJet,很大程度都是依据官方的文档来执行操作,流程很清晰化,操作也很方便快速。
功能方面它能完全做到南北通信网关功能,并且还有服务网格中东西通信的能力,而且它的功能还增强了透明流量劫持、熔断、遥测与故障注入等新的功能特性,这相比其他平台是一个新的优化和创新。期待OpenNJet 在云原生架构舞台中发光发热!

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

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

相关文章

[CISCN 2018]sm

目录 1.题目 3.解题 4.参考 1.题目 题目链接 from Crypto.Util.number import getPrime,long_to_bytes,bytes_to_long from Crypto.Cipher import AES import hashlib from random import randint def gen512num():order[]while len(order)!512:tmprandint(1,512)if tmp n…

探索小猪APP分发平台:构建高效的应用推广之路

在当今快速发展的移动互联网时代探索小猪APP分发平台&#xff1a;构建高效的应用推广之路&#xff0c;应用分发成为连接开发者与用户的关键桥梁。一个高效的分发平台可以显著提升应用的可达性和用户增长速度。 小猪app分发zixun.ppzhu.net 引言&#xff1a;小猪APP分发平台简介…

Spring AI 抢先体验,5 分钟玩转 Java AI 应用开发

作者&#xff1a;刘军 Spring AI 是 Spring 官方社区项目&#xff0c;旨在简化 Java AI 应用程序开发&#xff0c;让 Java 开发者像使用 Spring 开发普通应用一样开发 AI 应用。 Spring Cloud Alibaba AI 以 Spring AI 为基础&#xff0c;并在此基础上提供阿里云通义系列大模…

远程桌面报错:【出现验证错误。要求的函数不受支持】

WinR 输入【gpedit.msc】回车 依次打开 计算机配置----管理模板-----系统-----凭据分配---加密数据库修正 选择【已启用】&#xff0c;下拉菜单选择【易受攻击】

phpMyAdmin增加自定义IP登录教程

phpMyAdmin增加自定义IP登录教程 1、打开phpMyAdmin目录&#xff0c; 在此目录下是否有config.sample.inc.php文件&#xff0c;如果存在&#xff0c;那么将其改名为config.inc.php&#xff08;为避免修改失误所造成的损失&#xff0c;强烈建议先备份config.sample.inc.php文件…

笔记85:如何计算递归算法的“时间复杂度”和空间复杂度?

先上公式&#xff1a; 递归算法的时间复杂度 递归次数 x 每次递归消耗的时间颗粒数递归算法的空间复杂度 递归深度 x 每次递归消耗的内存空间大小 注意&#xff1a; 时间复杂度指的是在执行这一段程序的时候&#xff0c;所花费的全部的时间&#xff0c;即时间的总和而空间复…

可视化大屏C位图:智慧场馆/场所图

Hello&#xff0c;我是大千UI工场&#xff0c;本期可视化大屏的焦点图&#xff08;C位&#xff09;分享将场馆作为焦点图的情形&#xff0c;欢迎友友们关注、评论&#xff0c;如果有订单可私信。 智慧场馆是指通过物联网、大数据、人工智能等技术手段&#xff0c;将传统场馆与…

Epinio:Kubernetes 的应用程序开发引擎-加CLI Demo演示

一、解决了什么问题&#xff1f; 开发人员如何专注于代码编写&#xff0c;怎么让他们可以完全忽略k8s基础设施并且和以前在本地Run一个应用一样的体验。 从源码构建一个容器程序 二、解决方案 Introduction | Epinio docs 三、Epinio 的 Kubernetes 的应用程序开发引擎 by Ra…

FFmpeg学习记录(二)—— ffmpeg多媒体文件处理

1.日志系统 常用的日志级别&#xff1a; AV_LOG_ERRORAV_LOG_WARNINGAV_LOG_INFOAV_LOG_DEBUG #include <stdio.h> #include <libavutil/log.h>int main(int argc, char *argv[]) {av_log_set_level(AV_LOG_DEBUG);av_log(NULL, AV_LOG_DEBUG, "hello worl…

怎样建设网站

建设一个网站需要经过一系列的步骤和技术&#xff0c;以下是一个简单的指导&#xff1a; 1. 确定网站目的&#xff1a;首先要确定网站的目的和目标。是为了促销产品&#xff1f;提供信息&#xff1f;还是为了社交交流&#xff1f;确定网站目的可以帮助你更好地规划网站的结构和…

【强训笔记】day8

NO.3 思路&#xff1a;相乘除以最大公约数等于最小公倍数。最小公倍数等于gcd&#xff08;a&#xff0c;a%b&#xff09;递归直到b等于0。 代码实现&#xff1a; #include <iostream> using namespace std;int gcd(int a,int b) {if(b0) return a;return gcd(b,a%b); }…

MySQL CRUD操作

前言&#x1f440;~ 上一章我们介绍了数据库的一些基础操作&#xff0c;关于如何去创建一个数据库&#xff0c;还有使用数据库&#xff0c;删 除数据库以及对表进行的一些基础操作&#xff0c;今天我们学习CRUD操作 俗称&#xff08;增删改查&#xff09; 如果各位对文章的内…

无U盘基于本地硬盘无损制作虚拟U盘(Windows、Linux系统安装启动盘)

知识点 实验环境 名称版本使用平台Win11本地硬盘格式GPT待安装镜像deepin-desktop-community-20.9-amd64.iso 文中工具下载链接&#xff1a; https://download.csdn.net/download/xzzteach/89263714 deepin-desktop-community-20.9-amd64.iso 文件结构如下&#xff1a; 在Li…

如何保证每次画出的都同一张人脸?AI绘画Stable Diffusion的Reference only教程

Ai绘画有一个很现实的问题&#xff0c;要保证每次画出的都是同一个人物的话&#xff0c;很费劲。 Midjourney就不必说了&#xff0c;人物的高度一致性一直得不到很好的解决。而在Stable Diffusion&#xff08;SD&#xff09;中&#xff0c;常用办法是通过同一个Seed值&#xf…

10G MAC层设计系列-(4)MAC TX模块

一、前言 MAC TX模块就是要将IP层传输过来的数据封装前导码、MAC地址、帧类型以及进行CRC校验&#xff0c;并与CRC值一块组成以太网帧。 二、模块设计 首先对输入的数据进行缓存&#xff0c;原因是在之后要进行封装MAC帧头&#xff0c;所以需要控制数据流的流动 FIFO_DATA_6…

Ubuntu编译安装MariaDB并进行初始化配置

Ubuntu编译安装MariaDB并进行初始化配置 1. 编译安装MariaDB2. 配置MariaDB3. Docker安装MariaDB 1. 编译安装MariaDB MariaDB官方安装文档&#xff1a;https://mariadb.com/kb/en/Build_Environment_Setup_for_Linux/    下载MariaDB源码&#xff1a;https://mariadb.org/ma…

Enum,你学会了吗?

大家后&#xff0c;我是小七。 今天给大家分享下java.lang包下面Enum类的面试点&#xff0c;本文阅读需3分钟。 Java轮子 分享程序员日常、职场、互联网项目、开发经验&#xff0c;专注技术提升 12篇原创内容 公众号 在 Java 编程中&#xff0c;枚举类型&#xff08;Enum&…

go是如何运行的?

前言 go程序的入口是main函数吗&#xff1f;诚然很多程序的入口都是main,比如java,C,C等&#xff0c;但是go由于他的运行时环境是代码&#xff0c;而不是像Java那样有自己的虚拟机&#xff0c;所以程序在运行main函数之前&#xff0c;需要做很多的准备工作&#xff0c; 该文章…

这书不错,古琴乐理实用教程(尹溧新编),有课学得通透。

通篇阅读后&#xff0c;发现这本书以古琴初习者、未系统接触过现代乐理的读者为对象&#xff0c;将复杂的古琴音乐理论简单化、通俗化。书中采用参照比较的方法、通俗易懂的语言、言简意赅的文字&#xff0c;并结合具体音乐作品将古琴研习中最主要的、最核心的理论知识进行简明…

【算法系列】哈希表

目录 哈希表总结 leetcode题目 一、两数之和 二、判定是否互为字符重排 三、存在重复元素 四、存在重复元素 II 五、字母异位词分组 六、在长度2N的数组中找出重复N次的元素 七、两个数组的交集 八、两个数组的交集 II 九、两句话中的不常见单词 哈希表总结 1.存储数…