2025年十二月月 发布的文章

再见了,微服务:从 100 多个“问题儿童”到 1 个“超级巨星”的架构回归

本文永久链接 – https://tonybai.com/2025/12/19/twilio-say-goodbye-microservices

大家好,我是Tony Bai。

“微服务”——这个在过去十年间统治了软件架构领域的“最佳实践”,承诺给我们带来更高的模块化、更快的迭代速度和更强的团队自治。然而,当一个团队,深陷于 140 多个服务、140 多个代码仓库、140 多个独立队列的泥潭中,开发速度骤降、缺陷率爆炸、on-call 工程师夜不能寐时,这个“最佳实践”是否已然变成了一个“最大负担”?

这不是一个假设,而是 Twilio Segment 团队曾亲身经历的“噩梦”。

这篇文章,正是对他们那场史诗般的架构“大迁徙”的复盘:一次勇敢的、从微服务“树”的每个痛苦枝桠上坠落,最终回归单体架构“坚实地面”的旅程。这也是一个关于技术选型、规模化陷阱和工程务实主义的真实故事。

img{512x368}

微服务的“蜜月期”——它曾解决了真实的问题

故事的开端,微服务确实是“英雄”。Twilio Segment 的核心业务是每秒接收数十万个事件,并将它们分发到上百个不同的下游目标(如 Google Analytics, Mixpanel 等)。

最初的单队列架构,很快就遇到了“队头阻塞” (Head-of-Line Blocking) 的问题:只要一个下游目标(例如 Mixpanel)出现故障或变慢,它的重试事件就会堵塞整个队列,导致所有其他正常目标的事件分发都被延迟。

为了解决这个问题,团队自然而然地拥抱了微服务:为每个下游目标创建一个独立的服务、一个独立的队列和一个独立的 repo

这个方案在当时是完美的:

  • 故障隔离:一个目标的故障,再也不会影响其他目标。
  • 独立部署:团队可以独立地维护和部署每个目标的服务。
  • 测试隔离:每个 repo 有自己独立的测试套件,互不干扰。

在最初的阶段,微服务架构确实为团队带来了更高的稳定性和开发速度。

规模化的“噩梦”——当“收益”变成“税收”

然而,随着下游目标的数量从几十个增长到超过 140 个,当初的“收益”逐渐变成了无法承受的“税收”。

共享库的“版本地狱”

为了避免在 140 多个 repo 中重复造轮子,团队创建了共享库来处理通用逻辑(如事件转换、HTTP 请求处理)。但这很快就演变成了一场灾难:
* 更新成本巨大:修改一个共享库,理论上意味着需要测试并重新部署 140 多个服务。这是一个极其耗时且风险巨大的操作。
* 版本分歧:为了图方便,工程师们往往只在当前需要改动的服务中更新共享库版本。久而久之,不同服务依赖的共享库版本开始严重分歧,曾经的“统一性”优势荡然无存。

运维的“线性增长”

每增加一个新的下游目标,就意味着:
* 一个新的服务
* 一个新的代码仓库
* 一个新的消息队列
* 一套新的 CPU/内存资源配置
* 一套新的告警和监控

“我们的运维开销,随着每个目标的增加而线性增长。on-call 工程师因为某个小流量目标的负载尖峰而被半夜叫醒,已是家常便饭。”

开发速度的“断崖式下跌”

独立的 repo 曾被认为是优点,但它也导致了测试条件的恶化。由于修复另一个 repo 中不相关的失败测试很麻烦,团队逐渐对失败的测试变得麻木。这导致了技术债的快速累积。

“一个本应一两个小时就能完成的小改动,最终往往需要花费数天甚至一周的时间来完成。”

团队发现,他们已经无法取得任何进展,3 个全职工程师的大部分时间,都花在了“维持系统不死”上。微服务,这个曾经的“解放者”,如今已变成了一个由 100 多个“问题儿童”组成的、难以管理的“泥潭”。

“大迁徙”——回归单体,拥抱 Monorepo

在痛苦的临界点,团队做出了一个在当时看来“离经叛道”的决定:放弃微服务,回归单体

第一步:合并队列 -> Centrifuge

首先,他们构建了一个名为 Centrifuge 的新组件,来取代 140 多个独立的队列。Centrifuge 作为一个统一的事件中心,负责接收所有事件,并将其智能地分发到一个单一的、统一的目标服务中。

第二步:合并代码 -> Monorepo

既然只有一个服务,那么将 140 多个 repo 合并成一个 Monorepo 就成了顺理成章的选择。这个过程是痛苦的,团队需要解决 120 多个不同依赖的版本冲突,并致力于让所有目标都使用统一的、最新的依赖版本

第三步:构建“坚如磐石”的测试套件

独立的、频繁失败的测试,是他们当初走向微服务的诱因。为了避免重蹈覆辙,团队构建了一个极其健壮的测试套件。他们创建了一个名为 Traffic Recorder 的工具,它能录制并回放所有测试中的出站 HTTP 请求。

这意味着,测试不再依赖于缓慢且不稳定的真实外部网络。

“在集成了 Traffic Recorder 之后,运行全部 140 多个目标的测试,从过去的一个小时,缩短到了几毫秒。这感觉就像魔法。”

单体的“超级巨星”时刻

回归单体和 Monorepo 之后,团队的生产力得到了戏剧性的提升:

  • 部署效率:过去,对共享库的一次改动,可能需要部署 140 多个服务。现在,一个工程师在几分钟内就能完成整个服务的部署
  • 开发速度:在微服务架构下,团队一年内对共享库进行了 32 次改进。回归单体一年后,他们完成了 46 次改进。
  • 运维简化:现在只有一个服务需要扩展和监控。一个巨大的统一 worker 池,可以轻松地吸收来自任何目标的负载尖峰,on-call 工程师终于可以睡个好觉了。

小结:没有“最佳实践”,只有“恰当实践”

当然,单体架构并非没有缺点。文章坦诚地指出了其固有的权衡:故障隔离更难(一个 Bug 可能导致整个服务崩溃),内存缓存效率更低

但 Twilio Segment 的故事,为我们提供了一个关于软件架构的、极其宝贵的教训:

世界上没有普适的“最佳实践”,只有在特定上下文中最“恰如其分”的实践。

微服务在解决他们最初的“队头阻塞”问题时,是正确的。但随着业务的规模化和团队的演进,它又变成了错误的答案。

这个故事提醒我们,要对任何流行的架构趋势保持一份健康的怀疑。在拥抱微服务之前,请先问问自己:我面临的,真的是一个只有微服务才能解决的、组织规模化的问题吗?还是说,一个设计良好的单体(或者叫“宏服务”),才是当前阶段更简单、更高效、也更务实的选择?

有时候,最勇敢的架构决策,不是追随潮流,而是逆流而上。

资料链接:https://www.twilio.com/en-us/blog/developers/best-practices/goodbye-microservices

注:Twilio是一家云计算公司,专注于提供短信,语音以及Email的API通讯接口。


还在为“复制粘贴喂AI”而烦恼?我的新专栏 AI原生开发工作流实战 将带你:

  • 告别低效,重塑开发范式
  • 驾驭AI Agent(Claude Code),实现工作流自动化
  • 从“AI使用者”进化为规范驱动开发的“工作流指挥家”

扫描下方二维码,开启你的AI原生开发之旅。


你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?

  • 想写出更地道、更健壮的Go代码,却总在细节上踩坑?
  • 渴望提升软件设计能力,驾驭复杂Go项目却缺乏章法?
  • 想打造生产级的Go服务,却在工程化实践中屡屡受挫?

继《Go语言第一课》后,我的《Go语言进阶课》终于在极客时间与大家见面了!

我的全新极客时间专栏 《Tony Bai·Go语言进阶课》就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。

目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

继 MCP 之后,Anthropic 再放大招:Agent Skills 正式发布为开放标准!

本文永久链接 – https://tonybai.com/2025/12/19/anthropic-agent-skills-open-standard-launch

大家好,我是Tony Bai。

就在刚刚(美国时间2025年12月18日),Anthropic 正式宣布将 Agent Skills 发布为开放标准。

这是继2024年末推出 MCP (Model Context Protocol)标准 之后,Anthropic 在构建 AI 开放生态上的又一记重拳,彻底补齐了 AI 原生应用的“能力层”拼图。

如果说 MCP 是 AI 时代的 “USB 接口”,解决了大模型连接外部工具与数据(如 GitHub, Google Drive)的标准化问题;

那么 Agent Skills 就是 AI 时代的 “通用驱动程序”,它定义了 AI 该如何使用这些工具来完成复杂的业务流程。

OpenCode, Cursor, Letta 等头部开发工具已率先宣布支持。这意味着,开发者编写一套 Skill,就可以在所有支持该标准的 AI 平台(Claude, Cursor 等)上无缝运行。

AI 开发终于告别了“手搓 Prompt”的草莽时代,进入了“标准化封装”的工业时代。

什么是 Agent Skill?

简单来说,Skill 就是一个可移植的“能力包”

在物理形态上,它就是一个文件夹,里面包含了让 AI 完成特定任务所需的指令(SKILL.md)、脚本(Scripts)和资源(Resources)

你可以把它想象成给 AI 安装的一个“APP”“岗位 SOP”

根据 agentskills.io 的官方规范,Skill 拥有一个极具工程价值的特性:渐进式披露 (Progressive Disclosure)

  • Metadata First: 系统只需加载约 100 tokens 的元数据,让 AI 知道“我学会了/拥有什么技能”。
  • On-Demand Loading: 只有当 AI 真正决定使用该技能时,才会加载完整的指令(<5k tokens)和相关脚本。

这意味着你可以给一个 Agent 装备 1000 个技能(从写 SQL 到 查财报),但平时只占用极少的上下文(Context),只有在干活时才调用相关记忆。这完美解决了长期以来困扰开发者的Token 浪费上下文干扰问题。

开发者最关心的 3 个问题

在研究了 Anthropic 的技术文档后,我整理了开发者最容易混淆的几个概念:

Q1: Skill 和 Prompt 有什么区别?

  • Prompt (提示词):反应式的、一次性的。比如“帮我润色这段代码”。它通常不跨会话持久化。
  • Skill (技能):主动式的、持久化的。比如“公司 Java 编码规范与 CR 指南”。一旦安装,AI 在任何对话中都知道应当遵守这套规范。

Q2: Skill 和 MCP 到底怎么分工?(关键)

这是一个经典的“硬件 vs 软件”的关系。

  • MCP (连接层): 它是管道。它让 Claude等大模型 能“连上”你的 PostgreSQL 数据库等。它解决的是“能不能访问”的问题。
  • Skill (能力层): 它是逻辑。它教 Claude等大模型 “在查询这个数据库时,必须先检查权限,且不能使用 SELECT *”。它解决的是“做得对不对”的问题。
  • 最佳实践: 用 MCP 建立连接,用 Skill 定义流程。

Q3: 我该如何开始?

Skill 的格式非常简单且开放。你只需要创建一个包含 SKILL.md 的目录。

---
name: code-review
description: Analyze code based on OWASP top 10 standards.
---
# Instructions
1. Check for SQL injection...

这种“以文档定义能力”的轻量级模式,正是 SDD (Spec-Driven Development) 理念的极致体现。

意义:生态闭环已成

随着 Agent Skills 的发布,AI 原生应用的架构分层终于清晰了。我们可以用一张图来看懂这个全新的生态栈:

对于开发者而言,“Prompt Engineering”正在消亡,而“Skill Engineering”正在兴起。

未来的高价值开发者,不再是那些会写漂亮提示词的人,而是那些能将企业隐性知识(Tacit Knowledge),封装成标准化的、可移植的 Agent Skills 的人。

如何集成?

Anthropic 提供了三种极简的集成路径:

  1. Claude Apps 用户: 直接在 Settings > Capabilities > Skills 中浏览目录并启用(类似安装 Chrome 插件)。
  2. Claude Code 用户: 将 Skill 文件夹放入项目目录,或从插件市场安装。
  3. API 开发者: 通过 /v1/skills 端点动态挂载技能。

深度实战:编写你的第一个 Agent Skill

标准已经发布,工具已经就绪。现在的问题是:你如何编写出让 AI 精准执行、不产生幻觉的 Skill 文档?

在我的极客时间专栏《AI 原生开发工作流实战》中,我已第一时间更新关于 Agent Skills 的实战内容。

我们将深入剖析 agentskills.io 的官方规范,并带你进行硬核实战:

  • 深度拆解官方 Skill: 分析标准 Skill 的目录结构与元数据设计技巧。
  • Go 代码 Review Skill 实战: 手把手编写一个专用于 Go 语言项目的 Code Review Skill,定义从 Lint 检查到逻辑验证的完整 SOP,并将其部署到开发环境中。

让你亲身体验从“指挥 AI(Prompting)”“配置 AI(Configuring)”的质变。

别让你的 AI 只有“蛮力”,给它安装“驱动”。扫描下方卡片,跟上 AI 工程化的最新浪潮。


你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?

  • 想写出更地道、更健壮的Go代码,却总在细节上踩坑?
  • 渴望提升软件设计能力,驾驭复杂Go项目却缺乏章法?
  • 想打造生产级的Go服务,却在工程化实践中屡屡受挫?

继《Go语言第一课》后,我的《Go语言进阶课》终于在极客时间与大家见面了!

我的全新极客时间专栏 《Tony Bai·Go语言进阶课》就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。

目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言进阶课 AI原生开发工作流实战 Go语言精进之路1 Go语言精进之路2 Go语言第一课 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats