PolarisMesh 月报:发布 v1.3.0 ,完美支持 proxyless 和 proxy 两种服务网格模式
北极星(PolarisMesh )是腾讯开源的百万级服务发现和治理中心,积累了腾讯从虚拟机到容器时代的分布式服务治理经验。作为分布式和微服务架构中的核心组件,PolarisMesh 提供服务寻址、流量调度、故障容错和访问控制等一系列能力,在K8s 和虚拟机环境中可以无差别使用,支持主流的开发模式,兼容grpc、spring cloud和servicemesh等开源生态,帮助用户快速构建扩展性强、可用性高的业务架构,实现从传统架构到云原生架构的转型。
Github地址:https://github.com/polarismesh/polaris
背景
1. Proxy 网格
对于proxy网格,这种模式能有效得将应用与治理组件解耦,便于应用以极低侵入的代价接入微服务体系。但是它却有一个难以规避的问题——性能以及资源消耗,proxy网格为了将应用与治理组件解耦,采取运行独立的proxy容器来接管业务容器的东西流量;为了达到治理能力,proxy需要能够解析业务之间的通信协议并根据其内容作出不同的治理动作,因此proxy实际上大部分的工作都是在频繁的消耗CPU进行序列化相关操作以及网络请求转发,降低整体业务的响应时长以及QPS。
2.proxyless 网格
因为proxy网格难以规避的性能以及资源消耗问题,proxyless网格被重新提了起来,即proxy做的事情,再次回到了业务容器中——即通过引入一个轻量的SDK来负责原先proxy的任务。由于整个网格架构中没有了proxy这一环,性能降低以及资源消耗的问题得到了较好的解决。由于北极星诞生之初,就一并开发了多语言的轻量级的SDK作为北极星在proxyless的方案,并且也是腾讯内部分布式服务长期使用的开发方式。
在之前的版本中,北极星提供了多语言的轻量级高性能SDK,实现注册发现、流量调度、熔断降级和访问控制等服务治理功能。从v1.3.0 版本开始,北极星在通信协议层完成了对xDS协议的支持,可以直接作为envoy或者gRPC的proxyless形式的控制面,北极星对于两种网格模式的互联互通和统一治理能力的正式开放。
实现方案
为了实现proxyless服务与proxy服务的互联互通和统一治理,必须解决以下2个关键点:
-
服务数据之间可互通
-
治理规则的互通
由于通过istio默认使用了kubernetes crd作为服务注册中心,因此为了实现服务数据之间的互通,必须打通polaris与kubernetes crd这2个注册中心。polaris扩展kubernetes的controller的方式,开发了polaris-controller组件,通过监听service和endpoint事件,实现kubernetes的服务数据与polaris进行实时同步。从而解决服务数据互通问题。
为了解决治理规则互通的问题,可以通过2个方式来打通:
-
polaris规则数据转换成istio的规则数据格式,并且与kubernetes的crd进行打通
-
polaris规则数据转换成XDS数据,直接下发给envoy,不经过istio
为解决全量加载性能问题有两种方案:
-
修改Istio,让它支持按需加载服务数据
-
直接支持envoy的VHDS协议,envoy直接对接polaris按需加载服务数据
因为Istio社区已经全面转向MCP-OVER-XDS,将原来MCP改成MCP-OVER-XDS存在较大的协议调整工作量。
结合以上问题的可选解决方案,权衡各方面的考虑,我们最终决定采用envoy直接对接polaris的方案来解决一开始提出的3个问题,系统架构如下图:
北极星网格优势
这个方案有三大优势:
-
多种微服务体系完美打通
-
K8s和虚拟机环境无差别使用
-
支持多K8s集群之间的服务发现
1. 多种微服务体系完美打通
在分布式和微服务架构的演进过程中,从部署环境以及应用+治理的结合模式,分别经历了不同的发展阶段。
对于部署环境
而对于应用和治理结合模式
可以看到,无论是部署环境,还是应用+治理结合模式,其发展都不是一蹴而就的,大部分情况下都存在过度阶段,因此这里就引入了不同的微服务体系:
-
sdk+discovery(无kubernetes)
-
sdk+discovery 以及 proxy网格(vm + kubernetes 混合部署)
-
proxy网格 (kubernetes)
-
proxyless网格(kubernetes)
对于上述不同的微服务技术体系,如何做到统一的治理?
北极星不仅仅通过xDS协议的支持以及多语言客户端来解决1、3、4情况,同时还提供了polaris-controller组件,用于同步kubernetes中的service到polaris,使得polaris既有通过kubernetes注册服务,也有通过polaris注册的服务,解决了vm + kubernetes 混合部署模式下的应用之间互通互联的问题。
2. Kubernetes 和虚拟机环境无差别使用
对于polaris来说,无论是在Kubernetes上的运行的服务还是运行在VM上的运行服务,统一转换为polaris的数据模型,由polaris充当控制面的角色,提供统一的服务操作入口以及服务治理规则定义,用户无需在关心自己的服务运行在何种环境下,也无需关心该如何统一管理多种运行环境下的服务实例。
无论在kubernetes环境还是在VM环境,通过提供polaris-agent组件,直接代理业务的DNS请求,通过对DNS的解析,返回被调服务的一个实例给主调方用于完成业务请求,让业务在代码无侵入前提下使得业务能够享受polaris的服务发现功能。
3. 支持多 Kubernetes 集群之间的服务发现
随着业务规模的增加,可能出现不同业务不同kubernetes集群,如果出现不同业务之间需要相互服务调用,那么就需要解决跨kubernetes集群间服务发现的问题,当前istio要支持跨kubernetes集群的服务发现的话,两两kubernetes集群间都需要进行配置,那么随着kubernetes集群数变多,那么就需要不断的执行istio配置操作,相比之下,polaris支持多kubernetes集群服务发现,只需要用户在每个kubernetes集群部署一个polaris-controller,每个controller都指向同一个polaris-server集群即可。
1.3.0 Release Notes
Feature:
- 【polaris】接入层支持可观测性指标暴露给prometheus
- 【polaris】优化部署脚本使用体验问题
Bugfix:
- 【polaris】优化心跳处理方案,解决polaris重启可能导致实例健康状态不正确的问题
- 【polaris】修复部分单元测试用例
后续规划
- 【polaris-console】支持命名空间管理
- 【polaris-php】支持最好的语言PHP(7.x)接入
- 【spring-cloud-tencent】支持spring cloud 2020接入
- 【spring-boot-polaris】支持spring boot
更多详细的生态规划任务可以查看 issue:https://github.com/polarismesh/polaris/issues/163

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
进击的 Ansible(二):如何快速搞定生产环境 Ansible 项目布局?
Tips:与前文 《进击的 Ansible(一):Ansible 快速入门》 一样,本文使用的 Ansible 版本 2.5.4,项目演示环境 MacOS。由于 Ansible 项目开发活跃版本更新快,很多 API 接口不向后兼容,所以对照本文实践时请确保所用版本一致。 学完前文《进击的 Ansible(一):Ansible 快速入门》后,用来发布单体项目绰绰有余。但是实际生产环境中一个服务往往有多个组件,比如部署大数据服务时,常常需要部署一个“大数据全家桶”:Hadoop、 Zookeeper、 Hive、 Mysql、 Flink 等。这时仅靠前文中的知识就有点捉襟见肘了,繁多的 yaml 文件和其他配置文件依赖关系复杂,如果不能正确地划分目录组织项目结构,对于后期维护非常不利。所以今天的文章着重解决一下这个问题:如何科学正确地划分 Ansible 应用的目录结构? 把 Ansible 视为一种编程语言 首先要树立这样一个观念:“把 Ansible 视为一种编程语言”。我们可以将 Ansible 理解为专门用来管理自动化发布的 DSL,它的基本语法规则约等于 yaml 语言规则,诸...
- 下一篇
Apache APISIX 社区双周报 | 功能亮点更新进行中
导语 Apache APISIX 从开源第一天就以社区方式成长,迅速成为全世界最活跃的开源 API 网关项目。这些成就,离不开社区小伙伴们的共同奋斗。 “独行者速,众行者远”。Apache APISIX 社区周报希望可以帮助社区小伙伴们更好地掌握 Apache APISIX 社区的进展,方便大家参与到 Apache APISIX 社区中来。 我们还整理了一些适合新来社区的小伙伴们参加的 Issue !感兴趣的同学们,走过路过不要错过! 贡献者统计 Good First Issue Issue #5451 链接: https://github.com/apache/apisix/issues/5451 问题描述: Nginx 自带的响应内容替换库可以替换局部内容,如下:(http://nginx.org/en/docs/http/ngx\\_http\\_sub\\_module.html) sub_filter '<a href="http://127.0.0.1:8080/' '<a href="https://$host/'; 有个支持正则替换的库(印象中 Open...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS关闭SELinux安全模块
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7设置SWAP分区,小内存服务器的救世主
- 设置Eclipse缩进为4个空格,增强代码规范