OpenNJet 应用引擎是基于 NGINX 的面向互联网和云原生应用提供的运行时组态服务程序。具备环境感知、安全控制、加速优化等能力,作为底层引擎,OpenNJet 利用动态加载机制可以实现不同的产品形态,如API网关、消息代理、出入向代理,负载均衡,WAF等等。在云原生架构中,OpenNJet 除了提供南北向通信网关的功能以外,还提供了服务网格中东西向通信、透明流量劫持、熔断、遥测与故障注入等新功能特性。
OpenNJet 最早是基于 NGINX1.19 基础 fork 并独立演进,随着 NGINX 版本迭代,吸收上游 NGINX 的更新,已经同步更新到 NGINX1.23.1 版本,OpenNJet 具有高性能、稳定、易扩展的特点,同时也解决了 NGINX 长期存在的难于动态配置、管理功能影响业务等问题。我们目标在于适应国内特定的技术规范及标准,如国密算法套件支持、构建安全可控的云原生数据面,支撑我国云原生产业生态。
技术架构:
继承 nginx-1.23.1 所有功能, 并且100%兼容nginx |
|
OpenNJet 功能特性 |
|
Copilot框架 |
支持动态加载不同的外部copilot模块 |
支持外部模块异常退出的自动重启 |
|
KV模块 |
支持键值的查询及设置 |
支持键值的持久化 |
|
动态配置框架 |
支持控制平面的消息发送 |
支持RPC消息、组播消息
|
|
支持消息持久化 |
|
Cache-purge |
支持缓存清理 |
支持按指定前缀清理缓存 |
|
开启分片后修改源文件不会造成下载失败 |
|
health_check |
支持单独在helper进程开启健康检查,不影响数据面业务 |
支持运行时动态开启或关闭健康检查功能 |
|
支持校验返回http code |
|
支持校验返回http header |
|
支持校验返回http body |
|
支持https健康检查 |
|
支持国密https健康检查 |
|
Split-clients-2 |
支持蓝绿发布 |
支持运行时动态调整流量比例 |
|
黑白名单 |
支持黑名单方式进行访问IP的限制 |
支持白名单方式进行访问IP的限制 |
|
支持运行时动态设置IPv4的黑白名单列表 |
|
doc模块 |
支持location 级别通过doc_api 指令配置,实现对swagger、gui页面的访问 |
支持通过swagger 页面实现对各功能opentapi的访问 |
|
支持通过gui页面实现对动态模块配置修改的能力 |
|
telemetry(外部编译模块) |
支持http请求在不同server间的服务追踪 |
支持动态开关控制调用链的生成 |
|
正向代理(支持http/https) |
实现了HTTP CONNECT 方法支持http/https正向代理访问 |
vts模块
|
支持server的request、response、traffic、cache信息的统计,其中server的response可以按照response code进行分类统计,分类统计使用的response code为1xx、2xx、3xx、4xx、5xx |
支持upstream和cache信息的统计 |
|
支持通过内嵌的html页面进行统计信息的展示 |
|
支持通过Prometheus、grafana进行统计信息的展示 |
|
支持动态配置server的location统计开关,支持动态配置server的filter key |
|
国密支持 |
支持server中使用国密 |
支持反向代理中使用国密 |
|
支持国密双证证书 |
|
动态(国密)证书更新 |
|
动态access log |
支持运行中动态关闭access log功能 |
支持运行中动态修改写入的日志文件 |
|
支持运行中切换syslog服务器 |
|
支持运行中切换写入文件的变量 |
|
支持运行时增加日志format |
|
支持运行时修改日志format |
|
声明式API |
支持感知声明式模块注册 |
支持查询声明式模块查询 |
|
支持PUT方式更新声明式配置 |
|
边车支持 |
支持流量劫持,兼容istio 规则 |
支持协议识别 |
|
支持代理http1.1 |
|
支持 istio 的双向认证(service-to-service mTLS) |
|
动态location 支持 |
支持通过api 向vs 添加 location |
支持通过api 从vs中删除已经添加的location |
|
动态upstream api 支持 |
支持通过api,对http 或stream 中的upstream 信息进行查询 |
支持通过api,对http 或stream 中的upstream 的server 进行, 添加,修改,删除 |
|
支持通过api,对http 或stream 中的upstream 的统计信息进行重置 |
|
支持post 添加的upstream server 持久化或非持久化 |
|
动态域名upstream server |
支持静态配置upstream server 域名的reslove 属性,定时解析域名,根据域名对应的ip 增减结果,同步更新到upstream server 列表中 |
支持通过upstream api post接口,添加server 域名,并定时解析域名 |
|
Http 会话保持支持 |
支持cookie 会话保持 |
支持route 会话保持 |
|
支持lear 会话保持 |
云原生是一种应用开发风格,鼓励在持续交付和价值驱动开发领域轻松采用最佳实践。相关的学科是建立12-factor Apps,其中开发实践与交付和运营目标相一致,例如通过使用声明式编程和管理和监控。Spring Cloud以多种具体方式促进这些开发风格,起点是一组功能,分布式系统中的所有组件都需要或需要时轻松访问。 许多这些功能都由Spring Boot覆盖,我们在Spring Cloud中建立。更多
2017年9月,Mesos宣布支持Kubernetes,而在2017年10月份的DockerCon EU上,Docker公司宣布官方同时支持Swarm和Kubernetes容器编排,Kubernetes已然成为容器编排调度的标准。 作为全书的开头,首先从历史、生态和应用角度介绍一下Kubernetes与云原生应用,深入浅出,高屋建瓴,没有深入到具体细节,主要是为了给初次接触Kubernetes的小
首先我们来阐述下将应用迁移到云原生架构的动机。 速度 天下武功,唯快不破,市场竞争亦是如此。想象一下,能够快速创新、实验并交付软件的企业,与使用传统软件交付模式的企业,谁将在市场竞争中胜出呢? 在传统企业中,为应用提供环境和部署新版本花费的时间通常以天、周或月来计算。这种速度严重限制了每个发行版可以承担的风险,因为修复这些错误往往跟发行一个新版本有差不多的耗时。 互联网公司经常提到它们每天几百次发
当前很多企业正在采用云原生应用程序架构,这可以帮助其IT转型,成为市场竞争中真正敏捷的力量。 O'Reilly 的报告中定义了云原生应用程序架构的特性,如微服务和十二因素应用程序。 本书中作者Matt Stine还探究了将传统的单体应用和面向服务架构(SOA)应用迁移到云原生架构所需的文化、组织和技术变革。本书中还有一个迁移手册,其中包含将单体应用程序分解为微服务,实施容错模式和执行云原生服务的自
从Kubernetes到Cloud Native——云原生应用之路,这是我最近在 ArchSummit2017北京站 和 数人云&TalkingData合办的Service Mesh is coming meetup 中分享的话题。 本文简要介绍了容器技术发展的路径,为何Kubernetes的出现是容器技术发展到这一步的必然选择,而为何Kubernetes又将成为云原生应用的基石。 我的分享按照这
楼主研一,但是误投了暑期实习,所以顺便就面了 1.在滴滴工作做的内容 2.做短视频后端的背景是什么?为什么要做? 3.这个项目做了哪些东西? 4.关注的表是怎么设计的?关注和被关注者关系存储在一行么?存储在一行又什么问题?不存在一行又有什么问题?(没搞懂什么意思)(回答的不好) 5.项目中rabbitmq用在哪些场景?(关注和点赞) 6.rabbitmq的架构说一下 7.rabbitmq是否有消息