微服務拆分需要考慮的必要因素與堅持原則

原文地址:http://blog.csdn.net/FL63Zv9Zou86950w/article/details/78495918

前言:創業公司往往因爲有限的時間和投入,把系統所有的功能都聚集在一起。隨着業務的不斷髮展,技術人員開始不斷地對架構進行解耦和拆分。微服務在最近幾年大行其道,很多公司的研發人員都在考慮微服務架構,或者在做微服務的路上,拆分服務是個很熱的話題。那麼我們應該按照什麼原則將現有的業務進行拆分?是否拆分得越細就越好?這裏談談系統拆分需要考慮的因素和堅持的原則。

業務因素

所有技術方面的考慮,包括架構設計和解耦拆分都要考慮業務的需要。在服務拆分時,先從業務角度確定拆分的方案。拆分的邊界要充分考慮業務的獨立性和專業性,比如搜索類服務、支付類服務、購物車類服務,按服務的業務功能合理地劃出拆分邊界。避免按團隊來定義服務邊界,這樣做會出現土匪搶地盤的局面,嚴重破壞團隊之間的信任,削弱創新的潛在機會。

投入產出

衡量拆分收益的標準是拆分後的維護成本要低過拆分前的維護成本,也就是說不能因爲拆分而帶來更大的維護工作。

拆分前的維護成本 - 拆分後的維護成本 ≧ 0

服務的維護成本包括維護該服務所需要耗費的人力、物力和時間。如果一個系統拆分成兩個或兩個以上,導致所有的資源都加倍,那將會很失敗。最好的結果是原來維護服務的同一套人馬分成兩個部分,因爲拆分後服務的複雜性降低,所需要的維護資源顯著減少,或者對人員能力的要求大大降低。

組織結構

拆分不僅僅是架構上的調整,也意味着要在組織結構上做出相應的適應性調整,確保拆分後的服務由相對獨立的團隊負責維護,儘量不要出現在不同服務之間的交叉調用。在這裏要堅持的原則是明確每個服務的分工,充分授權而且自給自足的相對獨立。切不可出現一個服務由幾個不同的團隊共同負責的情況,這會造成無人負責或多方爭搶,也不利於團隊積累相關服務的經驗。

這裏寫圖片描述

系統擴展

拆分的一個重要理由也是最有價值的結果是提高了系統的擴展性。用戶對不同的服務有不同的併發和性能方面的要求,因此服務具有不同的擴展性。把具有不同擴展性要求的服務拆分出來分別進行部署,可以降低成本,提高效率。比如電商平臺的搜索服務有很多請求,需要特別好的擴展性,應該把搜索服務分離出來,單獨考慮其擴展性的需求。這樣可以確保不會因爲搜索服務突然繁忙而影響其他的服務。也可以根據搜索服務的特點,設計出適合擴展的部署方案。 
這裏寫圖片描述

軟件發佈

系統中經常變動的部分大約只佔20%,剩下的80%基本不變或極少變化,因此軟件的發佈週期完全不同。我們可以把不變的80%分離出來,單獨部署,單獨管理。這不僅有利於降低系統的複雜性,精簡團隊的規模;也有利於在系統發生故障的時候快速定位。如果不做這種拆分,系統在擴展的過程中會浪費很多資源。 
這裏寫圖片描述

信息安全

不同的服務可能對信息安全有不同的要求,因此把需要高度安全的服務拆分出來,進行特別的部署,比如放在防火牆的後面,可以更有針對性地滿足信息安全的要求,也可以降低對防火牆等安全設備吞吐量、併發性等方面的要求,降低成本,提高效率。這就像對家裏不同房間的安全做不同的安排,確保需要加鎖的加鎖,減少了對鎖的需求量,也減少了開門的麻煩。

總結

所以我們在考慮服務拆分時,要堅持:面向業務、大道至簡、分而治之的三個原則,充分考慮業務需求、投入產出、組織結構、系統擴展、軟件發佈和信息安全等方面。不能只從技術角度出發,把服務切成很多細微的小塊,這樣做很有可能會出現勞民傷財、欲速而不達的結果。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章