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

背景

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 团队加强合作,帮助业务侧解决微服务治理中的痛点。

作者:竹达 赵宇

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ 消息集成:多类型业务消息-普通消息

引言 Apache RocketMQ 诞生至今,历经十余年大规模业务稳定性打磨,服务了 100% 阿里集团内部业务以及阿里云数以万计的企业客户。作为金融级可靠的业务消息方案,RocketMQ 从创建之初就一直专注于业务集成领域的异步通信能力构建。本篇将从业务…

【总结】字符串匹配: KMP 和 拓展KMP

比起ac自动机,kmp就一个next数组,理解了如何初始化next后就可以搞一些模板题了,下面是还不错的学习资料,清晰易懂,自己用的模板也来自它: http://chaoswork.com/blog/2011/06/14/kmp%E7%AE%97%E6%B3%95%E5%B0%8F%E7%BB%93/ kmp模板 next[0]-1;j-1; for(i0;i<m;) {while(j>…

排序算法总结与C代码

最近参加笔试&#xff0c;感觉排序算法需要好好的整理一下&#xff0c;感觉部分排序算法理解得不是很清楚&#xff1b;通过这段时间的整理与总结来对排序算法的一个复习吧。 主要参考了《大话数据结构》&#xff1a; 1. 冒泡排序的基本思想&#xff1a;两两比较相邻记录的关键字…

最小生成树(普利姆算法、克鲁斯卡尔算法)

给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树. 求最小生成树的算法 (1) 克鲁斯卡尔算法 图的存贮结构采用边集数组,且权值相等的边在数组中排列次序可以是任意的.该方法对于边相对比较多的不是很实用,浪费时间. (2) 普里姆算法 图…

《数字化与碳中和(园区篇)》报告正式发布,助力加快推进国家“双碳”战略实施

2021年10月&#xff0c;国务院印发《2030年前碳达峰行动方案》&#xff0c;明确提出要建设绿色低碳园区&#xff0c;并选择100个具有典型代表性的城市和园区开展碳达峰试点建设&#xff0c;在政策、资金、技术等方面对试点城市和园区给予支持。此后&#xff0c;碳达峰、碳中和正…

基于开放共享的自主研发—MaxCompute 持续增强生态与开放性建设

MaxCompute产品与生态架构 MaxCompute是一个具有先进架构的Serverless云数据仓库&#xff0c;自从商业化后&#xff0c;使用的用户涉及各个行业的头部客户。在生态上需要支持主流的开源产品以及阿里云云产品。其主要包括以下几个方面&#xff1a; 数据接入生态。目前官方提供…

还是畅通工程(思想+代码)

Description 某省调查乡村交通状况&#xff0c;得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通&#xff08;但不一定有直接的公路相连&#xff0c;只要能间接通过公路可达即可&#xff09;&#xff0c;并要求铺设…

构建数据中台的组织架构

一、中台是一种企业架构 1.TOGAF企业架构标准 TOGAF是一套企业架构标准。企业架构是指整个公司或企业的软件和其他技术的整体观点和方法。企业架构又细分为业务架构、应用架构、数据架构、技术架构几个方向。 其中业务架构的定义是“定义业务战略和组织&#xff0c;关键业务…

源于加速,不止加速——10年沉淀,破局改变

20余年技术&#xff0c;面临破局。CDN(Content Delivery Network&#xff0c;内容分发网络) 是一个超大规模的分布式系统&#xff0c;为互联网各类App和Web站点提供动 / 静态内容、实时流媒体加速以及网络安全防护等能力。在线购物、直播、音乐、游戏、社交等等一切&#xff0c…

C++注释符问题

#include<iostream>using namespace std;int main(){std::cout<<"/*";std::cout<<"*/";std::cout<</*"*/"*/;std::cout<</*"*/"/*"/*"*/;return 0;} 运行出错&#xff0c;第二行无法识别[Wa…

5分钟让你在大火的多模态领域权威榜单VQA上超越人类

ModelScope上开源了达摩院众多业界最强多模态模型&#xff0c;其中就有首超人类的多模态预训练视觉问答模型mPLUG&#xff0c;小编激动的搓搓小手&#xff0c;迫不及待的体验了一下。 一探&#xff1a;浅草才能没马蹄 市面上有好多号称“用户上手简单”&#xff0c;“一步到位…

表达式类型出错

#include<iostream>using namespace std;int main(){int a-1;unsigned b1;cout<<a*b<<endl;return 0;} 编译结果为一个随机数&#xff0c;因为a&#xff0c;b分别为带符号类型和无符号型整数。

私有化输出的服务网格我们是这样做的

介绍 微服务开发的问题 微服务架构下我们在开发中遇到的常见的问题有以下 4 个&#xff1a; 多语言问题&#xff1a;有多种编程语言&#xff0c;node.js, JAVA, GoLang…微服务需要为每种语言都维护一种中间件 SDK升级推动难&#xff1a;SDK 升级需要推动业务应用进行代码修…

技术解读:Dragonfly 基于 P2P 的智能镜像加速系统

背景 网络下载 提起网络下载领域&#xff0c;你应该首先会想到基于 TCP/IP 协议簇的 C/S 模式。这种模式希望每一个客户机都与服务器建立 TCP 连接&#xff0c;服务器轮询监听 TCP 连接并依次响应&#xff0c;如下图&#xff1a; 上世纪末期&#xff0c;基于 C/S 模式的思想&…

多行书写的字符串字面值

#include<iostream>using namespace std;int main(){cout<<"Hello Word!""Best Coder!"<<endl;return 0;}

c++中值得初始化

代码中四种初始化&#xff0c;a中都为0 #include<iostream> using namespace std;int main(){int a0;cout<<a<<endl;int a1{0};cout<<a1<<endl;int a2{0};cout<<a2<<endl;int a3(0);cout<<a3<<endl;return 0;}

Kruise Rollout:灵活可插拔的渐进式发布框架

前言 Kruise Rollout 是 OpenKruise 社区开源的渐进式交付框架。Kruise Rollout 支持配合流量和实例灰度的金丝雀发布、蓝绿发布、A/B Testing 发布&#xff0c;以及发布过程能够基于 Prometheus Metrics 指标自动化分批与暂停&#xff0c;并提供旁路的无感对接、兼容已有的多…

最小生成树的Prime算法的思想

Prime算法的核心步骤是&#xff1a;在带权连通图中V是包含所有顶点的集合&#xff0c; U已经在最小生成树中的节点&#xff0c;从图中任意某一顶点v开始&#xff0c;此时集合U{v}&#xff0c;重复执行下述操作&#xff1a;在所有u∈U,w∈V-U的边(u,w)∈E中找到一条权值最小的边…

c++引用“”

常见的是“左值引用”在c11中新增了“右值引用” 引用&#xff1a;为对象起另外一个名字&#xff0c;引用类型引用另外一种类型。通过声明符写成&d的形式来定义引用类型&#xff0c;其中d是引用类型名。 例如&#xff1a; int a1024; int &ba;//那么b就等于a的值了…

一线技术人应该关注的四种思维能力

引言 作为长期奋战在一线的技术人&#xff0c;我深刻体会到如下几个思维能力对技术人成长的重要性&#xff0c;熟练运用这几种思维可以帮助我们快速的进入到新的领域&#xff0c;在分析、定位和解决问题上有很大帮助。 抽象思维&#xff1a;帮助我们快速抽取面对问题的关键要素…