服务发现和治理-Polaris
2023-04-04 10:33:02 阿炯

北极星(Polaris Mesh)是腾讯自研的服务发现和治理中心,以服务注册中心为基础,扩展了服务治理功能以及相应的控制面,解决分布式和微服务架构中的服务可见、故障容错、流量控制和安全问题,提供多语言的客户端实现,不同的开发框架可以集成使用。支持多语言、多框架的云原生服务治理平台,支持服务管理、流量管理、故障容错、配置管理、可观测性 。采用Go语言开发并在BSD协议下授权。


功能
基础功能:服务发现、服务注册、健康检查
故障容错:熔断降级、访问限流
流量控制:动态路由、负载均衡
安全:访问鉴权

特色
北极星的功能采用插件化的形式实现,业务可以根据需求选择使用,也非常容易实现扩展
提供 SDK 和 Sidecar 两种接入方式,SDK 适用于高性能的业务场景,Sidecar 适用于无侵入的开发模式
对于 SDK 的接入方式,提供 Java、Go、C++ 和 NodeJS 等多种语言的客户端,功能实现相同
北极星 SDK 可以集成到常用的框架和网关中,例如 Spring Cloud、gRPC 和 Nginx
适用于 Kubernetes,支持 K8s service 和 Polaris sidecar 的自动注入
腾讯百万级服务治理中心的开源版本,沉淀了腾讯多年的分布式服务治理经验

架构



项目构成

服务端:
polaris: 控制面
polaris-console: 控制台

客户端:
polaris-java: Java 客户端
polaris-go: Go 客户端
polaris-cpp: C++ 客户端
polaris-nodejs: NodeJS 客户端
polaris-sidecar: 基于 Envoy 的 Sidecar

生态组件:
polaris-controller: K8s 控制器,支持 K8s Service 和 Polaris Sidecar 自动注入
spring-cloud-polaris: spring cloud 集成 polaris-java
grpc-java-polaris: grpc-java 集成 polaris-java
grpc-go-polaris: grpc-go 集成 polaris-go
grpc-cpp-polaris: grpc 集成 polaris-cpp
grpc-nodejs-polaris: grpc-node 集成 polaris-nodejs
nginx-polaris: nginx 集成 polaris-cpp

随着容器化和云原生的推进,北极星也支持了 Kubernetes  服务和网格 Sidecar 的自动接入,实现了它们之间互联互通和统一治理。


最新版本:1.16
1.16.0 版本于2023年4月上旬发布,支持服务调用监控。

更完善的服务调用监控
在 1.16.0 版本前,缺乏服务调用之间的流量指标展示分析,因此服务间调用的流量情况对用户来说就是一个黑盒,同时,用户也无法判断在北极星平台配置的流量治理规则,在服务调用时是否执行,以及执行的结果是否符合预期:
缺少服务间调用请求的响应时耗统计信息。
缺少服务间调用请求的响应码分布情况。
缺少接口级、实例级的服务间调用请求指标。

基于以上几点,在v1.16.0 版本中针对服务间调用的核心指标重新进行设计,并且优化了相关指标在控制台的展示试图,进一步方便用户观察微服务运行期间服务调用的流量情况:
提供服务间调用响应的耗时统计,支持最大、最小、均值、P95 以及 P99 的查询,支持按照服务、接口、实例进行筛选查看。
提供服务间调用响应码的分布情况,支持按照服务、接口、实例进行筛选查看。
提供服务间调用的主调实例以及被调实例的指标查看。


里程碑规划
polaris 下个版本将围绕易用性以及稳定性进行迭代,预计在 5 月初推出,计划提供下列功能:

集群化部署去 redis
为了减低中小公司在部署北极星时需要维护 redis 以及 mysql 组件所带来的运维工作量,社区将提供北极星集群部署的去 redis 组件的集群部署方案,方便用户快速搭建北极星,减低使用北极星的成本。

XDS 协议支持下发跨命名空间的服务数据
当前北极星的 XDS 协议不支持下发跨命名空间的服务数据,社区会先通过北极星的服务别名机制,支持将服务别名一并已 XDS 的格式进行下发,通过服务别名的方式解决 XDS 跨命名空间资源下发的问题;后续社区也会进一步调研 Envoy 的按需加载的能力,从而更优雅的解决这一使用问题。

官方主页:https://polarismesh.cn/