单体架构是最简单最常见的软件架构模式。所有的代码都运行在同一个进程内。在项目的初期,单体应用可以很好地运行,构建和发布的成本也不高。但是随着需求的不断增加和人员的不断变更,代码库也在飞速膨胀。最终,单体应用会变成“臃肿”、“不可维护”、“毫无灵活性”的巨石应用。也会带来以下缺点。

  • 极高的代码复杂度:具体体现在模块依赖关系不清晰,代码质量参差不齐。每次增加一个简单的功能,或者修复一个 bug。都会带来隐藏的缺陷
  • 技术债务:复杂的单体架构中,都会存在几百甚至上千行的的过长类。而且参与开发人员都会默认一个原则:“能跑就行”。现存的系统设计和代码难以有机会被迭代,因为稍微一个改动就有可能导致其它模块产生新的问题。
  • 部署频率低:单体应用中,不论多小的变更,都会导致整个项目的全量部署。这种全量部署耗时长,风险大。为了降低发布风险,自然需要降低部署频率。而低频次的部署,又会带来每次发布期间,都有大量的功能变更和缺陷修复,反而导致更高的出错率。