本文永久链接 – https://tonybai.com/2025/06/17/rider-elephant-arch
大家好,我是Tony Bai。
在软件架构的江湖里,关于“微服务”与“单体”的论战,几乎从未停歇。一方推崇微服务的灵活性、可扩展性和独立部署,另一方则坚守单体的简洁性、低通信开销和易于本地调试。近年来,我们甚至看到像亚马逊 Prime Video 这样重量级的玩家,也公开分享了其从微服务“回归”到某种形式的单体(或者说更粗粒度的服务)的实践,引发了业界新一轮的思考。
这不禁让我们反问:微服务与单体,真的就是非此即彼的“二元对立”吗?
最近,国外一家名为DealGate公司的一篇文章《Introducing the Rider and Elephant Software Architecture》,提出了一种他们称之为“骑手与大象”的架构模式,试图在这场看似无解的争论中,找到一条务实的中间道路。这种模式不仅在他们的实践中取得了显著成效,其背后的设计哲学和对技术选型的思考,也颇具启发意义。
DealGate 将其架构模式命名为“骑手与大象”,其灵感来源于心理学中的一个经典比喻:人类的思维由两部分组成——理性的“骑手”(对应我们发达的前额叶皮层,负责规划、分析和决策)和感性的、更强大的“大象”(对应我们原始的、更底层的“蜥蜴脑”或“穴居人脑”,驱动着本能和情绪)。骑手虽然可以尝试引导大象,但无法完全控制它;而如果骑手想独自前行,又会发现大象的力量是其无法比拟的。只有当骑手与大象协同合作时,才能发挥出最大的效能。
在 DealGate 的架构中,这个隐喻被巧妙地映射到了技术组件上:
这种架构的核心思想是:将需要极致性能和高并发处理的“重计算”部分(大象),与需要快速迭代和灵活业务逻辑的“轻应用”部分(骑手)进行分离,并让它们通过高效的通信方式协同工作。
DealGate 之所以采用这种架构,源于他们在实际业务中遇到的挑战和对现有架构模式的反思。
在“骑手与大象”的架构中,Go 语言之所以被选中扮演“吃苦耐劳的大象”,并非偶然。这得益于 Go 语言的核心特性:
可以说,Go 语言的设计哲学和核心能力,使其成为承载这种“无业务逻辑、高并发、重计算”角色的理想选择。
“骑手与大象”架构的另一个核心启示,在于其对不同技术栈的选择策略,体现了一种深刻的“务实主义”和对“成本效益”的考量。
文章明确反驳了“既然有更高性能的语言(如 Rust 或 Go 本身),为什么不把所有应用都用它来写?”的观点,并将其类比为“那所有应用都应该用汇编来写了”。
其核心逻辑是:
DealGate 的策略是:“在你必须快的地方快,其他一切都选择高级语言和(相对)单体的模式。” 这意味着:
这种“混合编程”或“多语言架构”的思路,实际上是在性能、开发效率、人才获取成本、维护成本等多个维度之间进行权衡和优化。它提醒我们,技术选型不应盲目追求“最新最酷”或“性能极致”,而应服务于业务需求,并充分考虑团队和公司的实际情况。
文章中也提及了对“Just write Rust”(就用 Rust 写)这类口号的反思,指出大多数公司和开发者可能无法承担全员学习和使用像 Rust 这样“高门槛”语言的成本。这并非否定 Rust 的优秀,而是强调技术选型的现实约束。
“没有完美的解决方案,只有权衡取舍”。DealGate 的文章以这句经典的名言作为总结,恰如其分。
“骑手与大象”架构,正是在微服务的灵活性、分布式能力与单体的低心智负担、高开发效率之间做出的一种明智权衡。它并非适用于所有场景的“银弹”,但在类似 DealGate 这样需要处理大规模数据密集型任务,同时又需要快速迭代业务逻辑的场景下,无疑提供了一种极具价值的、务实的架构思路。
它也再次印证了一个朴素的道理:优秀的架构设计,往往不是对某种“主义”的盲从,而是对业务需求的深刻理解和对不同技术优劣的精准把握,最终在各种约束条件下找到那个“恰到好处”的平衡点。
或许,在微服务与单体的喧嚣争论之外,我们更应该学习这种“骑手与大象”的智慧——在正确的地方,用正确的方式,做正确的事情。
参考文献:
Introducing the Rider and Elephant Software Architecture – https://d-gate.io/blog/rider-and-elephant-architecture
聊一聊,也帮个忙:
欢迎在评论区留下你的思考和经验。如果你觉得这篇文章提供了一个有价值的视角,也请转发给你身边的开发者和架构师朋友们,一起探讨更务实的架构之道!
精进有道,更上层楼
极客时间《Go语言进阶课》上架刚好一个月,受到了各位读者的热烈欢迎和反馈。在这里感谢大家的支持。目前我们已经完成了课程模块一『语法强化篇』的 13 讲,为你系统突破 Go 语言的语法认知瓶颈,打下坚实基础。
现在,我们即将进入模块二『设计先行篇』,这不仅包括 API 设计,更涵盖了项目布局、包设计、并发设计、接口设计、错误处理设计等构建高质量 Go 代码的关键要素。
这门进阶课程,是我多年 Go 实战经验和深度思考的结晶,旨在帮助你突破瓶颈,从“会用 Go”迈向“精通 Go”,真正驾驭 Go 语言,编写出更优雅、
更高效、更可靠的生产级代码!
扫描下方二维码,立即开启你的 Go 语言进阶之旅!
商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。
© 2025, bigwhite. 版权所有.