作者:陳斌
前言
創(chuàng)業(yè)公司往往因?yàn)橛邢薜臅r(shí)間和投入烟馅,把系統(tǒng)所有的功能都聚集在一起说庭。隨著業(yè)務(wù)的不斷發(fā)展,技術(shù)人員開始不斷地對(duì)架構(gòu)進(jìn)行解耦和拆分郑趁。微服務(wù)在最近幾年大行其道刊驴,很多公司的研發(fā)人員都在考慮微服務(wù)架構(gòu),或者在做微服務(wù)的路上寡润,拆分服務(wù)是個(gè)很熱的話題捆憎。那么我們應(yīng)該按照什么原則將現(xiàn)有的業(yè)務(wù)進(jìn)行拆分?是否拆分得越細(xì)就越好梭纹?這里我想談?wù)勏到y(tǒng)拆分需要考慮的因素和堅(jiān)持的原則躲惰。
業(yè)務(wù)因素
所有技術(shù)方面的考慮,包括架構(gòu)設(shè)計(jì)和解耦拆分都要考慮業(yè)務(wù)的需要变抽。在服務(wù)拆分時(shí)础拨,先從業(yè)務(wù)角度確定拆分的方案氮块。拆分的邊界要充分考慮業(yè)務(wù)的獨(dú)立性和專業(yè)性,比如搜索類服務(wù)诡宗、支付類服務(wù)滔蝉、購(gòu)物車類服務(wù),按服務(wù)的業(yè)務(wù)功能合理地劃出拆分邊界僚焦。避免按團(tuán)隊(duì)來定義服務(wù)邊界锰提,這樣做會(huì)出現(xiàn)土匪搶地盤的局面,嚴(yán)重破壞團(tuán)隊(duì)之間的信任芳悲,削弱創(chuàng)新的潛在機(jī)會(huì)立肘。
投入產(chǎn)出
衡量拆分收益的標(biāo)準(zhǔn)是拆分后的維護(hù)成本要低過拆分前的維護(hù)成本,也就是說不能因?yàn)椴鸱侄鴰砀蟮木S護(hù)工作名扛。
拆分前的維護(hù)成本 - 拆分后的維護(hù)成本 ≧ 0
服務(wù)的維護(hù)成本包括維護(hù)該服務(wù)所需要耗費(fèi)的人力谅年、物力和時(shí)間。如果一個(gè)系統(tǒng)拆分成兩個(gè)或兩個(gè)以上肮韧,導(dǎo)致所有的資源都加倍融蹂,那將會(huì)很失敗。最好的結(jié)果是原來維護(hù)服務(wù)的同一套人馬分成兩個(gè)部分弄企,因?yàn)椴鸱趾蠓?wù)的復(fù)雜性降低超燃,所需要的維護(hù)資源顯著減少,或者對(duì)人員能力的要求大大降低拘领。
組織結(jié)構(gòu)
拆分不僅僅是架構(gòu)上的調(diào)整意乓,也意味著要在組織結(jié)構(gòu)上做出相應(yīng)的適應(yīng)性調(diào)整,確保拆分后的服務(wù)由相對(duì)獨(dú)立的團(tuán)隊(duì)負(fù)責(zé)維護(hù)约素,盡量不要出現(xiàn)在不同服務(wù)之間的交叉調(diào)用届良。在這里要堅(jiān)持的原則是明確每個(gè)服務(wù)的分工,充分授權(quán)而且自給自足的相對(duì)獨(dú)立圣猎。切不可出現(xiàn)一個(gè)服務(wù)由幾個(gè)不同的團(tuán)隊(duì)共同負(fù)責(zé)的情況士葫,這會(huì)造成無人負(fù)責(zé)或多方爭(zhēng)搶,也不利于團(tuán)隊(duì)積累相關(guān)服務(wù)的經(jīng)驗(yàn)送悔。
系統(tǒng)擴(kuò)展
拆分的一個(gè)重要理由也是最有價(jià)值的結(jié)果是提高了系統(tǒng)的擴(kuò)展性慢显。用戶對(duì)不同的服務(wù)有不同的并發(fā)和性能方面的要求,因此服務(wù)具有不同的擴(kuò)展性放祟。把具有不同擴(kuò)展性要求的服務(wù)拆分出來分別進(jìn)行部署鳍怨,可以降低成本,提高效率跪妥。比如電商平臺(tái)的搜索服務(wù)有很多請(qǐng)求,需要特別好的擴(kuò)展性声滥,應(yīng)該把搜索服務(wù)分離出來眉撵,單獨(dú)考慮其擴(kuò)展性的需求侦香。這樣可以確保不會(huì)因?yàn)樗阉鞣?wù)突然繁忙而影響其他的服務(wù)。也可以根據(jù)搜索服務(wù)的特點(diǎn)纽疟,設(shè)計(jì)出適合擴(kuò)展的部署方案罐韩。
軟件發(fā)布
系統(tǒng)中經(jīng)常變動(dòng)的部分大約只占20%,剩下的80%基本不變或極少變化污朽,因此軟件的發(fā)布周期完全不同散吵。我們可以把不變的80%分離出來,單獨(dú)部署蟆肆,單獨(dú)管理矾睦。這不僅有利于降低系統(tǒng)的復(fù)雜性,精簡(jiǎn)團(tuán)隊(duì)的規(guī)模炎功;也有利于在系統(tǒng)發(fā)生故障的時(shí)候快速定位枚冗。如果不做這種拆分,系統(tǒng)在擴(kuò)展的過程中會(huì)浪費(fèi)很多資源蛇损。
信息安全
不同的服務(wù)可能對(duì)信息安全有不同的要求赁温,因此把需要高度安全的服務(wù)拆分出來,進(jìn)行特別的部署淤齐,比如放在防火墻的后面股囊,可以更有針對(duì)性地滿足信息安全的要求,也可以降低對(duì)防火墻等安全設(shè)備吞吐量更啄、并發(fā)性等方面的要求稚疹,降低成本,提高效率锈死。這就像對(duì)家里不同房間的安全做不同的安排贫堰,確保需要加鎖的加鎖,減少了對(duì)鎖的需求量待牵,也減少了開門的麻煩其屏。
總結(jié)
所以我們?cè)诳紤]服務(wù)拆分時(shí),要堅(jiān)持:面向業(yè)務(wù)缨该、大道至簡(jiǎn)偎行、分而治之的三個(gè)原則,充分考慮業(yè)務(wù)需求贰拿、投入產(chǎn)出蛤袒、組織結(jié)構(gòu)、系統(tǒng)擴(kuò)展膨更、軟件發(fā)布和信息安全等方面妙真。不能只從技術(shù)角度出發(fā),把服務(wù)切成很多細(xì)微的小塊荚守,這樣做很有可能會(huì)出現(xiàn)勞民傷財(cái)珍德、欲速而不達(dá)的結(jié)果练般。
好消息
易寶 CTO 陳斌翻譯的新書《架構(gòu)真經(jīng)》正在京東和亞馬遜熱賣!
《架構(gòu)真經(jīng)》:《架構(gòu)即未來》姊妹篇锈候,硅谷大咖的干貨呈現(xiàn)薄料,互聯(lián)網(wǎng)架構(gòu)的50條軍規(guī)。唐彬泵琳、向江旭摄职、葉亞明、段念获列、吳華鵬谷市、張瑞海、韓軍蛛倦、程炳皓歌懒、張?jiān)迫⒂喑克莺⒗畲髮W(xué)及皂、霍泰穩(wěn)聯(lián)袂力薦。