ITPub博客

首页 > 数据库 > 数据库开发技术 > 如何利用"拆分"降低架构复杂度

如何利用"拆分"降低架构复杂度

原创 数据库开发技术 作者:greencoatman 时间:2023-11-11 12:53:30 0 删除 编辑

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



迟早药丸


为什么要做拆分


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


外星伴侣


何时拆分

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

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

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



樱花烟雨


拆分的前提条件

1、团队和人员的准备

2、在进行拆分后,各个模块不在一个进程内,需要进行接口依赖的形式




慢慢等



如何进行拆分

1、目的性拆分:后台业务系统分为三大类,读服务、写服务、扣减服务

2、业务性拆分:你在购物的时候,要先通过认证登录APP,再浏览商品,查看促销活动及价格,确认购买后添加到购物车并提交订单。


不管经过多少次的拆分和组合,目标只有一个----降低系统的复杂度,减少耦合提升效率。


虽然没有绝对的架构拆分标准,但从我的经验来看,大型系统一般先采用两次垂直拆分再加一次水平拆分。这两次垂直拆分有一定的先后顺序,再进行业务维度再按技术维度。




未来可期



举例如下:

我们微信读书大致分为下面几个步骤

  1. 注册并登陆App

  2. 在书城找到你想阅读的图书,并浏览书籍的版本目录和介绍

  3. 是你想要的书,就会产生购买

  4. 支付完成之后,开始阅读


我们可以进行第一步拆分:

  1. 注册登录属于用户模块

  2. 浏览书属于商品模块

  3. 价格根据是不是会员计算不同的架构属于促销模块

  4. 购买是订单模块

  5. 完成支付是支付模块


进行第二步拆分:

用户模块,一个是用户注册,另一个是登录验证,可以成为查询,一分为二,读模块和写模块。读写分离


然后我们有第三步拆分:
用户读模块和用户写模块需要进行数据库访问,中间加入一层数据访问层,就形成了业务逻辑层和数据访问层的水平拆分。


总结:

当需求不断叠加导致并行开发和上线时,通过拆分可以减少相互影响。


当维护一个覆盖范围比较广的业务系统,从而导致研发人员业务专业度不够高时,通过拆分可以适当聚焦,提升专业度。


当一个系统范围较广同时线上 Bug 不断时,就需要适当拆分,逐个击破。


在落地进行拆分时,有几个重要准则需要你牢牢记住。


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


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


在模块内部的垂直拆分完成之后,可以按易变与稳定、共性与非共性进行水平拆分。需要注意的是,第二步的垂直拆分和最后的水平拆分是交替进行的,并无非常清晰的边界和先手顺序。

原文作者:二进制跳动;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-07-08

  • 博文量
    312
  • 访问量
    141112