Skip to main content

Command Palette

Search for a command to run...

Segment 微服务反水案的一点思考

Updated
1 min read

2015 年底,Segment 博客刊登了一篇文章,Why Microservices Work For Us(下文简称为《Work》),三年多,又来了一篇更具话题性的新作:Goodbye Microservices: From 100s of problem children to 1 superstar(下文简称为《Bye》),两相比较,感觉还是有一定的代表性的,这里做一点整理和记录。

微服务的动机

《Work》中提到,主要是因为原有架构中,故障处理不力,需要有更快的诊断和处理方法,这里提到了两个途径:

  1. 问题的快速定位:借助更细致方便的监控指标,为突发事件提供明确指导。
  2. 问题的快速解决:在定位问题之后,能够更好的从源码中获得支持并解决问题。

要针对某个功能加入监控指标,在原有单体架构中可能会造成不必要的影响,范围不易控制;而源码方面,越小的服务,通常也代表着相对易读的代码;这两个主要需求都指向了同样的解决方案:微服务。

微服务带来的好处

将原有单体应用拆分为微服务之后,不但解决了监控和排错的问题,还带来了一些额外的好处:

  1. 隔离的消息队列,不同订阅互不干涉
  2. 隔离系统资源,如 CPU 和内存。
  3. 隔离网络,如 ELB。

这里只是原文中提到的好处,更多的照本宣科内容这里就不赘述了。

改造的隐忧

《Work》一文中提到了两次,新建微服务应该如何如何。作者似乎认为,微服务有必要更快的创建起来。但按照我的理解,微服务仅是通过进程隔离的强制手段使得模块之间的边界更加清晰,事实上,因为缺乏单体应用强大的上下文支持,同一系统内的不同微服务,往往会因为上下文问题,导致更加复杂的开发过程。

《Bye》一文中补充的拆分过程

  1. 单代码库阶段

    因为缺乏有效的时间说明,这一操作让人很迷惑,不知道是不是在《Work》发表的时候,各个服务还是在共用同一套代码。也在共用同一套测试方案。《Bye》中提到,一个失败的提交会导致整体测试失败,因此我们大致可以说,这一阶段里,CI/CD 过程也没能完成分割,个人认为,这种情况不太应该算作微服务。

  2. 多代码库阶段

    为微服务独立创建各自的代码库,并享用各自的测试组件。

  3. 共享库阶段

    我认为这一阶段呼应了前面的隐忧,在微服务落地之处,为了更快的建立微服务,开始出现了跨服务的共享代码库。

败局的开始

《Bye》的共享代码库一节,罗列了不少遇到的问题:

  1. 共享库版本出现碎片:因为工程需要,并不敢冒险同时更新的多个服务的共享代码,造成部分服务的共享代码滞后。
  2. 伸缩能力:微服务架构经常鼓吹的能力,在这里似乎被狠狠抽了一巴掌。

个人的一点分析

我眼中的微服务,务虚的角度上来说,有两个关键字:妥协,怀疑。

这里所说的妥协指的是,我们的系统是存活于一个非“理想状态”中的,不管是“拥抱变化”,还是“面向故障”,都是对不完美世界的具体应对方式。

而怀疑的设计态度,最简单的证据就是对隔离的强调,系统资源、数据的隔离都如此强调,我想,代码的隔离是不言自明的。

反观 Segement 的重构之路,(可能)在宣称微服务的时候,各个服务还躺在同一个仓库里,还在共享同样的测试过程。

在进行代码分离之后,又出现了两个不太容易理解的纰漏:

  • 暧昧的代码:前面提到,怀疑是微服务的基本态度,从《Bye》文中可以看到,他们在几十个服务之间共享了需要进行频繁重构的代码,抛开微服务和单体之争不谈,这个行为实在是无法理喻。
  • 暧昧的负载:在拆分之后,按照《Work》的说法,每个微服务都有了独立的队列和监控,由此推论,各个微服务的负载模型应该是比较容易做个描述的,很可惜的,这里称之为一种艺术。

回到单体之后

此处内容给人一种感觉:“今天是个好日子”。给我的感觉是,一些原本应该在微服务阶段完成的工作,甚至是在微服务阶段之前的单体阶段完成的工作,终于完成了——例如改进的测试方案,这能算是半渡而击么?

牢骚

流水账写到这里,有两个深刻的印象就是,这个团队从来没想过这些微服务是彼此独立的,也从来没把每个服务作为一个单独的交付物进行完善。从这个印象出发,回到单体形态,可以说是——得其所哉。

More from this blog

龙虾恐慌:AIOps 又要改名了?

ChatGPT 开始,把 AI 拉近到普罗大众的面前,让无数人感受到 AI 的亲民魅力。而龙虾,则把大模型驱动的自动化能力,突然间变得水灵灵、活泼泼地走进千家万户。它不只是“风口上的猪”,而是风口本身。热度高到让 Mac mini 一度断货,不知道这在不在库克的预料之内。 每代人都有每代人的鸡蛋,春节期间,我就领了我的鸡蛋。翻出古老的 MacBook Air M1,充值各种大模型。当然了,这个工具

Mar 9, 20261 min read

再见 2025

我猜不少人以为这个号废了吧?并没有,只是今年变化有点大,一直有种抄起键盘,无从说起的感觉,所以一直偷懒到今天,2025 的最后一天。 今年是我的第四个本命年,去年末一期播客里,大内说本命年不是灾年,是变化年,有危也有机。可是讲真啊,只看到危,没看到机。 各种因缘际会,从鹅厂跳槽到前东家,已经接近四年,第一个合同期已经进入尾声。除了前两年还在云原生领域嗷嗷叫,后两年基本都是些鸡零狗碎的东西了,用老东家的术语说是——偏离主航道,可谓是前景暗淡了。 一旦确定要滚蛋,反倒心思轻松起来,每天骑着我的小红车...

Jan 5, 20261 min read

辅助编程?dora 说:我知道你很急可是请你别急

从 OpenGPT 把大模型的火烧旺了之后,这三年来,相信很多组织或摩拳擦掌、或躬身入局,希望借助聪明能干的大模型,或想偿还技术宅,或想降本增效,或想弯道超车。一时间,沉寂许久的 AIxx 又活过来了,LLM Ops、Vibe Coding、中医大模型、GPT 算命等等,全都老树发新芽,焕发了勃勃生机。那么视角拉回从业者最关注的饭碗相关的领域之一——AI 辅助开发,产生了什么触动,应该如何拥抱呢? DORA 的年度报告中给出了很有意思的结论——强者恒强。 执行摘要部分总结了几个有趣的点: 问题...

Oct 6, 20251 min read

[译]dora:ai 辅助软件开发状态报告

执行摘要 在 2025 年,科技领导者面临的核心问题已不再是“是否要采用 AI”,而是“如何实现其价值”。 DORA 的研究基于超过 100 小时的定性访谈和来自全球近 5,000 名技术专业人士的问卷调查。研究揭示了一个关键事实:AI 在软件开发中的主要角色是“放大器”。它会放大高效能组织的优势,也会凸显组织的缺陷。 关键结论:AI 是放大器 AI 投资的最大回报并非来自工具本身,而是来自组织底层系统的战略性建设: 高质量的内部平台 清晰的工作流 团队的协同能力 缺少这些基础,AI ...

Oct 2, 202514 min read

僭越了,有人在用 Rust 写 Kubernetes

一个新语言问世,最爱做的事情之一,就是重写存量软件了。 云原生喝酒 SIG 重点扶持项目——rk8s(https://github.com/rk8s-dev/rk8s) 也可以归在这个范畴里,只不过这个项目重写的东西比较大,是 Kubernetes。 从 2025 年 1 月第一个 Commit 开始,到现在有了 200 多次 Commit,十几万行代码。当然距离 Kubernetes 的几百万行代码还差得远——老马就是喜欢整这种大无畏项目。 另外该项目也是国内第一个脱离 Cargo 转向使用 ...

Sep 27, 20253 min read

【伪】架构师

342 posts