菜鸟 CPaaS 平台微服务治理实践
简介: 在使用 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.1
经过与 MSE 团队同时的几次电话和会议沟通之后,逐渐对 MSE 产品有了一些功能上的认知。其中在微服务治理中,我们结合实际的业务需求,落地实现了下面 MSE 的部分能力。
图 1.2
落地场景
项目环境
在多分支开发的场景下,我们通常需要同时部署多个分支。但是多个分支同时部署之后,如何将开发自测流量与日常环境的测试流量分开,以及如何让各个分支拥有自己独立的流量,都是需要解决的问题。
- 流量隔离
调研和验证 MSE 的标签路由的能力之后,实现思路:通过标签路由能力,将流量进行隔离。
相同应用的不同分支,使用不同的 deployment 实现对版本和容器标签的管理。图 2.1 中 core 应用项目环境 c1 和项目环境 c2 均使用独立于日常环境的容器单独部署,各自的路由标签为 joint1 和 joint2。通过对流量携带流量标记的方式,完成项目环境流量的控制。
接入层应用则通过 K8s-Ingress 实现流量路由,只需要在请求流量的请求头中携带 x-mse-tag的标签,则可以将流量路由到对应标签的入口层应用。入口应用设置标签传递的开发,可将流经此容器的流量打标传递到上有服务。如此反复,则实现流量在整个调用链路的封闭。
图 2.1
- 服务测试
在研发过程中,除了分支之间的相互干扰需要隔离之外,还需要从业务侧研发的角度解决服务测试的效率问题。MSE 平台提供了微服务测试平台,可以快速的帮助开发者实现服务自测,并且我们通过集成方式集成到自身的 PaaS 平台中,免去自身重建的痛苦。
测试平台支持按照服务提供者 IP 的维度进行服务测试,刚好与流量隔离相互契合,可以对自身关注的项目环 境的应用容器发起服务测试完成服务自测。
图 2.2
灰度环境
灰度环境的目的是为了降低线上应用版本发布的风险,减小问题爆炸半径。同样可以通过 MSE 提供的标签路由功能基础上完成对流量灰度的实现。
图 2.3
想要流量实现灰度,那么需要对流量的所有入口实现流量路由。通常我们所感知的流量入口包括:HTTP 接入层、RPC 下游调用、MQ 服务消费、Task 任务调度。当前在 MSE 的灰度能力支持范围内,微服务云网关、金丝雀发布、MQ 灰度均可以组合实现。
当然,这里我们只实现了 HTTP 接入层+RPC 的灰度能力,因为历史的原因,在接入层使用了另一个接入层(MSHA 的 MSFE,本质上是一个 tengine)实现接入层的灰度。但这里丝毫不影响与 MSE 的灰度能力完成流量的串联,这得益于 MSE 产品自身拥有良好的对其他产品的兼容性。我们只需要在入口层的应用上设置流量经过此容器时带标,即可完成灰度流量的传递。
图 2.4
在实际的业务灰度场景中,我们总结了常见的四种灰度场景,均通过 MSE 完成并实现。
图 2.5
未来规划
在使用 MSE 的云产品之后,对 PaaS 平台层来说,避免很多重复功能的建设。在我们业务侧实际落地的远不止如上列举的场景,比如:服务优雅停机、注册中心等能力,均解决了业务侧的微服务治理上的难点问题。
在实现了对项目环境及灰度发布的能力开发之后,我们接下来对服务离群摘除、应用服务列表透出、服务鉴权、本地联调部署等能力做重点关注,在降低业务侧服务运维成本、微服务可观测、服务可用性方面与 MSE 团队加强合作,帮助业务侧解决微服务治理中的痛点。
MSE 注册配置中心专业版首购享 9 折优惠,MSE 云原生网关预付费全规格享 9 折优惠。点击此处,即享优惠!
菜鸟 CPaaS 平台微服务治理实践的更多相关文章
- 微服务治理平台的RPC方案实现
导读:本文主要探讨了rpc框架在微服务化中所处的位置,需要解决的问题.同时介绍了用友云微服务治理平台的rpc解决方案,为什么选择该方案.该方案提供的好处是什么.同时也会介绍用友RPC框架的基本结构以及 ...
- 基于 Docker 的微服务架构实践
本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...
- 微服务架构实践 - 你只懂docker与spring boot就够了吗?
微服务架构实践 - 你只懂docker与spring boot就够了吗? 作者 浮云发发 已关注 2017.02.27 02:50* 字数 2613 阅读 2583评论 6喜欢 35赞赏 2 微服务并 ...
- 美团张志桐:美团 HTTP 服务治理实践
2019 年 7 月 6 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·上海站,美团基础架构部技术专家张志桐在活动上做了<美团 HTTP ...
- python3和grpc的微服务探索实践
对于微服务的实践,一般都是基于Java和Golang的,博主最近研究了下基于Python的微服务实践,现在通过一个简单的服务来分析Python技术栈的微服务实践 技术栈:Python3 + grpc ...
- Java生鲜电商平台-微服务入门与服务的拆分架构实战
Java生鲜电商平台-微服务入门与服务的拆分架构实战 刚开始进入软件行业时还是单体应用的时代,前后端分离的概念都还没普及,开发的时候需要花大量的时间在“强大”的JSP上面,那时候SOA已经算是新技术了 ...
- 闲聊 “今日头条Go建千亿级微服务的实践”
背景 今天跟同事偶然看到<今日头条Go建千亿级微服务的实践>文章,故做了一些探讨,与大家分享下,也欢迎大家多多共同探讨!. 其他资料: 如何理解 Golang 中“不 ...
- NET平台微服务
.NET平台微服务项目汇集 最近博客园出现了一篇文章<微服务时代之2017年五军之战:Net PHP谁先死>,掀起了一波撕逼,作者只是从一个使用者的角度来指点江山,这个姿势是不对的.. ...
- NET Core 2.0 微服务跨平台实践
NET Core 2.0 微服务跨平台实践 相关博文: Ubuntu 简单安装 Docker Mac OS.Ubuntu 安装及使用 Consul Consul 服务注册与服务发现 Fabio 安装和 ...
- 今日头条Go建千亿级微服务的实践
今日头条Go建千亿级微服务的实践_36氪 http://36kr.com/p/5073181.html
随机推荐
- 如何在forEach内使用异步调用 async/await
翻自: How to use async and await in a forEach JS loop? https://learn.coderslang.com/0144-how-to-use-as ...
- Qt HTTP网络相关GET,POST(HTTP 模拟POST 表单(multipartform)最简单和正式的方法)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- PostgreSQL与Java JDBC数据类型对照 源码
文件:postgresql-42.2.12.jar 类名:org.postgresql.jdbc.TypeInfoCache // basic pg types info: // 0 - type n ...
- 使用MFT进行加密文件传输的7个好处
至少,托管文件传输(MFT)解决方案是一种产品,它包含入站和出站文件传输的所有方面,同时使用行业标准的网络协议和无缝加密.它可以从单个集中管理点在您的网络,系统,应用程序,贸易伙伴和云环境中自动化和传 ...
- 正则表达式环视匹配(?=pattern)、(?!pattern)、(?<=pattern)、(?<!pattern)怎么用
今天在处理数据的时候遇到一个,需要用正则表达式匹配不包含某字符的字符串的问题,用到否定匹配,现总结如下: 一个正则小知识 ↓ []:表示范围,匹配其中任何一个 {}:表示重复匹配多次. ():表示分组 ...
- 'scanf': This function or variable may be unsafe
'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable depreca ...
- USACO 4.1
目录 洛谷 2737 麦香牛块 分析 代码 洛谷 2738 篱笆回路 分析 代码 麦香牛块洛谷传送门,麦香牛块USACO传送门,篱笆回路洛谷传送门,篱笆回路USACO传送门 洛谷 2737 麦香牛块 ...
- #二分,负环#JZOJ 3852 单词接龙
题目 只要一个单词的最后两个字母和另一个单词的前两个字母相同,那么这两个单词就可以有序的连接起来.给出\(n\)个单词组成单词环,求所有环的环中单词平均长度最大值. 分析 二分答案,判断是否存在正环( ...
- #容斥,搜索,线性筛#CF83D Numbers
洛谷 CF83D 分析 题意就是\(\sum_{i=l}^r[k|i]*[mn[\frac{i}{k}]\geq k]\) 首先线性筛每个数的最小质因数,如果\(\frac{r}{k}\)较小直接暴力 ...
- 使用OHOS SDK构建libpng
参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone --depth=1 https://github.com/glennrp/libp ...