菜鸟 CPaaS 平台微服务治理实践

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 在使用 MSE 的云产品之后,对 PaaS 平台层来说,避免很多重复功能的建设。在我们业务侧实际落地的远不止如上列举的场景,比如:服务优雅停机、注册中心等能力,均解决了业务侧的微服务治理上的难点问题。

作者:竹达 赵宇


背景


CPaaS(cainiao platform as a service)是以公有云为基座,结合先进的云原生理建设的企业级 DevOps 的 PaaS 平台,CPaaS 主要目前主要支持的场景:菜鸟生态的云上研发运维、菜鸟公有云 SaaS 化的能力透出、菜鸟商业化输出支撑,部署到客户的公有云、专有云环境。


在服务了菜鸟多家生态公司及部分商业化输出的产品过程中,深入客户业务场景,解决业务研发及部署痛点的过程中,积累了一些宝贵的经验。这里我们主要对规范云上研发流程,提升研发效率为目标建设的环境治理(云上项目环境)及减少线上版本发布风而险建设的灰度平台的实现过程进行展开介绍。


目标


1、通过项目环境,为多分支并行开发场景提供流量隔离及快速联调的能力。

2、生产环境实现服务灰度发布(金丝雀发布),降低变更风险。

3、微服务应用具备优雅上下线能力,避免启停过程中带来的服务调用出错问题。


调研阶段


微服务流量管控


我们首先调研了开源自建的方案。在调研时我们发现,开发和维护开源 SDK 方案的成本非常大。需要对 Spring Cloud 和 Dubbo 这些微服务框架以及 RockeMQ 这类消息中间件非常了解,才能准确地找到各个框架的增强点进行定制化开发。


除此之外,业务方使用的微服务框架版本也是跨度很大,维护这些不同版本的微服务框架适配,也需要投入大量的精力。


最重要的一点是,使用开源 SDK 自建的方案,开发业务的同事,需要在应用的开发和部署运维的流程都感知到 SDK 的存在,对开发、构建、运维的侵入性很大,很难进行推广。


后来我们也找到了阿里集团负责中间件的同事寻求支持,了解到中间件团队已经推出了一款面向公有云的微服务治理产品 MSE,于是我们进行了调研。


MSE 作为公有云的微服务治理产品,具备云上的服务管控、微服务测试、标签路由、离群摘除、优雅上下线等能力,与我们的诉求完全吻合,并且通过 agent 方式实现,对应用代码无侵入,更适合 PaaS 平台对业务应用增加扩展。


1.png

图 1.1


经过与 MSE 团队同时的几次电话和会议沟通之后,逐渐对 MSE 产品有了一些功能上的认知。其中在微服务治理中,我们结合实际的业务需求,落地实现了下面 MSE 的部分能力。


2.png

图 1.2


落地场景


项目环境


在多分支开发的场景下,我们通常需要同时部署多个分支。但是多个分支同时部署之后,如何将开发自测流量与日常环境的测试流量分开,以及如何让各个分支拥有自己独立的流量,都是需要解决的问题。


  • 流量隔离
     

调研和验证 MSE 的标签路由的能力之后,实现思路:通过标签路由能力,将流量进行隔离。


相同应用的不同分支,使用不同的 deployment 实现对版本和容器标签的管理。图 2.1 中 core 应用项目环境 c1 和项目环境 c2 均使用独立于日常环境的容器单独部署,各自的路由标签为 joint1 和 joint2。通过对流量携带流量标记的方式,完成项目环境流量的控制。


接入层应用则通过 K8s-Ingress  实现流量路由,只需要在请求流量的请求头中携带 x-mse-tag的标签,则可以将流量路由到对应标签的入口层应用。入口应用设置标签传递的开发,可将流经此容器的流量打标传递到上有服务。如此反复,则实现流量在整个调用链路的封闭。


3.png

图 2.1


  • 服务测试
     

在研发过程中,除了分支之间的相互干扰需要隔离之外,还需要从业务侧研发的角度解决服务测试的效率问题。MSE 平台提供了微服务测试平台,可以快速的帮助开发者实现服务自测,并且我们通过集成方式集成到自身的 PaaS 平台中,免去自身重建的痛苦。


测试平台支持按照服务提供者 IP 的维度进行服务测试,刚好与流量隔离相互契合,可以对自身关注的项目环 境的应用容器发起服务测试完成服务自测。


4.png

图 2.2


灰度环境


灰度环境的目的是为了降低线上应用版本发布的风险,减小问题爆炸半径。同样可以通过 MSE 提供的标签路由功能基础上完成对流量灰度的实现。

image.gif

5.jpeg

图 2.3


想要流量实现灰度,那么需要对流量的所有入口实现流量路由。通常我们所感知的流量入口包括:HTTP 接入层、RPC 下游调用、MQ 服务消费、Task 任务调度。当前在 MSE 的灰度能力支持范围内,微服务云网关、金丝雀发布、MQ 灰度均可以组合实现。


当然,这里我们只实现了 HTTP 接入层+RPC 的灰度能力,因为历史的原因,在接入层使用了另一个接入层(MSHA 的 MSFE,本质上是一个 tengine)实现接入层的灰度。但这里丝毫不影响与 MSE 的灰度能力完成流量的串联,这得益于 MSE 产品自身拥有良好的对其他产品的兼容性。我们只需要在入口层的应用上设置流量经过此容器时带标,即可完成灰度流量的传递。

6.png

图 2.4


在实际的业务灰度场景中,我们总结了常见的四种灰度场景,均通过 MSE 完成并实现。


7.png

图 2.5


未来规划


在使用 MSE 的云产品之后,对 PaaS 平台层来说,避免很多重复功能的建设。在我们业务侧实际落地的远不止如上列举的场景,比如:服务优雅停机、注册中心等能力,均解决了业务侧的微服务治理上的难点问题。


在实现了对项目环境及灰度发布的能力开发之后,我们接下来对服务离群摘除、应用服务列表透出、服务鉴权、本地联调部署等能力做重点关注,在降低业务侧服务运维成本、微服务可观测、服务可用性方面与 MSE 团队加强合作,帮助业务侧解决微服务治理中的痛点。


MSE 注册配置中心专业版首购享 9 折优惠,MSE 云原生网关预付费全规格享 9 折优惠。点击此处,即享优惠!

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
2天前
|
监控 负载均衡 数据安全/隐私保护
探索微服务架构下的服务网格(Service Mesh)实践
【5月更文挑战第6天】 在现代软件工程的复杂多变的开发环境中,微服务架构已成为构建、部署和扩展应用的一种流行方式。随着微服务架构的普及,服务网格(Service Mesh)作为一种新兴技术范式,旨在提供一种透明且高效的方式来管理微服务间的通讯。本文将深入探讨服务网格的核心概念、它在微服务架构中的作用以及如何在实际项目中落地实施服务网格。通过剖析服务网格的关键组件及其与现有系统的协同工作方式,我们揭示了服务网格提高系统可观察性、安全性和可操作性的内在机制。此外,文章还将分享一些实践中的挑战和应对策略,为开发者和企业决策者提供实用的参考。
|
2天前
|
API 持续交付 开发者
构建高效微服务架构:策略与实践
【5月更文挑战第6天】随着现代软件系统的复杂性增加,微服务架构逐渐成为企业开发的首选模式。本文深入分析了构建高效微服务架构的关键策略,并提供了一套实践指南,帮助开发者在保证系统可伸缩性、灵活性和稳定性的前提下,优化后端服务的性能和可维护性。通过具体案例分析,本文将展示如何利用容器化、服务网格、API网关等技术手段,实现微服务的高可用和敏捷部署。
|
3天前
|
缓存 NoSQL Java
构建高性能微服务架构:Java后端的实践之路
【5月更文挑战第5天】在当今快速迭代和高并发需求的软件开发领域,微服务架构因其灵活性、可扩展性而受到青睐。本文将深入探讨如何在Java后端环境中构建一个高性能的微服务系统,涵盖关键的设计原则、常用的框架选择以及性能优化技巧。我们将重点讨论如何通过合理的服务划分、高效的数据存储策略、智能的缓存机制以及有效的负载均衡技术来提升整体系统的响应速度和处理能力。
|
3天前
|
监控 持续交付 数据库
构建高效可靠的微服务架构:策略与实践
【5月更文挑战第5天】 在当今快速发展的软件开发领域,微服务架构已成为构建可扩展、灵活且容错的系统的首选模式。本文将探讨如何通过一系列经过验证的策略和最佳实践来构建一个高效且可靠的微服务系统。我们将深入分析微服务设计的核心原则,包括服务的细粒度划分、通信机制、数据一致性以及容错处理,并讨论如何利用现代技术栈来实现这些目标。文章将提供一套综合指南,旨在帮助开发者和架构师在保证系统性能的同时,确保系统的稳健性。
23 4
|
4天前
|
消息中间件 Go API
Golang深入浅出之-Go语言中的微服务架构设计与实践
【5月更文挑战第4天】本文探讨了Go语言在微服务架构中的应用,强调了单一职责、标准化API、服务自治和容错设计等原则。同时,指出了过度拆分、服务通信复杂性、数据一致性和部署复杂性等常见问题,并提出了DDD拆分、使用成熟框架、事件驱动和配置管理与CI/CD的解决方案。文中还提供了使用Gin构建HTTP服务和gRPC进行服务间通信的示例。
20 0
|
8天前
|
消息中间件 监控 JavaScript
Node.js中的微服务架构:构建与实践
【4月更文挑战第30天】本文探讨了在Node.js中构建微服务的实践,包括定义服务边界、选择框架(如Express、Koa或NestJS)、设计RESTful API、实现服务间通信(HTTP、gRPC、消息队列)、错误处理、服务发现与负载均衡,以及监控和日志记录。微服务架构能提升应用的可伸缩性、灵活性和可维护性。
|
8天前
|
消息中间件 测试技术 API
构建高效微服务架构:从理论到实践
【4月更文挑战第30天】 随着现代软件开发的演进,微服务架构成为了企业追求敏捷、可扩展和容错性的关键解决方案。本文将深入探讨构建高效微服务架构的核心原则和策略,并通过一个实际案例来展示如何将这些理论应用于生产环境。我们将重点讨论服务的划分、通信机制、数据一致性以及持续集成与部署的实践,旨在为开发者提供一个清晰、可行的技术蓝图,以支持快速迭代和系统的稳健运行。
|
8天前
|
运维 监控 负载均衡
探索微服务架构下的服务网格(Service Mesh)实践之路
【4月更文挑战第30天】 在现代云计算的大背景下,微服务架构以其灵活性和可扩展性成为众多企业转型的首选。然而,随着服务的激增和网络交互的复杂化,传统的服务通信模式已无法满足需求,服务网格(Service Mesh)应运而生。本文通过分析服务网格的核心组件、运作机制以及在企业中的实际应用案例,探讨了服务网格在微服务架构中的关键作用及其带来的变革,同时提出了实施过程中面临的挑战和解决策略。
|
8天前
|
监控 Java 测试技术
现代化软件开发中的微服务架构设计与实践
随着软件开发的发展,传统的单体应用架构已经无法满足现代化应用的需求。微服务架构作为一种新的设计理念,为软件开发提供了更灵活、可扩展的解决方案。本文将介绍微服务架构的设计原则、实践方法以及相关技术工具,并结合实例展示其在现代化软件开发中的应用。
|
9天前
|
安全 Java 开发者
构建高效微服务架构:后端开发的新范式Java中的多线程并发编程实践
【4月更文挑战第29天】在数字化转型的浪潮中,微服务架构已成为软件开发的一大趋势。它通过解耦复杂系统、提升可伸缩性和促进敏捷开发来满足现代企业不断变化的业务需求。本文将深入探讨微服务的核心概念、设计原则以及如何利用最新的后端技术栈构建和部署高效的微服务架构。我们将分析微服务带来的挑战,包括服务治理、数据一致性和网络延迟问题,并讨论相应的解决方案。通过实际案例分析和最佳实践的分享,旨在为后端开发者提供一套实施微服务的全面指导。 【4月更文挑战第29天】在现代软件开发中,多线程技术是提高程序性能和响应能力的重要手段。本文通过介绍Java语言的多线程机制,探讨了如何有效地实现线程同步和通信,以及如