开发者学堂课程【来电科技微服务治理落地实践:来电科技微服务治理落地实践】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/977/detail/14898
来电科技微服务治理落地实践
无损下线:
根据常见的微服务开发框架,我们该如何解决无损下线的问题:
①Spring Cloud:需配合 Actutor,提前注销服务,并且及时刷新客户端缓存,等待流量停止再进行服务端下线逻辑
②Dubbo:需要开启 Qos 功能,进行提前注销服务。
以上都需要深入了解服务框架内部实现细节并要修改
不管是什么框架, SDK主要要做的三个步骤∶
①抽象出服务注销接口,并暴露给运维侧,配合发布系统进行。
②需要注意注册中心更新的实效性、以及及时刷新客户端的缓存
③等待流量停止后,再进行服务端下线,从而消除服务调用存在的报错时间
以 Dubbo 为例,关于无损下线一直是不断的,一直到Dubbo2.7.12时才具备,但是还有很多问题。当然,MSE服务治理能兼容2.5.x-2.7.x所有版本。
Dubbo 无损下线能力图:
无损上线:
在服务注册过程中,如果有一些异步资源要准备,可能Dubbo/SC服务需要做到延迟暴露。当流量过大时,服务要需要具有小流量预热的能力,流量需要缓慢增加。还有一些问题,比如Fastjson/Jetty低版本没有开启并行类加载,可能会导致请求报错、JVM JIT编译问题会引起cpu飙高、在应用刚启动时可能会出现日志异步化。
以上所有问题都处理完之后才能允许正常流量进入,在这个过程中,把它抽象为无损上线的过程。
三、来电科技微服务治理的选择
1.来电科技 MSE 全链路灰度最佳实践
来电科技选用 MSE 服务治理专业版实现无侵入的微服务治理能力,以上所有方案都不需要改变现有业务的架构。
通过 Java 应用的方式使得其系统具备可灰度、可观测、可回滚的安全变更三板斧的能力,满足了业务高度发展下的快速叠加及小心验证的诉求。
通过全链路灰度的方案:当前端请求进入时,通过Nginx转发,进入Gray机器之后,流量会自动打上Gray标,并且会往后优先找Gray应用,如果后面有Gray应用,它会到Gray应用;如果不存在Gray应用,会回到未打标。到未打标之后,后面有Gray应用,它会回到Gray,从而实现一个全链路灰度的能力。
Nginx控制灰度环境百分之十的流量,正式环境百分之九十的流量,针对百分之十的流量,可以实现日常的演练:故障演练以及新功能的验证。
这套方案同时支持Spring cloud和Dubbo,来电科技通过这个方案快速落地了全链路灰度的能力,从而使得应用发布上线更加稳定,也会避免一些安全生产的问,有效提升了线上的稳定性,从而保证了服务百分之九十九点九的可用率。
来电科技不仅用了全链路灰度的能力,它还使用了服务预热、离群实例摘除、精确发布、微服务治理、流量观测等能力。
四、最佳实践
1.无损上下线最佳实践
在MSE中,只需要控制台开启无损上下线的动态配置,将应用进行发布,就可以看到实时的流量曲线以及在这个过程中服务进行了哪些操作、当前处于哪个流程,提供一套完整的解决方案,并且不需要我们更改一行代码
2.服务发现高可用保护
(1)无服务发现高可用保护
网络抖动如CoreDNS异常等,导致与注册中心连接断开
注册中心Server异常,导致地址列表为空
注册中心变更过程中,有小概率返回空列表
Consumer订阅到空列表,业务中断报错
(2)开启服务发现高可用保护
Consumer 订阅到空列表,推空保护生效,丢弃变更,保障业务服务可用
当关闭服务开发高可用,会导致消费者找不到服务提供者地址,请求异常;如果服务开发高可用是开启的,即使注册中心销毁了,只要服务没有变更,在这个过程服务请求都是正常的。
关闭服务开发高可用保护:
开启服务开发高可用保护:
下面我们进行分别演示:
回到我们刚刚讲的无损上线的相关知识点,我们抽象总结了应用初始化、预建连接、服务注册、通过readiness检查、小流量预热、正常流量进入等方法,当应用接进MSE之后并且控制台打开开关就会自动的具备以上能力。
以微服务引擎中的无损上下线为例,
在这里面,我们可以看到所有的实践记录,并且可以看到实时的流量信息。
在节点名称里找到一个无损下线成功的案例
我们可以看到,在这个过程中首先是服务开始注册,在第一个请求进入之后,服务预热开始,因为我们设置的预热时长是112秒,到预热结束正好是112秒。流量是缓慢增加的,当Readiness检查通过并且预热结束、其他的pot开始滚动之后,流量开始下降,再往后就是流量均分达到稳态的情况,最后是先停止流量,流量停止之后,服务才开始下线。整个过程通过上述图片可以看出。
在控制台可以配置预热时长以及延迟注册时间,高级配置是设置预热曲线、服务预热关联滚动发布、微服务生命周期与k8s就绪检查对齐。
在控制台配置完成之后,还要在 spring-cloud-a 编辑启动探测,之后整个过程就可以实现。
下面我们来简单看一下开启服务开发高可用与没开的效果,首先,先演示关闭服务开发高可用保护:
当 coding s 是错误时,服务是正常的,当 coding s 恢复时,出现大量报错。原理是当连接断开时收到的是空地址推送,这时消费者会请求异常.
可以看到健康状态,超时之后,服务未下线
当 coding s 恢复时,流量没有任何损失,也没有出现大量报错
如果在生产上,不具备服务发现高可用保护的话,那在这个过程中,当 provider 与注册中心出现连接异常,即使消费者和注册中心都是正常的,服务还是会报错,对生产产生的影响是非常大的。
MSE 以无侵入的方式提供了全链路灰度、微服务流量治理的可观测等核心能力,以更加经济的方式、更加高效的路径帮助来电科技在云上快速构建起完整的微服务治理体系,有效的提升了线上稳定性,保障了服务百分之九十九点九的可用率。
客户也提到:MSE 服务治理帮助系统以很低的成本、无侵入的方式快速实现了全链路灰度的能力,进一步提升了系统的稳定性,让我们新需求的迭代更加安心。
最后我们也介绍了两个方案,一个是无损上下线,无损上下线通过产品化的方式可以在控制台上快速的配置上下线的规则并且实时的看到上下线的观测图。另一个是服务开发高可用保护,通过开启服务开发高可用可以实现注册中心异常的容灾保护,保障业务服务的可用性。