为什么要将系统进行拆分?

网上查查,答案极度零散和复杂,很琐碎,原因一大坨。但是我这里给大家直观的感受:

要是不拆分,一个大系统几十万行代码,20 个人维护一份代码,简直是悲剧啊。代码经常改着改着就冲突了,各种代码冲突和合并要处理,非常耗费时间;经常我改动了我的代码,你调用了我的,导致你的代码也得重新测试,麻烦的要死;然后每次发布都是几十万行代码的系统一起发布,大家得一起提心吊胆准备上线,几十万行代码的上线,可能每次上线都要做很多的检查,很多异常问题的处理,简直是又麻烦又痛苦;而且如果我现在打算把技术升级到最新的 spring 版本,还不行,因为这可能导致你的代码报错,我不敢随意乱改技术。

假设一个系统是 20 万行代码,其中 A 在里面改了 1000 行代码,但是此时发布的时候是这个 20 万行代码的大系统一块儿发布。就意味着 20 万上代码在线上就可能出现各种变化,20 个人,每个人都要紧张地等在电脑面前,上线之后,检查日志,看自己负责的那一块儿有没有什么问题。

A 就检查了自己负责的 1 万行代码对应的功能,确保 ok 就闪人了;结果不巧的是,A 上线的时候不小心修改了线上机器的某个配置,导致另外 B 和 C 负责的 2 万行代码对应的一些功能,出错了。

几十个人负责维护一个几十万行代码的单块应用,每次上线,准备几个礼拜,上线 -> 部署 -> 检查自己负责的功能。

拆分了以后,整个世界清爽了,几十万行代码的系统,拆分成 20 个服务,平均每个服务就 1~2 万行代码,每个服务部署到单独的机器上。20 个工程,20 个 git 代码仓库,20 个开发人员,每个人维护自己的那个服务就可以了,是自己独立的代码,跟别人没关系。再也没有代码冲突了,爽。每次就测试我自己的代码就可以了,爽。每次就发布我自己的一个小服务就可以了,爽。技术上想怎么升级就怎么升级,保持接口不变就可以了,真爽。

所以简单来说,一句话总结,如果是那种代码量多达几十万行的中大型项目,团队里有几十个人,那么如果不拆分系统,开发效率极其低下,问题很多。但是拆分系统之后,每个人就负责自己的一小部分就好了,可以随便玩儿随便弄。分布式系统拆分之后,可以大幅度提升复杂系统大型团队的开发效率。

但是同时,也要提醒的一点是,系统拆分成分布式系统之后,大量的分布式系统面临的问题也是接踵而来,所以后面的问题都是在围绕分布式系统带来的复杂技术挑战在说。

如何进行系统拆分?

这个问题说大可以很大,可以扯到领域驱动模型设计上去,说小了也很小,我不太想给大家太过于学术的说法,因为你也不可能背这个答案,过去了直接说吧。还是说的简单一点,大家自己到时候知道怎么回答就行了。

系统拆分为分布式系统,拆成多个服务,拆成微服务的架构,是需要拆很多轮的。并不是说上来一个架构师一次就给拆好了,而以后都不用拆。

第一轮;团队继续扩大,拆好的某个服务,刚开始是 1 个人维护 1 万行代码,后来业务系统越来越复杂,这个服务是 10 万行代码,5 个人;第二轮,1个服务 -> 5个服务,每个服务 2 万行代码,每人负责一个服务。

如果是多人维护一个服务,最理想的情况下,几十个人,1 个人负责 1 个或 2~3 个服务;某个服务工作量变大了,代码量越来越多,某个同学,负责一个服务,代码量变成了 10 万行了,他自己不堪重负,他现在一个人拆开,5 个服务,1 个人顶着,负责 5 个人,接着招人,2 个人,给那个同学带着,3 个人负责 5 个服务,其中 2 个人每个人负责 2 个服务,1 个人负责 1 个服务。

个人建议,一个服务的代码不要太多,1 万行左右,两三万撑死了吧。

大部分的系统,是要进行多轮拆分的,第一次拆分,可能就是将以前的多个模块该拆分开来了,比如说将电商系统拆分成订单系统、商品系统、采购系统、仓储系统、用户系统,等等吧。

但是后面可能每个系统又变得越来越复杂了,比如说采购系统里面又分成了供应商管理系统、采购单管理系统,订单系统又拆分成了购物车系统、价格系统、订单管理系统。

扯深了实在很深,所以这里先给大家举个例子,你自己感受一下,核心意思就是根据情况,先拆分一轮,后面如果系统更复杂了,可以继续分拆。你根据自己负责系统的例子,来考虑一下就好了。

拆分后不用 dubbo 可以吗?

当然可以了,大不了最次,就是各个系统之间,直接基于 spring mvc,就纯 http 接口互相通信呗,还能咋样。但是这个肯定是有问题的,因为 http 接口通信维护起来成本很高,你要考虑超时重试、负载均衡等等各种乱七八糟的问题,比如说你的订单系统调用商品系统,商品系统部署了 5 台机器,你怎么把请求均匀地甩给那 5 台机器?这不就是负载均衡?你要是都自己搞那是可以的,但是确实很痛苦。

所以 dubbo 说白了,是一种 rpc 框架,就是说本地就是进行接口调用,但是 dubbo 会代理这个调用请求,跟远程机器网络通信,给你处理掉负载均衡、服务实例上下线自动感知、超时重试等等乱七八糟的问题。那你就不用自己做了,用 dubbo 就可以了。

转载于:https://www.cnblogs.com/windpoplar/p/10926770.html

为什么要进行系统拆分相关推荐

  1. 分布式面试 - 为什么要进行系统拆分?

    分布式面试 - 为什么要进行系统拆分? 面试题 为什么要进行系统拆分?如何进行系统拆分?拆分后不用 dubbo 可以吗? 面试官心理分析 从这个问题开始就进行分布式系统环节了,现在出去面试分布式都成标 ...

  2. 个人对系统拆分的理解

    在本人现在的公司和本人工作过的上一家公司,本人有幸参与并实施了公司业务系统的架构拆分,现将之前的工作总结下. 1,为什么要进行系统拆分 首先我们需要想想,到底什么样的系统需要进行拆分?并不是所有的系统 ...

  3. 为什么要进行系统拆分?

    面试题 为什么要进行系统拆分?如何进行系统拆分?拆分后不用 dubbo 可以吗? 面试官心理分析 从这个问题开始就进行分布式系统环节了,现在出去面试分布式都成标配了,没有哪个公司不问问你分布式的事儿. ...

  4. 架构方案(17) 分布式架构系统拆分原则、缘由、以及实战如何拆分步骤

    分布式架构率先开始的就是应用工程拆分,如何拆分,什么情况拆分,拆分的原则是什么,能否实战详解拆分步骤?让我一一娓娓道来. 为什么需要应用拆分 我以淘宝技术架构演进为例,淘宝从一个大系统工程向分布式架构 ...

  5. 苏宁11.11:系统拆分的一些经验谈

    "平京战役"一发布使本来就热闹的电商促销大战呛出了火药味,也为双11的大促增添了许多谈资,更让消费者享受到实实在在的优惠.而在技术上这种竞争则温和许多. 技术上的压力来源于业务的需 ...

  6. 秦小明 金融思维笔记 第三讲 财务分析1 商业分析的演绎框架amp;利润表的系统拆分

    这套课程对于赚到钱的程序员如何让钱生钱,保持财富非常重要,也对于做互联网金融行业的程序员非常重要. 有兴趣听课程的可以联系我的公众号:湾区人工智能 回复:秦小明 秦小明 第一讲 宏观和微观经济 htt ...

  7. 分布式架构之系统拆分

    系统拆分是单体程序向分布式系统演变的关键一步,也是很重要的一步,拆分的好坏直接关系到未来系统的扩展性.可维护性和可伸缩性等,拆分工作不难理解,但是如何正确拆分.有什么样的方法和原则能帮助我们拆分得到一 ...

  8. 每日一题:为什么要进行系统拆分?

    原文来自 GitHub 开源社区 Doocs,欢迎 Star 此项目,如果你有独到的见解,同样可以参与贡献此项目. 面试题 为什么要进行系统拆分?如何进行系统拆分?拆分后不用 dubbo 可以吗? 面 ...

  9. 记一次业务系统拆分的数据迁移及系统切换事项

    一.迁移背景 老系统使用商业化软件,同时包含模块较多,架构无法支撑,维护成本高等考虑,需要根据业务模块拆分多个系统,新系统支持水平扩缩容 ,rcp框架等,新系统基本上包含常用的技术栈(wildfly. ...

最新文章

  1. 深度学习(2)基础2 -- 分类:得分函数损失函数(损失、正则化惩罚项、梯度下降、学习率)概率
  2. Problem 58 怎样判断当前程序链接的是多线程版的Glibc还是单线程版的Glibc?
  3. python当中pip使用_python
  4. 如何在不丢失文件的情况下快速重置Win11
  5. 评论:互联网的冬天还有多远?
  6. mysql5.7版本的新特性_MySQL 5.7版本新特性(一)
  7. Android傻瓜式脚本录制
  8. Fiddler https最新抓包方法(Android 9.0)
  9. FPGA串口波特率计算
  10. python正则取反,一文搞定Python正则表达式
  11. 测试人,测试魂,3年测遍32个城,主管的一句话给予了他源源不断的动力
  12. 从卫星影像的视角见证莆田母亲河(美丽的木兰溪)改造前后的容颜变化
  13. 【Python】Talk Python To Me Podcast播客
  14. win10商店打不开_win10应用商店的卸载和安装
  15. 课题设计T25,使用51单片机设计一个里程计数器,Proteus设计,keil程序
  16. Keras开发环境安装方法新手教程(GPU版)
  17. 结束任务管理器快捷键是什么?怎么结束电脑程序运行?
  18. iPhone连接Mac之后频繁闪烁的解决方法
  19. 编译电驴v1.1.15 with vs2010
  20. 36岁退休!阿里 P8 六年实现“财务自由”,裸辞环游世界!

热门文章

  1. 微服务:简述微服务架构中的API网关
  2. Myers差分算法详解
  3. yylabel 加载html,YYKit是个好东西-YYLabel实现一个文本多个点击事件
  4. PCIE——第 10 章—— MSI 和 MSI⁃X 中断机制
  5. VR全景看房线上3D住宅商品房鉴赏
  6. python中安装 ipython
  7. Unity中Rigidbody的属性 方法
  8. css网页favicon_favicon ico网页图标制作 IconWorkshop软件下载
  9. 使用 IconWorkShop 6 制作 icon 文件
  10. isakmp_profile