分而治之

拆分是架构设计大型复杂系统的第一步,对降低系统复杂性有着决定性的意义,它也是架构师的必备技能之一。

人解决复杂问题的能力是有限的,当问题涉及面广、情况复杂时,自然会去寻找方法提升效率。

业务后台系统就是一个“复杂问题”,而解决“这个问题”的方法便是拆分——将复杂问题拆解为多个相对简单的小问题,分而治之、各个击破,这样做极大地提高了解决复杂问题的可能性和效率。

一个好的拆分能够降低各个模块间的耦合性,极大地降低效率消耗,提升系统成功的可能性。

何时拆分

1. 系统常年处于多需求并行开发,导致代码维护成本太大

2. 在开发一个需求时,花费几天时间阅读代码,而开发只要一半甚至更少的时间

3. 在一个需求上线前,需要召集上百人对齐上线风险和上线步骤

拆分的前提条件

第一是团队和人员的准备。 拆分的主要原因是信息过载,“两个比萨”理论——一个团队的人员能够吃下两个比萨刚好。因此拆分后,建议以三个人左右为单位进行组织和划分。

第二是在进行拆分后,各个模块不在一个进程内,需要采用接口依赖的形式。

如何进行拆分

没有哪一种架构拆分绝对正确,因为架构是论述题而不是选择题。

目标只有一个——降低系统复杂度、减少耦合提升效率。

先竖着切一刀,称为垂直拆分。经过垂直拆分后,如果系统还是太复杂,就可以横着再来一刀,称为水平拆分或者分层拆分。

大型系统通常先采用两次垂直拆分再加一次水平拆分。这两次垂直拆分有一定的先后顺序,先按业务维度再按技术维度。

任何技术都是服务于业务的,脱离业务的技术无法发挥它的价值。

拆分是按维度逐层进行,从顶层逐步向下。在顶层按业务及业务流程进行垂直拆分,而不是按技术或其他。

在此之后,对于拆分得到的具体模块,可以按读写分离、在线离线分离、快慢分离、场景分离等方式做进一步的水平拆分。

posted @ 2023-03-07 16:40  jiaozg  阅读(68)  评论(0)    收藏  举报