春色满园,阿里Java面试题分析:怎么进行体系拆分?拆分后不必 dubbo 可以吗,哈登


面试题

为什么要进行系统拆分?怎样进行系统拆分?拆分后不用 dubbo 能够吗?

面试官心思分春色满园,阿里Java面试题剖析:怎样进行系统拆分?拆分后不用 dubbo 能够吗,哈登析

从这个问题开端就进行分布式系统环节了,现在出去面试分布式都成标配了,没有哪个公司不问问你分布式的事儿。你要是不会分布式的东西,简直这简历无法看,没人会让你去面试。

其实为啥会这样呢?这便是由于整个大职业技能开展的原因。

早些年,印象中在 2010 年头的时分,整个 I仁慈的男人T 职业,很少有人谈分布式,更不用说微效劳,尽管许多 BAT 等大型公司,由于系统的杂乱性,很早便是分布式架构,许多的效劳,只不过微效劳大多依据自己搞的一套结构来完成罢了。

可是的确,那个年代,我们很注重 ssh2,许多中小型公司简直大部分都是玩儿 当爱已成往事strut方炯斌s2springhib春色满园,阿里Java面试题剖析:怎样进行系统拆分?拆分后不用 dubbo 能够吗,哈登ernate,稍晚一些,才进入了 spring mvcspringmybatis 的组合。那个时分整个职业的技能水平便是那样,当年 oracle 很火,oracle 办理员很吃香,oracle 功用优化啥的都是 IT 男的大杀招啊。连大数据都没人提,当年 OCPOCM 等认证训练组织,火的不可。

可是的确跟着年代的开展,渐渐的,许多公司开端承受分布式系统架构了,这儿边尤为对职业有至关重要影响的,是阿里的 dubbo某种程度上而言,阿里在这儿推动了职业技能的行进

正是由于有阿里的 dubbo,许多中小型公司才能够依据 dubbo,来把系统拆分红许多的效劳,每个人担任一个效劳,我们的代码都没有抵触,效劳能够自治,自己选用什么技能都能够,每次发布假如就改动一个效劳那就上线一个效劳好了,不用一切人一同联调,每次发布都是几十万行代码,乃至几百万行代码了。

直到今天,很快乐看到分布式系统都成职业面试标配了,任何一个一般的程序员都该把握这个东西,其实这是职业的前进,也是一切 IT 码农的技能前进。所以已然分布式都成标配了,那么面试官当然会问了,由于许多公司现在都冬瓜是分布式、微效劳的架构,那面试官当然得调查调查你了。


面试题剖析

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

网上查查,答案极度零星和杂乱,很琐碎,原因一大坨。可是我这儿给我们直观的感触:

要是不拆分,一个大系统几十万行代码,20 个人保护一份代码,简直是悲惨剧啊。代码常常改着改着就抵触了,各种代码抵触和合并要处理,十分消耗时刻;常常我改动了我的代码,你调用了我的,导致你的代码也得从头测验,费事的要死;然后每次发布都是几十万行代码的系统一同发布,我们得一同胆战心惊预备上线,几十万行代码的上线,或许每次上线都要做许多的查看,许多反常问题的处理,简直是又费事又苦楚;并且假如我现在计划把技能晋级到最新的 spring 版别,还不可,由于这或许导致你的代码报错,我不敢随意乱改技能。

假定一个系统是 20 万行代码,其间 A 在里边改了 1000 行代码,可是此刻发布的时分是这个 20 万行代码的大系统一块儿发布。就意味着 20 万上代码在线上就或许呈现各种改变,20 个人,每个人都要严重地等在电脑面前,上线之后,查看日志,看自己担任的那一块儿有没有什么问题。

A 就查看了自己担任的 1 万行代码对应的功用,保证 ok 就闪人了;成果不巧的是,A 上线的时分不小心修改了线上机器的某个装备,导致别的 B 和 C 担任的 2 万行代码对应的一些功用,出错了。

几十个人担任保护一个几十万行代码的单块使用,每次上线,预备几个礼拜,上线 -> 布置 -> 查看自己担任的功用。

拆分了今后,整个国际清新了,几十万行代码的系统,拆分红 20 个效劳,均匀每个效劳就 1~2 万行代码,每个效劳布置到独自的机器上。20 个工程,20 个 git 代码库房,20经典 个开发人员,每个人保护自己的那个效劳就可江南四大文人以了,是自己独立的代码,跟他人不要紧。再也没有代码抵触了,爽。每次就测验我自己的代码就能够了,爽。每次就发布我自己的一个小效劳就能够了,爽。技能上想怎样晋级就怎样晋级,坚持接口不变就能够了,真爽。

所以简略来说,一句话总结,假如是那种代码量多达几十万行的中大型项目,团队里有几十个人,那么假如不拆分系统,开发功率极端低春色满园,阿里Java面试题剖析:怎样进行系统拆分?拆分后不用 dubbo 能够吗,哈登下,问题许多。可是拆分系统之后,每个人就担任自己的一小部分就好了,能够随意玩儿随意弄。分布式系统拆分之后,能够大幅度提高杂乱系统大型团队的开发功率。

可是一起,也要提示的一点是,系统拆分红分布式系统之后,许多的分布式系统面对的问题也是接踵而来,所今后边的问题都是在环绕分布式系统带来的杂乱技能应战在说。笋的做法

怎样进行系统拆分?

这个问题说大能够很大,能够扯到范畴驱动模型规划上去,说小了也很小,我李佳芯不太想给我们太过于学术的说法,由于你也不或许背这个答案,过去了直接说吧。仍是说的简略一点,我们自己到时分知道怎样答复就行了。

系统拆分为分布式系统,拆成多个效劳,拆成微效劳的架构,是需求拆许多轮的。并不是说上来封丘天气预报一个架构师一次就给拆好了,而今后都不用拆。

第一轮;团队持续扩展,拆好的某个效劳,刚开端是 1 个人保护 1 万行代码,后来事务系统越h9来越杂乱,这个效劳是 10 万行代码,5 个人;第二轮,1个效劳 -> 5个效劳,每个效劳 2 万行代码,每人担任一个效劳。

假如是多人保护一个效劳,最理想的状况下,几十个人,1 个人担任 1 个或 2~3 个效劳陆勇;某个效劳作业质变大了,代码量越来越多,某个同学,担任一个效劳,代码质变成了 10 万行了,他自己不堪重负,他现在一个人拆开,5 个效劳,1 个人顶着,担任 5 个人,接着招人,2 个春色满园,阿里Java面试题剖析:怎样进行系统拆分?拆分后不用 dubbo 能够吗,哈登人,给那个同学带着,3 个人担任军 5 个效劳,其间 2 个人每个人担任 2 个效劳,1 个人担任 1 个效劳。

个人主张,一个效劳的代码不要太多,1 万行左右,两三万撑死了吧。

大部分的系统,是要进汪涵暗讽韩庚罢录行多轮拆分的,第一次拆分,或许便是将曾经的多个模块该拆分开来了,比如说将电商系统拆分红订单系统、产品系统、田斌健康猫收购系统、仓储系统、用户系统,等等吧。

可是后边或许每个系统又变得越来越杂乱了,比如说收购系统里边又分红了供货商办理系统、收购单办理系统,订单系统又拆分红了购物车系统、价格系统、订单办理系统。

扯深了真实很深,所以这儿先给我们举个比如,你自己感触一下,中心意思便是依据状况,先拆分一轮,后边假如系统更杂乱了,能够持续分拆。你春色满园,阿里Java面试题剖析:怎样进行系统拆分?拆分后不用 dubbo 能够吗,哈登依据自己担任系统的比如,来考虑一下就好了。

拆分后不用 dubbo 能够吗?

当然能够弹丸论破了,大不了最次,便是各个系统之间,直接依据 spring mvc,就纯 http 接口相互通讯呗,还能咋样。可是这个肯定是有lpl路程问题的,由于 http 接口通讯维春色满园,阿里Java面试题剖析:怎样进行系统拆分?拆分后不用 dubbo 能够吗,哈登护起来本钱很高,你要考虑超时重试负载均衡等等各种杂乱无章的问题,比如说你的订单系玉屏风颗粒统调用产品系统,产品系统布置了 5 台机器,你怎样把恳求均匀地甩给那 5 台机器?这不便是负载均衡?你要是都自己搞那是能够的,可是的确很苦楚。

所以 dubbo 说白了,是一种 rpc 结构,便是说本地便是进行接口调用,可是 dubbo 会署理这个调用恳求,跟长途机器网络通讯,给你处理掉负载均衡、效劳实例上下线主动感知、超时重试等等杂乱无章的问题。那你就不用自己做了,用 dubbo 就能够了。


文末彩蛋

针对于上面所涉及到的知识点科技之门我总结出了有1到5年开发经历的程序员在面试中涉及到的绝大部分ana架构面试题及答案做成了文档和架构视频材料免费共享给我们(包含Dubbo、Redis、Netty、zookeeper、春色满园,阿里Java面试题剖析:怎样进行系统拆分?拆分后不用 dubbo 能够吗,哈登Spring cloud、分布式、高并发等架构技能材料),希望能协助到您面试前的温习且找到一个好的作业,也节约我们在网上查找材料的时刻来学习,也能够重视我一下今后会有更多干货共享。

材料获取方法:后台私信“材料”即可