知识卡片
微服务陷阱一:服务划分过细,把系统内复杂度转移为系统间复杂度
内容
[[微服务与SOA的四维度对比:本质是两种不同理念,仅在”服务”上交集]]看起来处处优于SOA,容易让团队误以为”微服务=先进=该全面拥抱”,不加思考地照搬,结果掉进各种坑里,第一个坑就是服务划分过细导致服务间关系复杂。表面上看,把服务拆得越细,单个服务的复杂度确实下降了——但整体系统的复杂度并没有消失,只是从”系统内部的复杂度”转移成了”系统之间的复杂度”。从理论上讲,n个服务之间两两建立关系的复杂度是n×(n-1)/2,也就是说系统整体复杂度随微服务数量的增加是呈指数级增长的:粗粒度划分(比如整体只拆成3个服务)时,单个服务体量较大,但服务之间的关系很简单;细粒度划分之后,单个服务确实变小了,但服务之间纵横交错的调用关系反而变得复杂得多。这说明”拆分”本身不会凭空消灭复杂度,只是把复杂度从一个地方挪到了另一个地方,拆得越细,挪过去的那部分复杂度增长得越快,如果拆分的粒度和团队、业务的实际情况不匹配,最终收获的不是”更简单的系统”,而是”更难驾驭的服务网络”。
参考来源
- 位置:《从零开始学架构》第34讲《深入理解微服务架构:银弹 or 焦油坑?》"微服务的陷阱"之"服务划分过细,服务间关系复杂"(源文件:_epub-src/OEBPS/text00003.html)
- 结论依据:原文说明"服务划分过细,单个服务的复杂度确实下降了,但整个系统的复杂度却上升了,因为微服务将系统内的复杂度转移为系统间的复杂度了……n 个服务的复杂度是 n×(n-1)/2,整体系统的复杂度是随着微服务数量的增加呈指数级增加的",直接支撑本卡片结论。
- 原始内容:服务划分过细,单个服务的复杂度确实下降了,但整个系统的复杂度却上升了,因为微服务将系统内的复杂度转移为系统间的复杂度了……从理论的角度来计算,n 个服务的复杂度是 n×(n-1)/2,整体系统的复杂度是随着微服务数量的增加呈指数级增加的。