「InfoQ」放弃微服务,改用宏服务,Uber 这波什么操作?


「InfoQ」放弃微服务,改用宏服务,Uber 这波什么操作?
本文插图

作者丨田晓旭
Uber 支付体验平台放弃了微服务 , 转而使用了宏服务 , 这一消息在网友中引起了热议 。 一向是微服务积极分子的 Uber 为什么突然改用宏服务了?以“简单”著称的微服务为什么又变得难以维护了呢?
1 Uber 支付团队放弃微服务 , 转用宏服务
4 月 6 日 , Uber 支付体验平台的工程经理 Gergely Orosz 发布推文表示其团队的架构方向已经发生了变化 , 放弃微服务 , 转而使用宏服务 。
「InfoQ」放弃微服务,改用宏服务,Uber 这波什么操作?
本文插图

为什么会做出这样的选择呢?Gergely Orosz 表示:“最早 , Uber 通过构建微服务来完成很小的需求或功能 , 以至于出现了很多由一个人构建维护的微服务 。 这些微服务的存在给我们带来了新的复杂性和挑战 , 例如监控、测试、持续集成 / 持续交付(CI/CD)、服务级别协议(SLA)、跨所有微服务的库版本(安全和时区问题)等等 。 ”
因此 , 在创建新平台的时候 , Uber 支付体验团队对新服务进行了更加深思熟虑的规划:不再只是完成一件事 , 而是使其服务于一项业务功能 , 由 5-10 个工程师负责维护 。 Gergely Orosz 把这样的服务规划称之为宏服务 。
为什么一向以简单著称的微服务 , 在 Uber 的实践中突然就变得难以维护了呢?我们先来看一下微服务到底“微”的是什么呢?
2 微服务到底“微”的是什么?
微服务是什么?百度百科给出的解释是:“微服务是一个新兴的软件架构 , 就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务 。 ”其中 , 最关键的部分是开发者要能够对服务中的某些部分进行衡量 , 并将其对应价值控制在最低水平 。
那么 , 微服务到底“微”的是什么?
微团队微服务首先“微”的就是服务开发团队的规模 , 而且它有一个很特别的衡量单位——“披萨” 。 亚马逊 CEO Jeff Bezos 提出了著名的两个披萨原则 , 即每一个内部团队的规模必须足够小 , 小到两个披萨饼就可以喂饱整个团队 。
两个披萨团队真的有效吗?有人认可 , 但也有人质疑 , 有网友曾吐槽:“这种说法一看就很假 , 我手下有不少只需要一个披萨的团队 , 但他们做出来的东西仍然是一团乱麻 。 ”
微代码库
微服务 , “微”的也可能是代码库 , 有人甚至会将“微代码库”这个概念发挥到极致 , 限制某项服务中所包含的代码行数 。
代码库小当然有好处 , 代码库越小 , 对应的业务范围就越小 , 越易于理解、实施和开发 , 同时引发大失误的概率低 , 而且出现失误时 , 重构的难度也更低 。
但是大家真的认可代码库这种硬性指标吗?如果认可的话 , 那么我们把范围缩小到每行代码包含多少个字符 , 岂不是更好?
我们可以通过很多种方式来定义服务边界 , 代码库大小绝对是其中最低效的一种 。 —— Nick Tune
“微系统”
事实上 , 微团队和微代码库都是“微服务”的理想化产物 , 大家似乎忘记了系统才是最关键的部分 , 系统是服务的容身之所 。
【「InfoQ」放弃微服务,改用宏服务,Uber 这波什么操作?】我们真正需要构建的是系统 , 而不是一组服务 。 我们使用微服务的目的在于优化系统设计 , 而不是单纯设计一个个独立服务 。 事实上 , 我们很难使用真正独立的组件建立起庞大的系统 , 因为这在本质上违背了“系统”的核心定义:
一组相互联系的事物或设备 , 它们能够共同运作;
一组共同用于特定目标的计算机设备及程序;
彼此交互的服务才能建立起系统 , 如果只优化系统中的服务 , 而忽略服务间的交互 , 就会出现下图的情况:


推荐阅读