分而治之
拆分是架构设计大型复杂系统的第一步,对降低系统复杂性有着决定性的意义,它也是架构师的必备技能之一。
人解决复杂问题的能力是有限的,当问题涉及面广、情况复杂时,自然会去寻找方法提升效率。
业务后台系统就是一个“复杂问题”,而解决“这个问题”的方法便是拆分——将复杂问题拆解为多个相对简单的小问题,分而治之、各个击破,这样做极大地提高了解决复杂问题的可能性和效率。
一个好的拆分能够降低各个模块间的耦合性,极大地降低效率消耗,提升系统成功的可能性。
何时拆分
1. 系统常年处于多需求并行开发,导致代码维护成本太大
2. 在开发一个需求时,花费几天时间阅读代码,而开发只要一半甚至更少的时间
3. 在一个需求上线前,需要召集上百人对齐上线风险和上线步骤
拆分的前提条件
第一是团队和人员的准备。 拆分的主要原因是信息过载,“两个比萨”理论——一个团队的人员能够吃下两个比萨刚好。因此拆分后,建议以三个人左右为单位进行组织和划分。
第二是在进行拆分后,各个模块不在一个进程内,需要采用接口依赖的形式。
如何进行拆分
没有哪一种架构拆分绝对正确,因为架构是论述题而不是选择题。
目标只有一个——降低系统复杂度、减少耦合提升效率。
先竖着切一刀,称为垂直拆分。经过垂直拆分后,如果系统还是太复杂,就可以横着再来一刀,称为水平拆分或者分层拆分。
大型系统通常先采用两次垂直拆分再加一次水平拆分。这两次垂直拆分有一定的先后顺序,先按业务维度再按技术维度。
任何技术都是服务于业务的,脱离业务的技术无法发挥它的价值。
拆分是按维度逐层进行,从顶层逐步向下。在顶层按业务及业务流程进行垂直拆分,而不是按技术或其他。
在此之后,对于拆分得到的具体模块,可以按读写分离、在线离线分离、快慢分离、场景分离等方式做进一步的水平拆分。

浙公网安备 33010602011771号