- SpringBoot揭秘:快速構(gòu)建微服務(wù)體系
- 王福強(qiáng)
- 1240字
- 2019-06-28 14:06:22
1.2 微服務(wù)因何而生
微服務(wù)的概念我們應(yīng)該大體了解了,那么微服務(wù)又是怎么來(lái)的?原來(lái)將很多功能打包為一個(gè)很大的服務(wù)單元進(jìn)行交付的做法不能滿(mǎn)足需求嗎?
實(shí)際上,并非原來(lái)“大一統(tǒng)”(Monolith)的服務(wù)化實(shí)踐不能滿(mǎn)足要求,也不是不好,只是,它有自己存在的合理場(chǎng)景。對(duì)于Monolith服務(wù)來(lái)說(shuō),如果團(tuán)隊(duì)不大,軟件復(fù)雜度不高,那么,使用Monolith的形式進(jìn)行服務(wù)化治理是比較合適的,而且,這種方式對(duì)運(yùn)維和各種基礎(chǔ)設(shè)施的要求也不高。
但是,隨著軟件系統(tǒng)的復(fù)雜度持續(xù)飆升,軟件交付的效率要求更高,投入的人力以及各項(xiàng)資源越來(lái)越多,基于Monolith的服務(wù)化思路就開(kāi)始“捉襟見(jiàn)肘”。
在開(kāi)發(fā)階段,如果我們遵循Monolith的服務(wù)化理念,通常會(huì)將所有功能的實(shí)現(xiàn)都統(tǒng)一歸到一個(gè)開(kāi)發(fā)項(xiàng)目下,但隨著功能的膨脹,這些功能一定會(huì)分發(fā)給不同的研發(fā)人員進(jìn)行開(kāi)發(fā),造成的后果就是,大家在提交代碼的時(shí)候頻繁沖突并需要解決這些沖突,單一的開(kāi)發(fā)項(xiàng)目成為了開(kāi)發(fā)期間所有人的工作瓶頸。
為了減輕這種苦惱,我們自然會(huì)將項(xiàng)目按照要開(kāi)發(fā)的功能拆分為不同的項(xiàng)目,從而負(fù)責(zé)不同功能的研發(fā)人員就可以在自己的代碼項(xiàng)目上進(jìn)行開(kāi)發(fā),從而解決了大家無(wú)法在開(kāi)發(fā)階段并行開(kāi)發(fā)的苦惱。
到了軟件交付階段,如果我們遵循Monolith的服務(wù)化理念,那么,我們一定是將所有這些開(kāi)發(fā)階段并行開(kāi)發(fā)的項(xiàng)目集合到一起進(jìn)行交付,這就涉及服務(wù)化早期實(shí)踐中比較有名的“火車(chē)模型”,即交付的服務(wù)就像一輛火車(chē),而這個(gè)服務(wù)相關(guān)的所有功能對(duì)應(yīng)的項(xiàng)目成果,就是要裝上火車(chē)車(chē)廂的一件件貨物,交付的列車(chē)只有等到所有項(xiàng)目都開(kāi)發(fā)測(cè)試完成后才可以裝車(chē)出發(fā),完成整個(gè)服務(wù)的交付。很顯然,只要有一個(gè)車(chē)廂沒(méi)有準(zhǔn)備好貨物(即功能項(xiàng)目未開(kāi)發(fā)測(cè)試完成),火車(chē)就不能發(fā)車(chē),服務(wù)就不能交付,這大大降低了服務(wù)的交付效率。如果每個(gè)功能項(xiàng)目可以各自獨(dú)立交付,那么就不需要都等同一輛火車(chē),各自出發(fā)就可以了。順著這個(gè)思路,自然而然地,大家逐漸各自獨(dú)立,每一個(gè)功能或者少數(shù)相近的功能作為單一項(xiàng)目開(kāi)發(fā)完成后將作為一個(gè)獨(dú)立的服務(wù)單元進(jìn)行交付,從而在服務(wù)交付階段,大家也能夠并行不悖,各自演化而不受影響。
所以,隨著服務(wù)和系統(tǒng)的復(fù)雜度逐漸飆升,為了能夠在整個(gè)軟件的交付鏈路上高效擴(kuò)展,將獨(dú)立的功能和服務(wù)單元進(jìn)行拆分,從而形成一個(gè)一個(gè)的微服務(wù)是自然而然發(fā)生的事情。這就像打不同的戰(zhàn)役一樣,在雙方兵力不多、戰(zhàn)場(chǎng)復(fù)雜度不高的情況下,Monolith的統(tǒng)一指揮調(diào)度方式是合適的;而一旦要打大的戰(zhàn)役(類(lèi)似于系統(tǒng)復(fù)雜度提升),雙方一定會(huì)投入大量的兵力(軟件研發(fā)團(tuán)隊(duì)的規(guī)模增長(zhǎng)),如果還是在狹小甚至固定的戰(zhàn)場(chǎng)上進(jìn)行廝殺,顯然施展不開(kāi)!所以,小戰(zhàn)役有小戰(zhàn)役的打法,大戰(zhàn)役有大戰(zhàn)役的戰(zhàn)法,而微服務(wù)實(shí)際上就是一種幫助擴(kuò)展組織能力、提升團(tuán)隊(duì)效率的應(yīng)對(duì)“大戰(zhàn)役”的方法,它幫助我們從軟件開(kāi)發(fā)到交付,進(jìn)而到團(tuán)隊(duì)和組織層面多方位進(jìn)行擴(kuò)展。
總的來(lái)說(shuō),一方面微服務(wù)可以幫助我們應(yīng)對(duì)飆升的系統(tǒng)復(fù)雜度;另一個(gè)方面,微服務(wù)可以幫助我們進(jìn)行更大范圍的擴(kuò)展,從開(kāi)發(fā)階段項(xiàng)目并行開(kāi)發(fā)的擴(kuò)展,到交付階段并行交付的擴(kuò)展,再到相應(yīng)的組織結(jié)構(gòu)和組織能力的擴(kuò)展,皆因微服務(wù)而受惠。
- 數(shù)字化轉(zhuǎn)型架構(gòu):方法論與云原生實(shí)踐
- 21天學(xué)通C++(第7版)
- 深度學(xué)習(xí):21天實(shí)戰(zhàn)Caffe
- 搜索引擎與程序化廣告:原理、設(shè)計(jì)與實(shí)戰(zhàn)
- 卡爾曼濾波原理及應(yīng)用:MATLAB仿真(第2版)
- 軟件測(cè)試之魂:核心測(cè)試設(shè)計(jì)精解
- 混沌工程:通過(guò)可控故障實(shí)驗(yàn)提升軟件系統(tǒng)可靠性
- 軟件研發(fā)行業(yè)創(chuàng)新實(shí)戰(zhàn)案例解析
- 持續(xù)交付2.0:業(yè)務(wù)引領(lǐng)的DevOps精要(增訂本)
- 分布式應(yīng)用系統(tǒng)架構(gòu)設(shè)計(jì)與實(shí)踐
- Bootstrap實(shí)戰(zhàn)
- 云計(jì)算360度
- Serverless核心技術(shù)和大規(guī)模實(shí)踐
- 看透Spring MVC:源代碼分析與實(shí)踐
- 軟件工程最佳實(shí)踐