【音频】客户案例-来电科技微服务治理实践|学习笔记

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 快速学习【音频】客户案例-来电科技微服务治理实践

开发者学堂课程【微服务治理技术进阶【音频】客户案例-来电科技微服务治理实践】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/1033/detail/15130


【音频】客户案例-来电科技微服务治理实践


内容介绍:

一、源起

二、初见


MSE 微服务治理帮助我们的系统以很低的成本、无侵入的方式快速实现了全链路灰度能力,进一步体现了系统的稳定性,让新需求的迭代上线更加安心。

来电科技自2014年开始进入共享充电领域,定义并开创了行业,属于行业内最早的共享充电企业。

主要业务覆盖充电宝自主租赁、定制商场导航机开发、广告展示设备及广告传播等服务。来电科技拥有业内立体化产品线,大中小机柜以及桌面型。目前全国超过90%的城市实现业务服务落地,注册用户超过两亿人,实现全场景用户需求。

来电科技的业务场景丰富且系统众多,在技术架构上以完成容器化以及微服务化的改造,微服务架构使用 springcloud 与 dubbo。随着近年来的高速发展,充电宝设备节点以及业务量都在快速增加。

来电应用的整体应用架构也随着业务的高速发展持续不断的进化。微服务治理是微服务化深入的必经之路。

本节来分享来电科技在微服务化深入过程中探索的经历。


一、源起

来电科技内部技术趋势满足以下三点:

微服务全面落地、全面接入 k8s、快速迭代稳定发布的诉求

来电科技在2019年10月开始,服务开始全面进行微服务改造,微服务化改造完成。在2020年12月,此时来电科技已经全面微服务化,全面接入 k8s。

随着来电微服务化进程的逐步深入,在微服务化的过程中我们逐步面临一系列的挑战。总而言之,这些挑战分为三个大层面:效率、稳定和成本。进行微服务化本身是为了让业务的迭代更加高效。但当我们的微服务化逐步增加,电路越来越强,如果不进行进一步的治理,那么引发的效率问题可能会大于微服务架构本身带来的架构红利。因此在2021年6月,来电科技对微服务进行了可观测建设。2021年9月,开始进行微服务治理能力构建。

全面云生化的优势

云生化的优势总结有以下:

部署方便、发布效率大大提升、弹性扩缩容、大大节约服务器成本、运维成本降低。

全面云生化为来电科技系统带来的好处:应用部署变得非常方便,同时由于 k8s 的标准化使得 CI/CD 变得简单,发布效率大大提升。同时部署在 k8s 的应用具备弹性扩缩容的能力,可以有效分流。同时由于上了 k8s 后,服务按需使用资源比原先按照峰值长期固定保有服务器,资源利用率比较低,而目前可以大大节约服务器成本。相比传统运维非常繁琐,同时运维人员的技能要求非常高,既要精通脚本,又要懂云产品网络配置和监控运维,系统的运维成本非常高。阿里云 k8s 的标准化界面可以很好解决高密部署以及系统运维的问题,极大降低了成本。

稳定发布三板斧的诉求

日常发布中,常常会有以下错误想法:这次改动的内容较小而且上线要求较急,就不需要测试,直接发布上线即可。发布不需求走灰度流程,快速发布上线即可。灰度发布没有用,只是一个流程而已,发布完直接发布上线,不用等待观察。虽然灰度发布很重要,但是灰度环境很难搭建,耗时耗力,优先级不高。

以上想法都可能让我们进行一次错误的发布。阿里巴巴内部有安全生产三板斧概念,可灰度、可观测、可回滚。所有研发同学必须要掌握发布系统的灰度、观测和回滚功能如何使用。互联网频繁发布是常态,对于来电科技也一样。系统具备灰度、观测、回滚能力是微服务系统必须具备的能力。

灰度是发布之前的必备流程,也是提升线上稳定性的关键因素,当服务有新版本要发布上线时通过引流一小部分流量到新版本,可以及时发现程序问题,有效阻止大面积故障的发生。业界上已经有比较成熟的服务发布策略,例如蓝绿发布、金丝雀发布等,这些发布策略主要专注于如何对单个服务进行发布。来电科技的微服务数目众多,服务之间的依赖关系错综复杂。如果使用多套环境的硬隔离,会使得成本大大增高,发布方式变得复杂。有时某个功能发布依赖多个服务同时升级上线,希望对这些服务的新版本同时进行小流量灰度验证。通过构建从 ingress、网关到整个后端服务的环境隔离来对多个不同版本的服务进行灰度验证,这就是微服务治理中的全链路灰度的能力。

自研挑战

来电科技考虑过自研微服务能力,微服务治理研发对于来电科技来讲并不是非常困难的,但是自研微服务治理组件还是存在以下必不可少的成本问题:

接入成本高、维护成本高、功能单一不灵活、可拓展性低、可定位性差。

考虑到对生产应用进行微服务治理,微服务框架通常会引入服务治理的逻辑,这些逻辑通常会以 SDK 的方式被业务代码所依赖,而这些逻辑的变更和升级都需要每个微服务业务通过修改代码的方式实现。这样的变更造成了非常大的接入与升级成本,同时需要对开源的服务框架做治理功能的研发,就意味着需要出人力对微服务治理的组件进行管理和运维。

同时自建会使得功能非常贴近业务,也意味着功能会做的比较单一,未来的可扩展性就显得比较弱。同时全链路灰度的实现技术细节也很多,动态路由、节点达标、流量打标、分布式链路最终技术的实现成本高,由于 dubbo、springcloud 等服务框架本身的复杂性,同时随着微服务数量逐步增加,链路越来越强,相关的微服务治理问题的定位与解决也成了一个问题。

如果有 springcloud、阿里巴巴、dubbo 等专业团队的支持,微服务深入也会变得更加从容。


二、初见

第一次接触 MSE 服务治理产品,就有许多诉求。以下几点对于我们微服务治理改造都是很新的点:

无侵入:MSE 微服务治理能力基于 java、agent、字节码增强的技术实现,无缝支持市面上近五年的所有 springcloud 和 dubbo 版本,用户不用修改任何代码就可使用,用户只需开启微服务治理专业版,在线配置及时生效。

接入简单:只需在阿里云容器的应用市场安装 MSE,然后在 MSE 控制台开启命名空间级别的服务治理。重启应用即可接入。当然卸载服务治理也很容易,只需在控制台关闭服务治理,卸载 MSE 即可。不需要改变业务的现有架构,随时可上可下,没有绑定。

功能强大,持续发展:从开发态、测试态到运行态,全生命周期的服务治理覆盖,使得研发者可以更加专注业务本身。

MSE 服务治理还提供了以下解决方案:

解决微服务治理难点:快速提升企业微服务治理能力,稳定性领域:线上故障紧急诊断、排查与恢复,线上发布稳定性解决方案:微服务全链路灰度解决方案、日常测试环境建本隔离解决方案、微服务无缝迁移上云解决方案、微服务开发测试提效解决方案、可视化、MSE 服务治理专业版提供了微服务化治理的可视图。对于微服务流量是否灰度,多少灰度,配完路由规则后流量实时生效做到一目了然。

同时对于无损上下线的场景,MSE 提供了端到端全生命周期的防护,一眼可以看到流量有无损失,损失在什么部分。

拥抱云原生

进入云原生体系后,以 k8s 为主的云原生体系强调集群之间的灵活调用型,以 pod为单位的任意调动资源,在被调度后,pod 的 IP 也将相应发生变化。传统的服务治理体系通常以 IP 为维度,进行治理策略的配置。MSE 使用更加云原生的方式使用标签为维度,进行微服务治理策略的配置。同时在 k8s 环境下,与 k8s 体系深度集成,推出多种完整解决方案:无损上下线使得应用在弹性扩缩容的过程中保持流量无损。通过 Jenkins 构建 CI/CD,实现在 k8s 环境下的金丝雀发布,基于ingress 实现全链路灰度等。

当初 MSE 的一些局限

在2021年9月最初接触 MSE 微服务治理过程中发现 MSE 为服务治理的全链路能力还是存在一定局限性。首先,是只支持微服务网关以及云网关:当时并不能支持自建的 nginx 网关。同时在 dubbo 场景下,只支持按照接口参数维度的参数路由。对于运维者还需要了解业务接口的实现。过于精细化的控制让生产成本过高,同时全链路灰度的入口仅支持 http 网关或应用作为灰度流量的入口,并不能支持 tcp 网关作为流量的入口。

落地:与来电科技的架构师深入了解后对用户的灰度场景进行进一步的抽象与总结。只有深入到业务中才能更加了解客户的需求。总结出如下三个场景:MSE 全链路灰度场景

场景一:对经过机器的流量进行自动染色实现全链路灰度。进入带 tag 的节点后续调用优先选择带有相同 tag 的节点即对于经过 tag 节点的流量进行染色。有 tag 的调用链路上找到不同 tag 的节点,则 back 到无 tag 的节点。有 tag 的调用链路经过无 tag 的节点,如果链路后续调用有 tag 的节点,则恢复 tag 调用的模式。

场景二:通过给流量带上特定的 header,实现全链路灰度。客户端通过在请求中增加指定环境的标识,接入层根基表示进行转发至表示对应环境的网关。对应环境的网关通过隔离插件调用标识对应的项目隔离环境,请求在业务项目隔离环境中闭环。

场景三:通过自定义路由规则来进行全链路灰度。通过在灰度请求中增加指定的header,且整条调用链路会将该 header 传递下去。只需在对应的应用配置,将该header 相关的路由规则,待指定 header 的灰度请求进入灰度机器,即可按需实现全链路流量灰度。

考虑到场景一其实就能完美的满足来电科技全链路灰度场景,同时它也是绝大部分云上客户的诉求。场景二和三可以作为更加高阶的操作。由于对经过应用的流量打标并进行全链路灰度,所以我们支持了任意的流量入口,也支持 ingress 自建网关的灰度。在支持应用级别的灰度的同时,接融自定义的路由,以更加灵活的方式满足了来电科技全链路灰度的场景。

来电全链路灰度落地方案

来电的业务架构下最上层是移动端的用户界面,自建的 nginx 网关作为接入层,服务层就是各种服务,使用 springcloud 与 dubbo 作为服务框架。来电全链路灰度的架构如下:

在 nginx 层配置流量分层的配置,10%的流量进入灰度环境,90%的流量进入未打标的即线上正式环境。经过灰度环境的流量会自动被 MSE 染上对应环境的颜色,从而进行全链路的灰度路由,保证流量在灰度环境中闭环。如果没有灰度环境的机器例如支付中心只有线上的机器,那么流量会走线上环境。当我们的数据中心存在灰度环境的机器,灰度流量会重新回到数据中心的灰度环境中。

MSE 服务预热能力

当我们在白天高峰期做发布,通常都会导致业务流量出现损失。研发人员不得不选择在网上业务低峰期做变更,大大降低了研发人员的幸福感。如果可以在白天业务高峰期也可以进行流量无损的变更,对于研发人员将大大提升效率。

来电科技也遇到类似问题,当业务流量过大场景下进行应用发布,系统服务刚启动阶段,应用由于存在能启动的过程,此时的应用容量往往能比正常情况下低。

但是线上的流量无法区分当前的服务是否是刚启动,依旧会有大流量涌入,此时就会导致系统过载而崩溃,导致流量损失。如果我们的微服务应用具备服务预热的能力,使得流量按照一定的曲线进行流量增长,从而保证服务充分预热。即使是在高并发大流量场景中,保护应用安全启动。

MSE 提供了一种基于 Agent 无侵入预热微服务应用的方法。能使用户在不修改任何代码情况下即可为应用提供服务预热能力。未来 MSE 服务治理专业版以无侵入的方式提供了全链路灰度、金丝雀发布、微服务治理流量可观测等核心能力。

以更有效方式帮助来电科技在云上快速搭建微服务治理体系,有效提升了线上稳定性,保障服务99.9%的可用率。随着来电科技的更快深入,除了全链路灰度无损上下线,还有更多的场景逐渐出现。微服务全生命周期的治理将覆盖从发布、运行、故障排查、故障恢复以及全链路流量的治理。

MSE 服务治理将携手帮助来电科技持续提升微服务研发能力与服务的高能力。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
4天前
|
监控 持续交付 API
深入理解微服务架构:从设计原则到实践应用
深入理解微服务架构:从设计原则到实践应用
|
10天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
35 5
|
14天前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
9天前
|
Kubernetes API Docker
构建高效后端服务:微服务架构的深度实践与优化####
本文深入探讨了微服务架构在现代后端开发中的应用,通过剖析其核心概念、设计原则及实施策略,结合具体案例分析,展示了如何有效提升系统的可扩展性、可靠性和维护性。文章还详细阐述了微服务拆分的方法论、服务间通信的最佳实践、以及容器化与编排工具(如Docker和Kubernetes)的应用技巧,为读者提供了一份全面的微服务架构落地指南。 ####
|
12天前
|
负载均衡 监控 Cloud Native
云原生架构下的微服务治理策略与实践####
在数字化转型浪潮中,企业纷纷拥抱云计算,而云原生架构作为其核心技术支撑,正引领着一场深刻的技术变革。本文聚焦于云原生环境下微服务架构的治理策略与实践,探讨如何通过精细化的服务管理、动态的流量调度、高效的故障恢复机制以及持续的监控优化,构建弹性、可靠且易于维护的分布式系统。我们将深入剖析微服务治理的核心要素,结合具体案例,揭示其在提升系统稳定性、扩展性和敏捷性方面的关键作用,为读者提供一套切实可行的云原生微服务治理指南。 ####
|
13天前
|
Kubernetes Cloud Native Docker
云原生技术探索:容器化与微服务的实践之道
【10月更文挑战第36天】在云计算的浪潮中,云原生技术以其高效、灵活和可靠的特性成为企业数字化转型的重要推手。本文将深入探讨云原生的两大核心概念——容器化与微服务架构,并通过实际代码示例,揭示如何通过Docker和Kubernetes实现服务的快速部署和管理。我们将从基础概念入手,逐步引导读者理解并实践云原生技术,最终掌握如何构建和维护一个高效、可扩展的云原生应用。
|
15天前
|
监控 API 持续交付
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在后端开发中的应用,分析了其优势、面临的挑战以及最佳实践策略。不同于传统的单体应用,微服务通过细粒度的服务划分促进了系统的可维护性、可扩展性和敏捷性。文章首先概述了微服务的核心概念及其与传统架构的区别,随后详细阐述了构建微服务时需考虑的关键技术要素,如服务发现、API网关、容器化部署及持续集成/持续部署(CI/CD)流程。此外,还讨论了微服务实施过程中常见的问题,如服务间通信复杂度增加、数据一致性保障等,并提供了相应的解决方案和优化建议。总之,本文旨在为开发者提供一份关于如何在现代后端系统中有效采用和优化微服务架构的实用指南。 ####
|
17天前
|
消息中间件 设计模式 运维
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在现代后端开发中的应用,通过实际案例分析,揭示了其在提升系统灵活性、可扩展性及促进技术创新方面的显著优势。同时,文章也未回避微服务实施过程中面临的挑战,如服务间通信复杂性、数据一致性保障及部署运维难度增加等问题,并基于实践经验提出了一系列应对策略,为开发者在构建高效、稳定的微服务平台时提供有价值的参考。 ####
|
7天前
|
负载均衡 Cloud Native 持续交付
云原生时代的微服务架构:优势、挑战与实践
云原生时代的微服务架构:优势、挑战与实践
18 0
|
7天前
|
存储 监控 负载均衡
构建高效微服务架构:服务治理与监控的实践
构建高效微服务架构:服务治理与监控的实践
下一篇
无影云桌面