全面容器化之后,来电科技如何实现微服务治理?
发布时间:2022-01-13 点击数:579
MSE 服务治理帮助我们系统以很低的成本无侵入的方式快速实现了全链路灰度能力,进一步提升了我们系统的稳定性,让我们新需求的迭代上线更加地安心。
—来电科技架构师 汤长征
来电科技自 2014 年起开始进入共享充电领域,定义并开创了行业,属于行业内最早的共享充电企业。主要业务覆盖充电宝自助租赁、定制商场导航机开发、广告展示设备及广告传播等服务。来电科技拥有业内立体化产品线,大中小机柜以及桌面型,目前全国超过 90% 的城市实现业务服务落地,注册用户超2亿人,实现全场景用户需求。
缘起:回顾来电科技当时的业务、架构现状和痛点。
初见:分享在技术选型之路上我们为什么选择 阿里云微服务引擎 MSE(Microservices Engine,全文以下简称 MSE) 。
落地:我们是怎么一步步落地、在短时间内低成本落地全链路灰度能力以及无损上下线等能力。
缘起
Cloud Native
来电科技内部技术趋势满足如下三点
- 微服务全面落地
- 全面接入 K8s
- 快速迭代,稳定发布的诉求
- 部署方便,发布效率大大提升
- 弹性扩缩容
- 大大节约服务器成本
- 运维成本降低
简单讲一下全面容器化给来电科技系统带来的好处,首先就是应用部署变得非常方便,同时由于 K8s 的标准化使得 CI/CD 也变得简单,整体的发布效率大大提升;同时部署在 K8s 上的应用天然具备弹性扩缩容的能力,可以有效应对流量洪峰;同时由于上了 K8s 后,服务按需使用资源,相比原先按照峰值长期固定保有服务器,资源利用率相对比较低,现在可以大大节约服务器成本。相比传统集群运维非常繁琐,同时对运维人员技能要求也非常高:既要精通 lua /ansible 脚本等,又要懂云产品网络配置和监控运维。系统的运维成本非常高,阿里云容器服务 ACK 的标准化界面能很好解决高密部署以及系统运维的问题,极大降低成本。
2 稳定发布三板斧的诉求
日常发布中,我们常常会有如下一些错误的想法:
- 这次改动的内容比较小,而且上线要求比较急,就不需要测试直接发布上线好了
- 发布不需要走灰度流程,快速发布上线即可
- 灰度发布没有什么用,就是一个流程而已,发布完就直接发布线上,不用等待观察
- 虽然灰度发布很重要,但是灰度环境很难搭建,耗时耗力优先级并不高
这些想法都可能让我们进行一次错误的发布。
3 自研的挑战
来电科技有考虑过自研微服务治理,来电科技架构师 汤长征 同学也参与过 Dubbo 的开源社区,微服务治理研发对于来电科技来说并不是非常困难的事情,但是自研微服务治理组件还是存在以下必不可少的成本问题。
- 接入成本高
- 维护成本高
- 功能单一,不灵活,可扩展性低
- 可定位性变差
02
初见
Cloud Native
第一次接触MSE服务治理这块产品,就有许多的点命中我们的诉求,以下几点对我们微服务治理改造来说都是很吸引的点
- 无侵入
MSE 微服务治理能力基于Java Agent字节码增强的技术实现,无缝支持市面上近 5 年的所有 Spring Cloud 和 Dubbo 的版本,用户不用改一行代码就可以使用。只需开启 MSE 微服务治理专业版,在线配置,实时生效。
- 接入简单
只需在阿里云容器的应用市场安装 mse-pilot,然后在 MSE 控制台开启命名空间级别的服务治理,重启应用即可接入,当然卸载服务治理也是非常容易的,只需在控制台关闭服务治理,卸载 mse-pilot 即可,不需要改变业务的现有架构,随时可上可下,没有绑定。
- 功能强大,持续发展
从开发态、测试态到运行态全生命周期的服务治理覆盖,使得研发同学可更加专注于业务本身。
MSE 微服务治理还提供了以下解决方案,解决微服务治理难点,快速提升企业的微服务治理能力。稳定性领域:线上故障紧急诊断排查与恢复、线上发布稳定性解决方案、微服务全链路灰度解决方案。降本增效领域:日常测试环境降本隔离解决方案、微服务无缝迁移上云解决方案、微服务开发测试提效解决方案。
- 可视化
MSE 服务治理专业版提供了微服务治理流量的可视化视图
对于灰度流量灰没灰到,灰了多少,配完路由规则后流量实时生效,做到一眼可见,心中有数。
同时对于无损上下线的场景,MSE 提供端到端全生命周期的防护,一眼可以看出流量有无损失,损失在什么部分。
- 拥抱云原生
进入云原生体系之后,以 K8s 为主的云原生体系强调集群之间的灵活调度型,以 POD 为单位任意的调度资源,在被调度后 POD 的 IP 也将相应的发生变化,传统的服务治理体系,通常以 IP 为维度进行治理策略的配置,MSE 使用更加云原生的方式使用标签为维度进行微服务治理策略的配置。
当然在 21 年 9 月刚接触 MSE 微服务治理的过程中发现 MSE 为服务治理的全链路能力还是存在一些局限性的,首先就是只支持微服务网关 Spring Cloud Gateway 与 Zuul 以及云网关,当时并不能支持自建的 Nginx 网关,同时在 Dubbo 的场景下只支持按照接口参数维度的路由,对于运维同学来说还需要了解业务接口的实现,过于精细化控制,上生产的成本过高;同时全链路灰度的入口仅仅支持 Http 网关或者应用作为灰度流量的入口,并不能支持 TCP 网关作为流量的入口。
落地
Cloud Native
我们与来电科技的架构师深入了解后,对用户的灰度场景进行了进一步的抽象与总结,只有深入到业务中去才能更加了解客户的需求。我们总结出如下三个场景
场景一:对经过机器的流量进行自动染色,实现全链路灰度
- 进入带 tag 的节点后续调用优先选择带有相同 tag 的节点,即对经过 tag 节点的流量进行"染色"
- 有 tag 的调用链路上找不到相同 tag 的节点,则 fallback 到无 tag 的节点
- 有 tag 的调用链路经过无 tag 的节点,如果链路后续调用有 tag 的节点,则恢复 tag 调用的模式
场景二:通过给流量带上特定的 header 实现全链路灰度
场景三:通过自定义路由规则来进行全链路灰度
通过在灰度请求中增加指定的 header,且整条调用链路会将该 header 透传下去,只需在对应的应用配置该 header 相关的路由规则,带指定 header 的灰度请求进入灰度机器,即可按需实现全链路流量灰度。
由于对经过应用的流量打标染色并进行全链路灰度,所以我们支持了任意的流量入口,也支持 Ingress、自建网关的灰度,在支持应用级别的灰度的同时兼容自定义的路由,更加灵活的方式满足了来电科技全链路灰度的场景。
2 来电全链路灰度落地方案
当我们在白天高峰期做发布,通常都会导致业务流量出现损失,我们的研发人员不得不选择在晚上业务低峰期做变更,这大大降低了研发人员的幸福指数,因为他们不得不面临熬夜加班的困境。如果能在白天大流量高峰期也能进行流量无损的变更,那么这对于研发人员来说将是大大提升研发效率的事情。
04
未来
Cloud Native
MSE 服务治理专业版以无侵入的方式提供了全链路灰度、离群实例摘除、金丝雀发布、微服务治理流量可观测等核心能力,以更经济的方式、更高效的路径帮助来电科技在云上快速构建起完整微服务治理体系,有效提升线上稳定性,保证服务 99.9% 的可用率。
随着来电科技微服务化的深入,除了全链路灰度、无损上下线还有更多的场景逐渐出现,微服务全生命周期的治理将覆盖从发布、运行、故障排查、故障恢复以及全链路流量的治理,MSE 微服务治理将携手帮助来电科技持续提升微服务研发效能与服务的高可用率。