参考文档
- 1: 版本信息
- 1.1: 版本升级指南
- 1.2: Release v1.18.0
- 1.3: Release v1.17.8
- 1.4: Release v1.17.2
- 1.5: Release v1.17.0
- 1.6: Release v1.16.0
- 1.7: Release v1.15.0
- 1.8: Release v1.14.0
- 1.9: Release v1.13.0
- 1.10: Release v1.12.0
- 1.11: Release v1.11.0
- 2: 接口文档
- 3: 测试报告
- 3.1: 性能测试报告
- 4: 开发者文档
- 5: 相关产品对比
- 6: 常见问题
1 - 版本信息
1.1 - 版本升级指南
服务端与控制台版本对应表
Polaris-Server Version | Polaris-Console Version |
---|---|
v1.18.x | v1.15.0 |
v1.17.3~v1.17.8 | v1.14.4 |
v1.17.2 | v1.14.0 |
v1.17.0~v1.17.1 | v1.13.x |
v1.16.x | v1.13.x |
v1.15.x | v1.12.x |
v1.14.x | v1.11.x |
v1.13.x | v1.10.x |
v1.12.x | v1.9.x |
v1.11.x | v1.8.x |
v1.10.0 | v1.7.3 |
v1.9.0 | v1.6.1 |
v1.8.0 | v1.6.0 |
v1.7.0 | v1.5.8 |
v1.6.0 | v1.4.0 |
v1.5.0 | v1.3.2 |
v1.4.0 | v1.3.1 |
v1.3.2 | v1.3.1 |
v1.3.1 | v1.3.0 |
v1.3.0 | v1.2.1 |
v1.2.2 | v1.2.1 |
v1.2.1 | v1.2.1 |
v1.2.0 | v1.2.0 |
v1.0.0 | v1.0.0 |
1.10.x 版本升级至 1.11.x
polaris-server 升级
- 执行数据库增量脚本:v1_8_0-v1_11_0.sql
polaris-console 升级
- 覆盖安装 polaris-console
1.11.x 版本升级至 1.12.x
polaris-server 升级
- 执行数据库增量脚本:v1_11_0-v1_12_0.sql
- 将原有的 polaris-sever.yaml 更新至最新的 polaris-server.yaml
polaris-console 升级
- 覆盖安装 polaris-console
1.12.x 版本升级至 1.13.x
polaris-server 升级
- 建议将原有的 polaris-sever.yaml 更新至最新的 polaris-server.yaml
polaris-console 升级
- 覆盖安装 polaris-console
1.13.x 版本升级至 1.14.x
polaris-server 升级
- 执行数据库增量脚本:v1_12_0-v1_14_0.sql
- 执行升级工具:circuitbreaker_rule_transform
- 建议将原有的 polaris-sever.yaml 更新至最新的 polaris-server.yaml
polaris-console 升级
- 覆盖安装 polaris-console
1.14.x 版本升级至 1.15.x
polaris-server 升级
- 建议将原有的 polaris-sever.yaml 更新至最新的 polaris-server.yaml
polaris-console 升级
- 覆盖安装 polaris-console
1.15.x 版本升级至 1.16.x
polaris-server 升级
- 建议将原有的 polaris-sever.yaml 更新至最新的 polaris-server.yaml
polaris-console 升级
- 覆盖安装 polaris-console
1.16.x 版本升级至 1.17.2
polaris-server 升级
- 执行数据库增量脚本:v1_14_0-v1_17.0.sql
- 建议将原有的 polaris-sever.yaml 更新至最新的 polaris-server.yaml
polaris-console 升级
- 覆盖安装 polaris-console
1.17.2 版本升级至 1.17.8
polaris-server 升级
- 执行数据库增量脚本:v1_17_0-v1_17_3.sql
- 建议将原有的 polaris-sever.yaml 更新至最新的 polaris-server.yaml
polaris-console 升级
- 覆盖安装 polaris-console
1.17.8 版本升级至 1.18.0
polaris-server 升级
- 执行数据库增量脚本:v1_17_3-v1_18_0.sql
- 建议将原有的 polaris-sever.yaml 更新至最新的 polaris-server.yaml
polaris-console 升级
- 覆盖安装 polaris-console
升级注意事项
- polaris-console 更新之后需要刷新浏览器缓存,避免升级 polaris-console 后浏览器还缓存前端页面文件信息,从而无法体验新的前端交互
1.2 - Release v1.18.0
下载地址
特性说明
Nacos客户端协议全功能版本兼容
在 1.18.0 版本中,社区正式将 apiserver-nacos 插件纳入官方默认插件,并完善了 nacos1.x/nacos2.x 的客户端功能特性兼容。用户无需替换自己的 nacos-client 依赖,只需更换接入地址即可接入北极星的注册发现以及配置管理。
- nacos1.x
- 注册发现
- 实例注册
- 服务发现
- 心跳上报
- 基于 UDP 的服务端主动推送
- 配置管理
- 配置发布
- 配置查询
- 配置监听
- 注册发现
- nacos2.x
- 注册发现
- 实例注册
- 服务发现
- 基于 gRPC 长连接的实例信息维护
- 基于 gRPC 的服务端主动推送
- 配置管理
- 配置发布
- 配置查询
- 配置监听
- 注册发现
apiservers:
- name: service-nacos
option:
listenIP: "0.0.0.0"
# nacos http 协议监听端口,grpc 端口默认在该基础上 +1000
listenPort: 8848
# 设置 nacos 默认命名空间对应 Polaris 命名空间信息
defaultNamespace: default
connLimit:
openConnLimit: false
maxConnPerHost: 128
maxConnLimit: 10240
支持 Mesh Sidecar 场景下的 Cluster/Endpoint 按需加载
Sidecar Mesh 场景下,每个 Sidecar 进程都会收到 xDS Server 推送下来的全量服务数据。假设一个 Workload-1 他仅仅调用了 Service-1/Service-2 两个服务,但是大部份的 xDS Server 都会将全量的 Service 推送给 Workload-1 的 Sidecar。这样子带来的后果就是每个 Sidecar 的内存、资源消耗会随着服务量级的增长而增长。
为了解决上述问题。社区在 1.18.0 版本中实现了 Envoy xDS 中的 OCDS 能力。默认只推送全量的 VHDS 到 Sidecar 中,Cluster/Endpoint 资源根据实际请求进行按需加载。
同时我们也优化了服务端关于 xDS 规则生成的内存占用,不再使用 envoy go-control-plane 中的 SnapshotCache 实现,而是选择了 LinearCache,根据每类 xDS 资源的生成特点进行存放在不同的 LinearCache 中,尽可能将公共的 xDS 资源只生成一份,其余的需要按照 mtls、odcds 场景的规则则各自存在对应的 LinearCache 中。
- 需要搭配 polaris-controller v1.7.0 版本一起使用
- 由于当前 Envoy 的按需加载能力,当 On-Demand VHDS 和 On-Demand Cluster 同时启用时存在 BUG,因此目前仅实现了 On-Demand Cluster 的能力,待和 Envoy 社区推进解决该 BUG 后用户可享受真正的 Envoy 按需加载能力,社区 issue
支持 Mesh Sidecar 场景下的分布式限流
在 1.18.0 版本中,我们针对 Mesh Sidecar 的场景,支持将 Polaris 的分布式限流通过由 Polaris-Sidecar 组件实现的 RLS 提供给 Envoy 的限流 Filter,使得用户在 Mesh 场景下可以享受 Polaris 的分布式限流能力
- 需要搭配 polaris-controller v1.7.0 版本一起使用
配置中心支持灰度发布
为了让用户有更好的配置中心使用体验,社区在 v1.18.0 版本中支持配置灰度能力,当前灰度能力支持用户自定义客户端标签进行灰度控制下发;针对存量老版本客户端仅支持根据客户端IP进行灰度控制台下发。
polaris-go 配置客户端标签
global:
serverConnector:
addresses:
- 127.0.0.1:8091
client:
labels:
${label_key}: ${label_value}
polaris-java
开发中…
配置中心和 Kubernetes ConfigMap 无缝打通
当前通过 polaris-controller 组件将 Kubernetes 上的 Service 信息同步至北极星中,用户便可以针对 Kubernetes 上的 POD 进行相应的服务治理。但是对于 ConfigMap 这一配置资源的管理却还是只能停留在 Kubernetes;假如北极星能够接管用户的 ConfigMap 管理,用户只需要在北极星控制台上进行配置文件创建、发布即可将配置同步到 ConfigMap 中那么用户还能够享受到配置审计、发布历史、配置回滚等增强功能。因此在 1.18.0 版本中我们支持了北极星和 Kubernetes ConfigMap 资源的数据打通能力,用户只需要部署 polaris-controller 1.7.0 版本即可,相关使用文档参考 K8s 配置同步
版本变化
特性
- [PR #1174] feat:support push envoy rls filter xds
- [PR #1175] feat(xds): add OutlierDetection and HealthCheck
- [PR #1215] 服务端支持流量无损停机
- [PR #1237] feat: allow empty db password
- [PR #1253] feat:envoy ratelimit action suppoer all spec label & add hds feature
- [PR #1271] 配置中心支持灰度发布
- [PR #1276] refactor:优化xds生成逻辑 & 合并社区 nacosserver 插件
- [PR #1285] feat:新增配置控制是否允许自动创建服务
- [PR #1304] feat:xdsv3 support envoy odcds
优化
- [PR #1170] refactor:Adjust xds rule build
- [PR #1179] refactor: remove the template code used by map to improve code readability
- [PR #1232] refactor:statis log add traffic direction info
- [PR #1235] in order to improve the processing of service discovery QPS when using api-http server
- [PR #1250] 增强eureka delta api的稳定性
- [PR #1283] 无效请求不需要上报prometheus
测试覆盖
- [PR #1309] test:add unit test for service visible feature
BUG 修复
- [PR #1162] 调整与Eureka实例的状态兼容逻辑
- [PR #1173] 单机版为用户关联用户组时,会默认勾选所有用户组
- [PR #1184] 修复通过服务别名拉取时,服务信息为源服务信息问题
- [PR #1188] 用户组token鉴权bug修复;用户名校验规则修改:允许包含英文句号
- [PR #1192] 修复batchConfig批量注销实例配置问题
- [PR #1196] 修复心跳上报写redis异常时未将异常结果返回问题
- [PR #1197] 修复熔断/探测规则更新绑定服务信息后缓存遗留脏数据
- [PR #1201] 修复 arm64 环境无法使用 docker image
- [PR #1212] 修复清理软删除实例时没有同步清理 instance_metadata 以及 health_check 表的数据
- [PR #1213] 修复xDS 生成 cacheKey 时缺失 gatewayService
- [PR #1233] fix: Dockerfile 8761 port duplicate
- [PR #1240] fix typo: firtstUpdate -> firstUpdate
- [PR #1273] 解决配置中心标签 value 和 key 相同的问题
- [PR #1281] fix release_history search bug
- [PR #1287] fix:修复checkLeader任务卡住 & 修复nacos2.x逻辑兼容问题
- [PR #1291] fix: statis plugin will happen nil pointer dereference on item
- [PR #1301] 入口流量匹配规则缺失
New Contributors
- @skywli made their first contribution in https://github.com/polarismesh/polaris/pull/1175
- @qnnn made their first contribution in https://github.com/polarismesh/polaris/pull/1184
- @WTIFS made their first contribution in https://github.com/polarismesh/polaris/pull/1188
- @xiaolaji422 made their first contribution in https://github.com/polarismesh/polaris/pull/1215
- @codingcn made their first contribution in https://github.com/polarismesh/polaris/pull/1233
- @nxsre made their first contribution in https://github.com/polarismesh/polaris/pull/1273
- @qdsordinarydream made their first contribution in https://github.com/polarismesh/polaris/pull/1283
- @Lin-1997 made their first contribution in https://github.com/polarismesh/polaris/pull/1291
- @njy17 made their first contribution in https://github.com/polarismesh/polaris/pull/1301
Full Changelog: https://github.com/polarismesh/polaris/compare/v1.17.8...v1.18.0
参与 PolarisMesh 社区
欢迎大家使用体验、Star、Fork、Issue,也欢迎大家参与 PolarisMesh 开源共建!
仓库地址:https://github.com/polarismesh/polaris
项目文档: https://polarismesh.cn/#/
往期发布:https://github.com/polarismesh/polaris/releases
1.3 - Release v1.17.8
下载地址
特性说明
支持 Mesh Sidecar 场景下的单机限流
在 1.17.3 版本中,我们针对 Mesh Sidecar 的场景,支持将 Polaris 的单机限流规则 Spec 通过 Envoy XDS 的格式进行下发给 Sidecar,使得用户在 Mesh 场景下可以享受 Polaris 的限流能力
- 需要搭配 polaris-controller v1.6.0 版本一起使用
配置中心支持配置回滚、撤回发布
为了让用户有更好的配置中心使用体验,社区在 v1.17.3 版本中支持了配置回滚、撤回某个配置版本发布的能力。当前仅支持通过服务端 OpenAPI 进行操作,前端 UI 支持会在下一个版本中对外放出。
关闭服务端自注册的心跳上报
修改服务端配置
bootstrap:
# Register as Arctic Star Service
polaris_service:
# disable_heartbeat disable polaris_server node run heartbeat action to keep lease polaris_service
disable_heartbeat: true
版本变化
特性
- [PR 1174] feat:support push envoy rls filter xds
- [PR 1175] feat(xds): add OutlierDetection and HealthCheck
- [PR 1187] [Refactor] 配置中心重构+支持配置回滚/撤回发布
优化
- [PR 1162] 调整与Eureka实例的状态兼容逻辑
- [PR 1170] refactor:Adjust xds rule build
- [PR 1179] refactor: remove the template code used by map to improve code readability
- [PR 1202] refactor:配置文件缓存逻辑重构
BUG 修复
- [PR 1173] 单机版为用户关联用户组时,会默认勾选所有用户组
- [PR 1184] 修复通过服务别名拉取时,服务信息为源服务信息问题
- [PR 1188] 用户组token鉴权bug修复;用户名校验规则修改:允许包含英文句号
- [PR 1192] 修复batchConfig批量注销实例配置问题
- [PR 1196] 修复心跳上报写redis异常时未将异常结果返回问题
- [PR 1208] 修复熔断/探测规则更新绑定服务信息后缓存遗留脏数据
- [PR 1212] 修复清理软删除实例时没有同步清理 instance_metadata 以及 health_check 表的数据
- [PR 1213] 修复xDS 生成 cacheKey 时缺失 gatewayService
- [PR 1201] 修复 arm64 环境无法使用 docker image 问题
New Contributors
- @skywli made their first contribution in https://github.com/polarismesh/polaris/pull/1175
- @qnnn made their first contribution in https://github.com/polarismesh/polaris/pull/1184
- @WTIFS made their first contribution in https://github.com/polarismesh/polaris/pull/1188
Full Changelog: https://github.com/polarismesh/polaris/compare/v1.17.2...v1.17.5
参与 PolarisMesh 社区
欢迎大家使用体验、Star、Fork、Issue,也欢迎大家参与 PolarisMesh 开源共建!
仓库地址:https://github.com/polarismesh/polaris
项目文档: https://polarismesh.cn/#/
往期发布:https://github.com/polarismesh/polaris/releases
1.4 - Release v1.17.2
下载地址
特性说明
配置文件支持加密
配置文件中经常会涉及一些敏感信息,例如帐号密码等参数。这时需对这些敏感信息进行加密,提供信息安全性。因此在 1.17.2 版本中配置中心正式支持配置加密功能,进一步提升配置中心的功能完备性。具体使用文档参考 配置加密
启用该能力的配置文件示例
plugin:
crypto:
entries:
# 配置加密功能中,服务端提供的加密算法插件配置
- name: AES
支持集群部署不依赖 Redis 能力正式发布
在 1.17.2 中社区正式提供北极星集群部署的去 redis 组件的集群部署方案,方便用户快速搭建北极星,减低使用北极星的成本。
启用该能力的配置文件示例
healthcheck:
open: true
service: polaris.checker
slotNum: 30
minCheckInterval: 1s
maxCheckInterval: 30s
clientReportInterval: 120s
batch:
heartbeat:
open: true
queueSize: 10240
waitTime: 32ms
maxBatchCount: 32
concurrency: 64
checkers:
- name: heartbeatLeader
北极星存储层支持 Postgresql (实验性)
在 1.17.2 中, 社区开发者 @bingxindan 带了存储层基于 postgresql 的支持, 可通过引入 store-postgresql 插件自编译开启存储层使用 postgresql 的特性。
北极星协议层支持 Nacos 2.x 注册发现 (实验性)
在 1.17.2 中, 社区开发者 @chatless 带了协议层对 nacos2.x 的支持, 可通过引入 apiserver-nacos 插件自编译开启协议层支持 nacos2.x 客户端接入的特性。
What’s Changed
Feature
- [PR #1124] Support configuration encryption function
- [PR #1126] 解耦AuthServer,将功能拆解到UserOperator及StrategyOperator
- [PR #1135] Add support for config upsert and publish
Enhancement
- [PR #1131] Support sending the last heartbeat health time of the instance to the data plane
- [PR #1137] Optimize store layer error code return and instance query cache
- [PR #1141] docs(update): 完善OpenAPI swagger 文档
- [PR #1147] optimize the code style of the configuration center
BugFix
- [PR #1143] fix:hotfix remove user mobile and email
- [PR #1144] doc:CircuitBreakerStore文档注释错误
- [PR #1151] Fix the failure of the metrics function after restarting the container
- [PR #1155] The server nil panic problem after the health check function is turned off
New Contributors
- @KarKLi made their first contribution in https://github.com/polarismesh/polaris/pull/1126
- @fabian4 made their first contribution in https://github.com/polarismesh/polaris/pull/1135
- @baker-yuan made their first contribution in https://github.com/polarismesh/polaris/pull/1144
- @Asher-Wall made their first contribution in https://github.com/polarismesh/polaris/pull/1141
Full Changelog: https://github.com/polarismesh/polaris/compare/v1.17.1...v1.17.2
参与 PolarisMesh 社区
欢迎大家使用体验、Star、Fork、Issue,也欢迎大家参与 PolarisMesh 开源共建!
仓库地址:https://github.com/polarismesh/polaris
项目文档: https://polarismesh.cn/#/
往期发布:https://github.com/polarismesh/polaris/releases
1.5 - Release v1.17.0
下载地址
特性说明
支持集群部署不依赖 Redis(BETA)
为了减低中小公司在部署北极星时需要维护 redis 以及 mysql 组件所带来的运维工作量,在 1.17.0 中我们提供北极星集群部署的去 redis 组件的集群部署方案,方便用户快速搭建北极星,减低使用北极星的成本。
启用该能力的配置文件示例
healthcheck:
open: true
service: polaris.checker
slotNum: 30
minCheckInterval: 1s
maxCheckInterval: 30s
clientReportInterval: 120s
batch:
heartbeat:
open: true
queueSize: 10240
waitTime: 32ms
maxBatchCount: 32
concurrency: 64
checkers:
- name: heartbeatLeader
XDS 规则下发时支持服务别名
通过北极星的服务别名机制,支持将服务别名一并通过 XDS 的格式进行下发,解决 XDS 跨命名空间资源下发的问题
What’s Changed
Feature
- PR #1068 eureka注册发现支持命名空间隔离
- PR #1070 feat:support service alias from xds
- PR #1082 feat:support heartbeat without redis in cluster
Enhancement
- PR #1056 refactor admin job execute interval config
- PR #1063 refactor: maintain rename to admin
- PR #1065 refactor: service governance rule not bind service instance
- PR #1066 支持根据实例ID获取实例列表
- PR #1079 添加windows启动停止脚本
- PR #1081 GetInstances接口过滤条件为可选
- PR #1086 修复高并发场景下鉴权CheckPermission方法导致内存溢出问题
- PR #1099 add CleanDeletedClients admin-job
BugFix
- PR #1057 修复有子目录的配置文件无法导入问题
- PR #1060 fix:限流规则disable查询条件失效
- PR #1076 fix:http 客户端接口鉴权行为保持和gRPC一致
- PR #1085 Fix prometheus.yml bug
- PR #1102 fix: remove standalone docker exec not exist shell
Test
- PR #1062 test: add polaris.checker health check unit test
New Contributors
- @self-made-boy made their first contribution in https://github.com/polarismesh/polaris/pull/1068
- @kuwoo made their first contribution in https://github.com/polarismesh/polaris/pull/1085
- @vLiang486 made their first contribution in https://github.com/polarismesh/polaris/pull/1079
- @Sad-polar-bear made their first contribution in https://github.com/polarismesh/polaris/pull/1086
Full Changelog: https://github.com/polarismesh/polaris/compare/v1.16.4...v1.17.0
参与 PolarisMesh 社区
欢迎大家使用体验、Star、Fork、Issue,也欢迎大家参与 PolarisMesh 开源共建!
仓库地址:https://github.com/polarismesh/polaris
项目文档: https://polarismesh.cn/#/
往期发布:https://github.com/polarismesh/polaris/releases
1.6 - Release v1.16.0
下载地址
特性说明
更完善的服务调用监控
在 polaris 1.16.0 版本前,缺乏服务调用之间的流量指标展示分析,因此服务间调用的流量情况对用户来说就是一个黑盒,同时,用户也无法判断在北极星平台配置的流量治理规则,在服务调用时是否执行,以及执行的结果是否符合预期:
- 缺少服务间调用请求的响应时耗统计信息。
- 缺少服务间调用请求的响应码分布情况。
- 缺少接口级、实例级的服务间调用请求指标。
基于以上几点,在 polaris v1.16.0 版本中,我们针对服务间调用的核心指标重新进行设计,并且优化了相关指标在控制台的展示试图,进一步方便用户观察微服务运行期间服务调用的流量情况:
- 提供服务间调用响应的耗时统计,支持最大、最小、均值、P95以及P99的查询,支持按照服务、接口、实例进行筛选查看。
- 提供服务间调用响应码的分布情况,支持按照服务、接口、实例进行筛选查看。
- 提供服务间调用的主调实例以及被调实例的指标查看。
控制台预览
- 服务调用兼容概览
- 服务调用详细
里程碑规划
polaris 下个版本将围绕易用性以及稳定性进行迭代,预计在5月初推出,计划提供下列功能:
集群化部署去redis
为了减低中小公司在部署北极星时需要维护 redis 以及 mysql 组件所带来的运维工作量,社区将提供北极星集群部署的去 redis 组件的集群部署方案,方便用户快速搭建北极星,减低使用北极星的成本。
XDS协议支持下发跨命名空间的服务数据
当前北极星的 XDS 协议不支持下发跨命名空间的服务数据,社区会先通过北极星的服务别名机制,支持将服务别名一并已XDS的格式进行下发,通过服务别名的方式解决XDS跨命名空间资源下发的问题;后续社区也会进一步调研Envoy的按需加载的能力,从而更优雅的解决这一使用问题。
参与 PolarisMesh 社区
欢迎大家使用体验、Star、Fork、Issue,也欢迎大家参与 PolarisMesh 开源共建!
仓库地址:https://github.com/polarismesh/polaris
项目文档: https://polarismesh.cn/#/
往期发布:https://github.com/polarismesh/polaris/releases
1.7 - Release v1.15.0
下载地址
特性说明
更完善的服务注册配置监控
在 polaris 1.15.0 版本前,北极星的可观测性指标较少,用户难以观察北极星服务端运行时的一些指标信息:
- 缺少服务端针对请求的响应时耗统计信息
- 缺少服务端响应的错误码分布情况
- 缺少服务数、实例数的统计,无法感知不同状态实例总数的一个变化情况
基于以上几点,在 polaris v1.15.0 版本中,我们针对服务端的几个核心指标进行上报并展示在控制台,方便用户观察北极星服务端运行时情况:
- 提供服务端响应的耗时统计,支持最大、最小、均值、P95以及P99的查询,支持按照接口、服务端节点进行筛选查看
- 提供服务端响应码的分布情况,支持按照接口、服务端节点进行筛选查看
- 提供服务数统计情况,用户可以查看到服务总数、在线服务数、异常服务数、离线服务数的变化曲线
- 提供实例数统计情况,用户可以查看到实例总数、在线实例数、异常实例数、隔离实例数的变化曲线
- 提供配置分组、配置文件、已发布配置文件的数量变化曲线
控制台预览
- 概览页面
- 服务和配置统计
- 服务端请求统计
里程碑规划
polaris 下个版本将继续围绕易用性、可观测性以及稳定性进行迭代,预计在4月初推出,计划提供下列功能:
服务调用监控
- 支持更详细的业务服务之间的流量调用监控
- 查看每个服务的调用数、QPS、响应延迟、成功率、错误码
- 查看服务调用数的情况:成功数、失败数、被限流请求数、被熔断请求数
参与 PolarisMesh 社区
欢迎大家使用体验、Star、Fork、Issue,也欢迎大家参与 PolarisMesh 开源共建!
仓库地址:https://github.com/polarismesh/polaris
项目文档: https://polarismesh.cn/#/
往期发布:https://github.com/polarismesh/polaris/releases
1.8 - Release v1.14.0
下载地址
特性说明
更完善的熔断治理规则
在 polaris 1.14.0 版本前,熔断规则的易用性存在不好的地方。
- 仅支持节点级熔断。
- 熔断条件支持不够丰富,仅支持错误率和错误数。
- 无法根据用户自定义错误码以及响应延迟进行熔断。
- 主动探测规则无法配置。
基于以上几点,在 polaris v1.14.0 版本中,我们针对熔断规则的 spec 以及配置交互做了优化,解决了上述几个问题,当前用户可以根据自己的场景配置更加灵活的熔断规则:
- 支持服务级、接口级以及节点级的熔断规则配置。
- 支持时延、错误码的错误判断条件,用户可自行组合判断条件。
- 支持配置熔断恢复条件。
- 支持配置主动探测规则,与业务调用合并判断决定是否关闭熔断状态。
支持查看服务端连接数
-
社区用户在使用过程中,在升级服务端版本或者变更接入信息等场景中,发现无法观察北极星服务端中的客户端连接数量情况。因此在 polaris 控制台中我们新增北极星服务端自身的一些指标监控:
-
查看当前链接到北极星服务端的 SDK 实例连接数量
-
查看当前北极星服务端的服务发现链接数
-
查看当前北极星服务端的配置获取连接数
控制台预览
- 服务熔断配置
- 节点熔断配置
- 主动探测配置
- 服务端链接数查看
里程碑规划
polaris 下个版本将继续围绕易用性、可观测性以及稳定性进行迭代,预计在 3 月初推出,计划提供下列功能:
注册配置监控
- 支持更详细的北极星服务端请求数、响应延迟等指标监控图标。
- 支持提供服务数、实例数、配置数等指标监控图标。
更易用的路由规则
- 调整路由规则配置的交互以及规则定义,降低用户对于路由规则配置的理解以及上手成本。
配置导入导出
- 支持命名空间级别、配置分组级别的配置导入导出能力,提升用户对于配置中心的使用体验。
参与 PolarisMesh 社区
欢迎大家使用体验、Star、Fork、Issue,也欢迎大家参与 PolarisMesh 开源共建!
仓库地址:https://github.com/polarismesh/polaris
项目文档: https://polarismesh.cn/#/
往期发布:https://github.com/polarismesh/polaris/releases
1.9 - Release v1.13.0
下载地址
版本信息
polaris-server
Features
- [ISSUE #338] support config auth by @chuntaojun in https://github.com/polarismesh/polaris/pull/623
- feat: support data sync between eureka and polaris by @andrewshan in https://github.com/polarismesh/polaris/pull/818
Enhancement
- Fix: rename module name(#714) by @enjoyliu in https://github.com/polarismesh/polaris/pull/716
- protobuf go struct tag inject and other OS platfrom support by @onecer in https://github.com/polarismesh/polaris/pull/748
- Refactor remove third plugin by @chuntaojun in https://github.com/polarismesh/polaris/pull/756
- fix: 移除platform和bussiness逻辑代码(#720) by @alexwanglei in https://github.com/polarismesh/polaris/pull/761
- fix: #672 优化日志 by @hoErYu in https://github.com/polarismesh/polaris/pull/735
- feat: organize part of the repetitive content by @houseme in https://github.com/polarismesh/polaris/pull/767
- feat: 丰富运维管理接口相关接口swagger信息 by @onecer in https://github.com/polarismesh/polaris/pull/770
- [ISSUE #804] 支持 eureka 服务大小写不敏感在北极星的存储方式 by @reallovelei in https://github.com/polarismesh/polaris/pull/804
- feat: 北极星内部事件中心机制优化(#342) by @alexwanglei in https://github.com/polarismesh/polaris/pull/796
- feat:优化eureka插件大小写敏感,默认大小写不敏感 by @andrewshan in https://github.com/polarismesh/polaris/pull/820
- fix: #751 timewheel用来做轮转任务会每轮增加timewheel.interval时间的问题 by @hoErYu in https://github.com/polarismesh/polaris/pull/752
- Feature: improve code and improve golangci-lint config by @houseme in https://github.com/polarismesh/polaris/pull/777
- enrich naming swagger docs by @onecer in https://github.com/polarismesh/polaris/pull/778
- fix: 鉴权插件优化(#709) by @alexwanglei in https://github.com/polarismesh/polaris/pull/771
- 等待 apiserver 都启动完成,再自注册。 by @reallovelei in https://github.com/polarismesh/polaris/pull/785
- Golangci action part 1 by @chuntaojun in https://github.com/polarismesh/polaris/pull/763
- Fix action yaml name by @chuntaojun in https://github.com/polarismesh/polaris/pull/764
- feat: improve code golangci config by @houseme in https://github.com/polarismesh/polaris/pull/765
- feat: fix server exit or restart signal by @daheige in https://github.com/polarismesh/polaris/pull/768
- feat: code style for cache package by @daheige in https://github.com/polarismesh/polaris/pull/773
- feat: update go.mod for require by @daheige in https://github.com/polarismesh/polaris/pull/728
- feat: update namespace for code style by @daheige in https://github.com/polarismesh/polaris/pull/730
- feat: update plugin for code style by @daheige in https://github.com/polarismesh/polaris/pull/733
- [ISSUE #741] Fix import style by @chuntaojun in https://github.com/polarismesh/polaris/pull/740
- 优化mysql参数判断 by @reallovelei in https://github.com/polarismesh/polaris/pull/797
- Add batch clean instances maintian interface by @shichaoyuan in https://github.com/polarismesh/polaris/pull/784
- refactor:Adjust instance event implementation by @chuntaojun in https://github.com/polarismesh/polaris/pull/811
Plugins
- fix:discoverevent 添加上报日志到loki插件 (#648) by @alexwanglei in https://github.com/polarismesh/polaris/pull/708
- fix: history添加插件上报Loki(#656) by @alexwanglei in https://github.com/polarismesh/polaris/pull/719
Install
- fix: 修复polaris-console.yaml启动问题 by @xinyuwang in https://github.com/polarismesh/polaris/pull/725
- [ISSUE #737] Install standalone limiter by @chuntaojun in https://github.com/polarismesh/polaris/pull/746
- 修复:windows中修改端口后无效的问题 by @qindong0809 in https://github.com/polarismesh/polaris/pull/780
BugFix
- fix:优化v2路由规则对于v1路由规则的兼容逻辑 by @chuntaojun in https://github.com/polarismesh/polaris/pull/707
- fix:修改数据库升级脚本导入失败问题 by @andrewshan in https://github.com/polarismesh/polaris/pull/713
- [ISSUE #754] feat: 修复XDS正则表达式不生效问题 by @chuntaojun in https://github.com/polarismesh/polaris/pull/755
- [ISSUE #760] 限流规则禁用SDK无法感知 by @chuntaojun in https://github.com/polarismesh/polaris/pull/772
- fix-shellcheck(SC1128) The shebang must be on the first line. by @dyrnq in https://github.com/polarismesh/polaris/pull/815
- typo: 替换错别字 by @Skyenought in https://github.com/polarismesh/polaris/pull/816
- docs: 修复 README 中失效的链接 by @Skyenought in https://github.com/polarismesh/polaris/pull/806
- docs: 修复图片链接失效 by @Skyenought in https://github.com/polarismesh/polaris/pull/807
- feat: fix restart by @daheige in https://github.com/polarismesh/polaris/pull/810
- polaris 集群模式副本数取值错误问题 by @xuyiyu411 in https://github.com/polarismesh/polaris/pull/813
- fix:修复zh.toml中的错误码描述 by @chuntaojun in https://github.com/polarismesh/polaris/pull/743
- Fix limiter yaml name by @chuntaojun in https://github.com/polarismesh/polaris/pull/801
- 注释修正 by @reallovelei in https://github.com/polarismesh/polaris/pull/800
Test
- Unit test auth by @chuntaojun in https://github.com/polarismesh/polaris/pull/718
- 支持 eureka 服务大小写不敏感在北极星的存储方式,调整集成测试。 by @reallovelei in https://github.com/polarismesh/polaris/pull/809
- [ISSUE #759] feat: 添加 github action by @chuntaojun in https://github.com/polarismesh/polaris/pull/758
- Test/it bootstrap file by @chuntaojun in https://github.com/polarismesh/polaris/pull/788
- fix gilangci config by @houseme in https://github.com/polarismesh/polaris/pull/799
New Contributors
- @alexwanglei made their first contribution in https://github.com/polarismesh/polaris/pull/708
- @hoErYu made their first contribution in https://github.com/polarismesh/polaris/pull/735
- @qindong0809 made their first contribution in https://github.com/polarismesh/polaris/pull/780
- @reallovelei made their first contribution in https://github.com/polarismesh/polaris/pull/785
- @Skyenought made their first contribution in https://github.com/polarismesh/polaris/pull/806
- @xuyiyu411 made their first contribution in https://github.com/polarismesh/polaris/pull/813
- @dyrnq made their first contribution in https://github.com/polarismesh/polaris/pull/815
Full Changelog: 点击链接查看
1.10 - Release v1.12.0
下载地址
版本信息
polaris-server
功能优化
Bug修复
- [PR #650] 修复错误码 i18n 可能导致的空指针问题
- [PR #659] 限流规则匹配标签无法完全删除的问题
- [PR #661] 修复限流用例失败问题
- [PR #673] 修复eureka协议中心跳错误的处理
- [PR #684] 修复自定义路由v1转v2的id漂移问题
- [PR #693] 修复v2路由规则对于v1路由规则兼容逻辑
安装优化
- [PR #690] 单机版本支持部署 polaris-limiter 分布式限流server
- [PR #724] 修复helm部署包中polaris-console.yaml配置不对问题
新贡献者
Full Changelog: 点击链接查看
polaris-console
功能优化
- [PR #86] 优化服务实例新增/编辑表单
- [PR #91] Console 使用 Json Web Token 代替用户资源访问凭据,避免浏览器泄露用户Token
- [PR #99] 支持配置中心配置文件编辑页面全屏编辑
- [PR #102] beta能力 提供Swagger UI 供加载Polaris Server的OpenAPI 接口, 访问北极星控制台地址(127.0.0.1:8080/apidocs)即可
- [PR #110] 新建/编辑服务优化标签交互
Bug修复
- [PR #92] 修复编辑服务实例时不展示服务实例的地理位置信息数据
- [PR #98] 修复服务可观测性指标聚合查询语句不正确问题
配置变动
polaris-server.yaml
北极星的自注册服务只保留 polaris.checker ,其他自注册服务被移除
# server启动引导配置
bootstrap:
# 注册为北极星服务
polaris_service:
# probe_address: ##DB_ADDR##
enable_register: true
isolated: false
services:
- name: polaris.checker
protocols:
- service-grpc
升级步骤
注意:升级步骤仅针对部署了北极星集群版本
之前已经安装过北极星集群
北极星服务端升级操作
执行 SQL 升级动作
- 登陆北极星的MySQL存储实例
- 执行以下 SQL 增量脚本
mysql -u $db_user -p $db_pwd -h $db_host < store/sqldb/scripts/delta/v1_11_0-v1_12_0.sql
北极星控制台升级操作
更新 polaris-console.yaml
logger:
RotateOutputPath: log/polaris-console.log
RotationMaxSize: 500
RotationMaxAge: 30
RotationMaxBackups: 100
level: info
webServer:
mode: "release"
listenIP: "0.0.0.0"
listenPort: 8080
jwt:
secretKey: "polarismesh@2021"
expired: 1800
namingV1URL: "/naming/v1" # 本次 v1.9.0 版本变动
namingV2URL: "/naming/v2" # 本次 v1.9.0 版本变动
authURL: "/core/v1"
configURL: "/config/v1"
monitorURL: "/api/v1"
webPath: "web/dist/"
polarisServer:
address: "{北极星服务端IP}:8090"
monitorServer:
address: "127.0.0.1:9090"
oaAuthority:
enableOAAuth: false
hrData:
enableHrData: false
1.11 - Release v1.11.0
下载地址
版本信息
polaris-server
功能优化
- [PR #532] 支持配置某些服务在控制台列表进行隐藏
- [PR #526] 支持配置模版功能(UI交互暂未支持)
- [PR #552] 新限流后台功能 & UI 交互优化
- [PR #550] 服务端报错支持 i18n
- [PR #553] 配置中心代码结构调整
Bug修复
- [ISSUE #520] 服务注册后,没有做任何操作但是实例的修改时间会发生变化
安装优化
- [PR #530] 调整 docker 镜像 tag 的发布规则
代码测试
- [PR #509] 单元测试 & 集成测试添加MySQL存储测试场景
- [PR #542] 优化整体的集成测试 & 单元测试
- [PR #548] 单元测试 & 集成测试添加Redis存储测试场景
新贡献者
- @mhcvs2 made their first contribution in https://github.com/polarismesh/polaris/pull/530
- @GuiyangZhao made their first contribution in https://github.com/polarismesh/polaris/pull/532
- @shuiqingliu made their first contribution in https://github.com/polarismesh/polaris/pull/548
- @mangoGoForward made their first contribution in https://github.com/polarismesh/polaris/pull/547
Full Changelog: https://github.com/polarismesh/polaris/compare/v1.10.0...v1.11.1
polaris-console
功能优化
- [PR #66] 创建配置文件时,文件的格式自动从文件名中识别
- [PR #66] 调整创建配置文件页面 Card body 的高度,尽可能充满整个浏览器
- [PR #86] 优化服务实例新增/编辑表单
Bug修复
- [PR #95] 修复前端删除熔断规则最后一条时没有触发熔断规则解绑
升级步骤
注意:升级步骤仅针对部署了北极星集群版本
之前已经安装过北极星集群
执行 SQL 升级动作
- 登陆北极星的MySQL存储实例
- 执行以下 SQL 增量脚本
mysql -u $db_user -p $db_pwd -h $db_host < store/sqldb/scripts/delta/v1_8_0-v1_11_0.sql
2 - 接口文档
2.1 - Open API
2.2 - 错误码
错误码 | 描述 |
---|---|
200000 | 执行成功 |
200001 | 服务发现数据无变化 |
200002 | 数据没有变化, 无需更新 |
400000 | 请求错误 |
400001 | 请求解析失败 |
400002 | 空请求 |
400003 | 批量数据超过限制 |
400004 | 服务发现资源非法 |
400100 | 请求ID非法 |
400101 | 用户名非法 |
400102 | 用户token非法 |
400103 | 参数非法 |
400104 | 查询实例参数为空 |
400105 | 查询实例, 需要服务或命名空间或主机作为参数 |
400110 | 命名空间名称非法 |
400111 | 命名空间拥有人非法 |
400112 | 命名空间token非法 |
400120 | 服务名称非法 |
400121 | 服务拥有人非法 |
400122 | 服务token非法 |
400123 | 服务元数据非法 |
400124 | 服务端口非法 |
400125 | 服务所属业务非法 |
400126 | 服务所属部门非法 |
400127 | 服务cmdb非法 |
400128 | 服务备注非法 |
400129 | 服务别名备注非法 |
400130 | 实例ID非法 |
400131 | 实例Host非法 |
400132 | 实例端口非法 |
400133 | 实例别名非法 |
400134 | 当前命名空间不运行创建sid类型别名 |
400135 | 服务别名拥有者非法 |
400136 | 实例协议非法 |
400137 | 实例版本非法 |
400138 | 实例逻辑集合非法 |
400139 | 实例隔离设置非法 |
400140 | 服务端未开启健康检查 |
400141 | 在已被禁用的实例上进行心跳 |
400142 | 心跳超限, 实例仅支持每秒1次心跳 |
400143 | 未找到心跳类型 |
400150 | 元数据长度过长或包含非法字符 |
400151 | 限频ID非法 |
400152 | 限频标签非法 |
400153 | 限频数量非法 |
400154 | 限流名称非法 |
400160 | 熔断ID非法 |
400161 | 熔断版本非法 |
400162 | 熔断名称非法 |
400163 | 熔断命名空间ID非法 |
400164 | 熔断所属人ID非法 |
400165 | 熔断token非法 |
400166 | 熔断所属业务非法 |
400167 | 熔断所属部门非法 |
400168 | 熔断备注非法 |
400170 | 服务有已存在的网格 |
400171 | 当前资源有已存在的网格 |
400172 | 网格参数非法 |
400180 | 平台ID非法 |
400181 | 平台名称非法 |
400182 | 平台域名非法 |
400183 | 平台qps非法 |
400184 | 平台token非法 |
400185 | 平台拥有人非法 |
400186 | 平台所属部们非法 |
400187 | 平台备注非法 |
400188 | 未找到平台 |
400190 | 限流ID非法 |
400191 | 限流qps非法 |
400192 | 限流标识非法 |
400201 | 资源已存在 |
400202 | 未找到资源 |
400203 | 当前命名空间存在服务,请先删除服务,再删除命名空间 |
400204 | 当前服务存在实例,请先删除实例,再删除服务 |
400205 | 当前服务存在路由规则,请先删除路由规则,再删除服务 |
400206 | 当前服务存在限流规则,请先删除限流规则,再删除服务 |
400207 | 存在已发布配置 |
400208 | 实例请求重复 |
400209 | 当前服务存在熔断规则,请先删除熔断规则,再删除服务 |
400210 | 当前服务存在服务别名,请先删除服务别名,再删除服务 |
400211 | 某些网格资源在当前命名空间已存在 |
400212 | 某些熔断在当前命名空间已存在 |
400213 | 服务已被某些网格订阅 |
400214 | 服务已存在限流配置 |
400215 | 用户已存在 |
400216 | 用户组已存在 |
400217 | 鉴权策略规则已存在 |
400218 | 主账户下还存在子账户,请先删除所有子账户,在删除主账户 |
400301 | 服务未找到 |
400302 | 路由未找到 |
400303 | 示例未找到 |
400304 | 服务别名未找到 |
400305 | 命名空间未找到 |
400306 | 未找到和当前服务别名关联的服务 |
400307 | 限流规则未找到 |
400308 | 熔断规则未找到 |
400309 | 主配置未找到 |
400310 | 标签配置未找到 |
400311 | 未找到标签或服务, 或者关系已存在 |
400312 | 用户未找到 |
400313 | 拥有人用户未找到 |
400314 | 用户组未找到 |
400315 | 鉴权策略规则未找到 |
400401 | 客户端API未开放 |
400402 | 不允许请求当前业务服务 |
400410 | 用户所有人非法 |
400411 | 用户ID非法 |
400412 | 用户密码非法 |
400420 | 用户组所有人的属性非法 |
400421 | 用户组ID非法 |
400430 | 鉴权策略规则拥有人非法 |
400431 | 鉴权策略规则名称非法 |
400432 | 鉴权策略ID非法 |
400440 | 鉴权策略用户主体类型非法 |
400501 | 服务别名不允许更新 |
400502 | 服务别名不允许创建实例 |
400503 | 服务别名不允许创建路由规则 |
400504 | 仅允许源服务可以创建别名 |
400505 | 服务别名不允许创建限流规则 |
400506 | 服务别名不允许绑定规则 |
400507 | 不允许不同的命名空间绑定同一规则 |
400508 | 不允许修改默认策略 |
400509 | not allow modify main account default strategy |
400700 | 路由规则ID非法 |
400701 | 路由规则类型非法,只支持 (RulePolicy,MetadataPolicy) |
400702 | 路由名称非法 |
400703 | 路由优先级非法,只支持[0, 10] |
400801 | 配置文件组名非法 |
400802 | 配置文件名称非法 |
400803 | 配置文件内容过长 |
400804 | 非法的配置文件格式,支持的格式有: json,xml,html,properties,text,yaml |
400805 | 配置文件标签非法, 标签应该是成对的, 比如key1,value1,key2,value2, 并且key,value应是非空白字符 |
400806 | 监视配置文件格式非法 |
400807 | 无法找到配置文件 |
400808 | 配置模板名称非法 |
401000 | 未经授权 |
401001 | 权限不被允许 |
401002 | 鉴权token为空 |
401003 | token已被禁用 |
401004 | token不存在 |
403001 | token验证异常 |
403002 | 角色操作异常 |
404001 | 无法找到主机的cmdb |
409000 | 数据有冲突, 请再次重试 |
429001 | 你的实例请求过多 |
500000 | 执行异常 |
500001 | 存储层异常 |
500002 | cmdb插件异常 |
500004 | 解析路由规则失败 |
500005 | 解析限频规则失败 |
500006 | 解析熔断规则失败 |
500007 | 心跳异常 |
500008 | 实例异步注册超时 |
3 - 测试报告
3.1 - 性能测试报告
测试方案
测试工具
使用开源的ghz工具进行压测。测试工具地址: ghz
测试规格
测试组网
客户端直接发送请求到北极星服务端:
- 服务注册/反注册请求会对MySQL进行增删操作
- 心跳上报请求会对Redis进行KV修改操作
- 服务发现请求会对服务端缓存进行操作
准备动作
- 下载polaris代码
git clone https://github.com/polarismesh/polaris.git
- 打包proto
chmod 777 polaris/common/api/protoc/bin/* && cd polaris/common/api/v1/ && sh build.sh
测试结果
实例注册
测试数据
规格 | TPS | 平均RT(ms) | 最大RT(ms) | P99 RT(ms) | 服务端CPU负载 | MySQLCPU负载 | Redis CPU负载 |
---|---|---|---|---|---|---|---|
1C2G | 2144 | 354.75 | 2450 | 379.92 | 64.68 | 90.54 | 1.40 |
2C4G | 4563 | 448.183 | 2300 | 492.31 | 66.09 | 82.33 | 1.60 |
4C8G | 13608 | 187.22 | 2380 | 210.53 | 76.37 | 86.14 | 2.39 |
8C16G | 29457 | 79.01 | 2030 | 83.03 | 58.63 | 89.03 | 2.43 |
8C32G | 35912 | 67.89 | 2500 | 75.35 | 63.02 | 87.31 | 2.43 |
测试命令
- 执行(ghz命令与配置文件至于polaris/common/api/v1 目录下):
./ghz --config=./register_instance.json -c {并发数, eg 100} -x {持续执行时间, eg 60s}
- 配置文件 register_instance.json 如下:
{
// 实际执行时请把所有注释行删除
// 请求总数
"total": 1,
// 并发数
"concurrency": 1,
"proto": "./grpcapi.proto",
"call": "v1.PolarisGRPC.RegisterInstance",
"data": {
"id": "polaris-perf-test-1-ins-{{.RequestNumber}}",
// 服务名称
"service": "POLARIS-PERF-TEST-1",
// 命名空间名称
"namespace": "default",
// 随机域名
"host": "fakehost-{{randomString 8 }}.com",
// 随机端口
"port": "{{randomInt 1000 50000}}",
"enable_health_check": true,
"health_check": {
"type": 1,
"heartbeat": {
"ttl": 3
}
},
"healthy": true,
"isolate": false,
"ctime": "{{.TimestampUnix}}",
"mtime": "{{.TimestampUnix}}"
},
// 北极星地址
"host": "127.0.0.1:8091",
"insecure": true
}
服务发现
测试数据
规格 | TPS | 平均RT(ms) | 最大RT(ms) | P99 RT(ms) | 服务端CPU负载 | MySQLCPU负载 | Redis CPU负载 |
---|---|---|---|---|---|---|---|
1C2G | 12194 | 214.75 | 654.23 | 248.64 | 64.68 | 18.9 | 6.40 |
2C4G | 27331 | 17.183 | 310.46 | 18.58 | 92.51 | 39.441 | 4.01 |
4C8G | 46118 | 38.63 | 472.42 | 45.47 | 90.567 | 25 | 5.96 |
8C16G | 80277 | 47.81 | 719 | 59.03 | 88 | 25.12 | 3.4 |
8C32G | 116021 | 298.05 | 872.81 | 372.28 | 93.02 | 27.312 | 9 |
测试命令
- 执行:
./ghz --config=./discover_instance.json -c {并发数, eg 100} -x {持续执行时间, eg 60s}
- 配置文件 discover_instance.json 如下:
{
"total":1,
"concurrency":1,
"proto":"./grpcapi.proto",
"call":"v1.PolarisGRPC.Discover",
"data":{
"type": 1,
"service": {
// 服务名称
"name": "PERF-1-TEST-SVCID-{{.WorkerID}}",
// 命名空间名称
"namespace":"default"
}
},
// 北极星地址
"host": "127.0.0.1:8091",
"insecure":true
}
心跳上报
测试数据
规格 | TPS | 平均RT(ms) | 最大RT(ms) | P99 RT(ms) | 服务端CPU负载 | MySQLCPU负载 | Redis CPU负载 |
---|---|---|---|---|---|---|---|
1C2G | 5094 | 155.31 | 564.95 | 161.84 | 92.68 | 36.34 | 50 |
2C4G | 6419 | 421.73 | 342.65 | 492.31 | 87.41 | 40.134 | 41.241 |
4C8G | 10417 | 41.47 | 840.14 | 50.96 | 90.124 | 31.2 | 23.576 |
8C16G | 32092 | 70.83 | 639.47 | 77.83 | 89.412 | 34 | 30.66 |
8C32G | 78077 | 219.42 | 371.58 | 242.79 | 90 | 35 | 32.39 |
测试命令
- 执行:
./ghz --config=./heartbeat_instance.json -c {并发数, eg 100} -x {持续执行时间, eg 60s}
- 配置文件 heartbeat_instance.json 如下:
{
// 实际执行时请把所有注释行删除
// 请求总数
"total": 1,
// 并发数
"concurrency": 1,
"proto": "./grpcapi.proto",
"call": "v1.PolarisGRPC.Heartbeat",
"data": {
"id": "polaris-perf-test-1-ins-{{.RequestNumber}}",
// 服务名称
"service": "POLARIS-PERF-TEST-1",
// 命名空间名称
"namespace": "default",
"healthy": true,
"isolate": false,
"mtime": "{{.TimestampUnix}}"
},
// 北极星地址
"host": "127.0.0.1:8091",
"insecure": true
}
实例反注册
测试数据
规格 | TPS | 平均RT(ms) | 最大RT(ms) | P99 RT(ms) | 服务端CPU负载 | MySQLCPU负载 | Redis CPU负载 |
---|---|---|---|---|---|---|---|
1C2G | 903 | 573.75 | 797.03 | 682.78 | 45.42 | 91.54 | 2.4 |
2C4G | 1485 | 448.18 | 621.231 | 391.07 | 69.241 | 82.33 | 3.8 |
4C8G | 2959 | 57.59 | 389.36 | 88.25 | 67.51 | 93.1251 | 2.39 |
8C16G | 8694 | 61.70 | 265.97 | 123.03 | 73.41 | 91.03 | 2.3 |
8C32G | 14356 | 61.70 | 423.51 | 323.95 | 63.39 | 87.31 | 6.196 |
测试命令
- 执行:
./ghz --config=./deregister_instance.json -c {并发数, eg 100} -x {持续执行时间, eg 60s}
- 配置文件 deregister_instance.json 如下:
{
// 实际执行时请把所有注释行删除
// 请求总数
"total": 1,
// 并发数
"concurrency": 1,
"proto": "./grpcapi.proto",
"call": "v1.PolarisGRPC.DeregisterInstance",
"data": {
"id": "polaris-perf-test-1-ins-{{.RequestNumber}}",
// 服务名称
"service": "POLARIS-PERF-TEST-1",
// 命名空间名称
"namespace": "default"
},
// 北极星地址
"host": "127.0.0.1:8091",
"insecure": true
}
结论
在长时间的压力测试下,不同规格的北极星集群均维持正常运行状态,集群可承载的实例容量从1k实例到10w实例,相关依赖组件的系统资源消耗也均在预期内,并未出现相关依赖组件高负载不可用现象。
- 注册实例的TPS最高可达35912,符合接口预期
- 服务发现的QPS最高可达116021,符合接口预期
- 实例心跳的TPS最高可达78077,符合接口预期
- 注销实例的TPS最高可达14356,符合接口预期
通过压测,不同规格的北极星集群可以稳定支撑服务实例数量均满足预期。
4 - 开发者文档
4.1 - 插件开发
4.1.1 - 开发规范
背景
北极星服务端整体都是一个插件化的设计,当前支持插件化的核心功能模块有
插件名称 | 插件定义文件 |
---|---|
协议层 | apiserver.go |
存储层 | store.go |
资源鉴权 | auth.go |
除了这三个核心模块支持插件化之外,还有一些旁路功能,北极星也进行了插件化的设计
插件名称 | 插件定义文件 |
---|---|
操作审计日志 | plugin/history.go |
服务实例事件 | plugin/discoverevent.go |
服务发现统计 | plugin/discoverstatis.go |
健康检查 | plugin/healthchecker.go |
接入层限流 | plugin/ratelimit.go |
配置管理 | plugin/cmdb |
无论是核心模块还是旁路功能模块,北极星服务端都对其进行了插件化的设计,可以快速的通过编写相关插件来扩展北极星的能力。譬如通过对协议层 apiserver 的扩展,北极星服务端快速支持了 http 以及 grpc 协议的接入,同时实现了 xds 协议以及 eureka 协议的接入。
那么如何根据北极星服务端提供的插件扩展点,来开发自己的插件呢?
如何编写插件
如何编写北极星服务端插件呢?这里我们以开发一个用于将服务实例事件上报到 Loki 的插件。
初始化插件项目
-
创建插件项目文件夹
mkdir polaris-server-plugin-${plugin-name}
-
进入第一步创建的文件夹:polaris-server-plugin-${plugin-name},执行 go mod init 命令
go mod init ${module name}
-
进入第一步创建的文件夹:polaris-server-plugin-${plugin-name},创建项目的 README 文档来描述这个插件的使用
-
引入北极星服务端依赖
go get github.com/polarismesh/polaris@${release version}
至此,一个北极星服务端插件项目就初始化完成了,接着就要开始进入我们的插件编写阶段。
插件编写
在编写插件前,我们需要先了解下,我们想要实现的插件定义是什么样的,因此这里我们要实现的是一个服务实例事件插件,因此来看下这个插件的定义
// Plugin 通用插件接口
type Plugin interface {
// Name 插件名称,需要唯一
Name() string
// Initialize 初始化插件,插件自行解析 ConfigEntry 转为插件所需要的配置对象
Initialize(c *ConfigEntry) error
// Destroy 插件销毁
Destroy() error
}
// DiscoverChannel is used to receive discover events from the agent
type DiscoverChannel interface {
Plugin
// PublishEvent 发布一个服务事件
// @param event 服务事件信息
PublishEvent(event model.DiscoverEvent)
}
因此,我们的自定义服务实例事件插件就需要实现 Plugin 以及 DiscoverChannel 两个 interface,然后将上报 Loki 的动作在 PublishEvent 方法中进行完成。
至此,我们就可以开始编自定义插件,实现将 model.DiscoverEvent 信息写入到 Loki 中
插件注册
完成插件编写后,我们还需要主动将插件信息注册到北极星服务端中,这里北极星服务端利用了 golang 中的 init 机制来实现插件实例的注册。
因此,我们还需要在我们的插件代码中,添加下面的插件注册动作。
package loki
import "github.com/polarismesh/polaris/plugin"
func init() {
d := &discoverEventLoki{}
plugin.RegisterPlugin(d.Name(), d)
}
至此,一个自定义的服务实例事件插件的开发流程到这里就全部结束了。
如何使用插件
-
下载北极星服务端源码
git clone https://github.com/polarismesh/polaris.git
-
进入 polaris 目录, 并切换到对应的版本 TAG
cd polaris git checkout ${release version}
-
进入 polaris 目录,执行命令引入相关插件
go get github.com/polaris-contrib/polaris-server-plugin-discoverevent-loki@{version}
-
(可选)进入 polaris 目录,执行依赖整理
go mod tidy -compat=1.17
-
编辑 polaris/plugin.go, 在 import 块中添加
import ( ... _ "github.com/polarismesh/polaris/plugin/discoverevent/loki" # 引入插件,并触发插件的自动注册逻辑 )
-
执行 build.sh 构建 polaris-server
4.1.2 - CMDB插件开发
背景
在进行服务发现发现时,我们都希望能够做到同机房、同地域的就近路由,以减少网络调用的延迟。而要做到就近路由,就必须知道主调节点和被调节点的地域信息,因此我们可以通过开发北极星服务端的 CMDB 插件,对接至自己的 CMDB 系统,从而填充每个实例的地域信息,以到达实现就近路由的目标。
为了方便快速的将北极星的 CMDB 扩展点对接至用户的 CMDB 系统,我们设计了一套通用的 CMDB OpenAPI,开发者只需要按照该 OpenAPI 实现一个 CMDB 查询服务端,即可将北极星快速对接到自己的 CMDB 系统中去。
协议定义
发起 CMDB 查询请求
METHOD: POST
HEADER: Authorization: 访问 Token // 可选
BODY
{
"request_id": String,
"page_no": Number,
"page_size": Number // 固定,每次 100 拉取
}
CMDB Server 的返回响应
{
"total": Number, // 总数
"size": Number, // 当前放回条数
"code": Number,
"info": String,
"data": [
{
"ip": "127.0.0.1",
"type": "host", # 固定
"region": {
"name": String
},
"zone": {
"name": String
},
"campus": {
"name": String
},
}
]
}
服务端启用
修改 polaris-server.yaml 配置
# 插件配置
plugin:
cmdb:
name: memory
option:
url: "{ CMDB 查询服务端 OpenAPI 地址 }"
interval: 60s
然后重启北极星服务端即可
4.2 - 指标监控
4.2.1 - 监控指标
服务端
指标
APIServer
指标名称 | 类型 | 说明 | 标签 |
---|---|---|---|
client_total | GAUGE | SDK 实例数 | polaris_server_instance |
sdk_client_total | GAUGE | SDK 连接数 | polaris_server_instance |
discovery_conn_total | GAUGE | 注册发现连接数 | polaris_server_instance |
config_conn_total | GAUGE | 配置中心连接数 | polaris_server_instance |
服务注册
指标名称 | 类型 | 说明 | 标签 |
---|---|---|---|
service_count | GAUGE | 服务数 | namespace, polaris_server_instance |
service_online_count | GAUGE | 在线服务数(服务下存在健康状态的实例) | namespace, polaris_server_instance |
service_abnormal_count | GAUGE | 异常服务数(服务下全为异常状态的实例) | namespace, polaris_server_instance |
service_offline_count | GAUGE | 离线服务数(服务下没有任何状态的实例) | namespace, polaris_server_instance |
instance_count | GAUGE | 实例数 | namespace, service, polaris_server_instance |
instance_online_count | GAUGE | 健康实例数 | namespace, service, polaris_server_instance |
instance_abnormal_count | GAUGE | 异常实例数 | namespace, service, polaris_server_instance |
instance_isolate_count | GAUGE | 隔离实例数 | namespace, service, polaris_server_instance |
配置中心
指标名称 | 类型 | 说明 | 标签 |
---|---|---|---|
config_group_count | GAUGE | 配置分组数 | namespace, polaris_server_instance |
config_file_count | GAUGE | 配置文件数 | namespace, group, polaris_server_instance |
config_release_file_count | GAUGE | 已发布配置文件数 | namespace, group, polaris_server_instance |
响应耗时
指标名称 | 类型 | 说明 | 标签 |
---|---|---|---|
client_rq_interval_count | GAUGE | 客户端请求数 | api, protocol, err_code, polaris_server_instance |
client_rq_timeout | GAUGE | 客户端请求总时延 | api, protocol, err_code, polaris_server_instance |
client_rq_timeout_min | GAUGE | 客户端请求最小时延 | api, protocol, err_code, polaris_server_instance |
client_rq_timeout_avg | GAUGE | 客户端请求平均时延 | api, protocol, err_code, polaris_server_instance |
client_rq_timeout_max | GAUGE | 客户端请求最大时延 | api, protocol, err_code, polaris_server_instance |
维度
维度名称 | 说明 |
---|---|
polaris_server_instance | PolarisSever节点IP |
api | 接口名称 |
protocol | 接口层协议 |
err_code | 错误码 |
namespace | 命名空间 |
service | 服务名 |
group | 配置分组 |
5 - 相关产品对比
5.1 - 注册中心对比
北极星VS其他注册中心
特性 | 北极星 | nacos 1.x | nacos 2.x | eureka | consul |
---|---|---|---|---|---|
服务发现单机TPS | 80277 | 13604 | 30680.48 | 6431 | 40027.91 |
服务注册单机TPS | 29457 | 13257 | 26784.84 | 4793 | 4608.57 |
架构 | AP | AP/CP | AP/CP | AP | CP |
水平扩展 | 存算分离,支持水平扩展 | 存算合一,不支持水平扩展 | 存算合一,不支持水平扩展 | 存算合一,不支持水平扩展 | 存算合一,不支持水平扩展 |
健康检查 | 主动探测+客户端心跳 | 主动探测+客户端心跳 | 主动探测+客户端心跳/连接 | 客户端心跳 | 主动探测+客户端心跳 |
推空保护 | 支持 | 支持 | 支持 | 支持 | 不支持 |
可定制 | 插件化 | 插件化 | 插件化 | 插件化 | 不可定制 |
跨地域容灾 | 支持 | 不支持 | 不支持 | 不支持 | 支持 |
5.2 - 服务网格对比
北极星VS其他服务网格
特性 | 北极星 | sentinel | istio |
---|---|---|---|
Proxy模式接入 | 支持 | 支持 | 支持 |
Proxyless框架接入 | 支持 | 支持 | 不支持 |
多语言SDK | 支持Go/Java/C++ | 支持Go/Java | 不支持 |
多测试环境路由 | 支持 | 不支持 | 支持 |
蓝绿发布 | 支持 | 不支持 | 支持 |
金丝雀发布 | 支持 | 不支持 | 支持 |
全链路灰度 | 支持 | 不支持 | 支持 |
A/B测试 | 支持 | 不支持 | 支持 |
就近访问 | 支持 | 不支持 | 支持 |
故障熔断 | 支持 | 支持 | 支持 |
单机限流 | 支持 | 支持 | 支持 |
分布式限流 | 支持单次、异步 | 支持单次 | 支持单次 |
限流维度 | 支持服务、接口、标签、调用关系、来源IP等维度 | 基于应用、资源、调用关系维度 | 服务、接口、标签维度 |
限流算法 | 直接拒绝、匀速排队 | 直接拒绝、匀速排队 | 直接拒绝 |
Token Server高可用 | 支持 | 不支持(需自己实现) | 不支持(需自己实现) |
可观测性 | 支持 | 支持 | 支持 |
6 - 常见问题
6.1 - 服务端相关
北极星集群版安装,初始化数据库发生 “Specified key ’name’ was too long; max key length is 767 bytes”
解决方案
- 启用innodb_large_prefix参数能够取消对于索引中每列长度的限制(但是无法取消对于索引总长度的限制)
- 启用innodb_large_prefix必须同时指定innodb_file_format=barracuda,innodb_file_per_table=true,并且建表的时候指定表的row_format为dynamic或者compressed(mysql 5.6中row_format默认值为compact)
6.2 - 客户端相关
北极星如何采集业务的服务调用监控信息
- 北极星业务监控指标是由 Polaris SDK 直接和 Prometheus 服务端进行数据通信
- Prometheus 感知 Polaris SDK 的方式借助了 Prometheus Service Discovery 能力,当选择 Polaris SDK 通过 Pull 模式上报监控数据时,北极星服务端能够感知到当前所有处于运行状态的 Polaris SDK 实例,然后通过 Prometheus Service Discovery 的方式通知到 Prometheus。
在北极星监控页面看不到服务调用指标
排查点 1: 客户端是否开启了相关监控上报的功能开关
监控功能开关如何开启请参考各语言客户端中的可观测性章节
排查点 2: 确认主调方是否有执行服务调用结果上报
- 当前北极星的服务调用监控依赖主调方主动上报,因此需要确认业务应用的主调方 (Consumer) 是否引入了北极星相关客户端依赖,比如 Polaris Java、Polaris Go、Spring Cloud Tencent、DubboGo Polaris 等等
- 如果用户是直接使用 Polaris Java、Polaris Go, 则需要自行调用 ConsumerAPI 中的 UpdateServiceCallResult 方法完成服务调用监控数据上报
排查点 3: 确认 prometheus、pushgateway 组件是否部署以及是否正常运行
- 单机版安装包已经包括了 prometheus、pushgateway 组件, 开箱即用, 如果是虚拟机部署的, 当虚拟机重启时,需要自行启动每个相关组件进程。
- 集群版安装时,用户需要自己部署生产可用的 prometheus、pushgateway 集群,请参考集群部署文-监控组件安装
排查点 4: prometheus 指标采集分为了两种: Pull 模式以及 Push 模式,需要根据自己的网络情况合理选择 pull 模式或者 push 模式