隨著互聯網行業的不斷發展,傳統軟件架構的問題也日益顯現。中培偉業《軟件系統詳細設計最佳實踐》培訓專家龔老師指出,傳統軟件架構的問題第一就是成本太高,第二個問題就是運維效率問題,具體有以下原因。
1、隨著項目的發展,很多功能打包成一個war包,一個人的代碼編譯或者功能出錯,需要重新歸檔和回歸測試,交付效率越來越低
2、核心業務邏輯和非核心的混在一起,一旦非核心的業務發生OOM或者死循環,會導致核心業務也不能正常運行,可靠性差
3、對于很多新加入團隊的新員工,學習和適應成本都很高:本地代碼在不斷的迭代和變更,最后形成了一個個垂直的功能孤島,只有原來的開發者才理解接口調用關系和功能需求,新加入人員或者團隊其它人員很難理解和維護這些代碼。
那么應該如何解決這些問題呢?龔老師指出了以下方法:
1、拆分:由大及小,分而治之。目前常用的拆分策略有水平拆分和垂直拆分兩種。
2、解耦:通過服務化和訂閱、發布機制對應用調用關系解耦,支持服務的自動注冊和發現。本質就是 透明化路由,消費者只需要知道我依賴什么服務即可,不關心服務的具體位置信息,雙方只有接口契約關系。
3、獨立原則:服務可以獨立打包、發布、部署、啟停、擴容和升級,核心服務獨立集群部署。這個原則實際就是 微服務架構倡導的原則:微服務可以獨立的部署、升級和運維,實現一定程度的自治。
4、分層:梳理和抽取核心應用、公共應用,作為獨立的服務下沉到核心和公共能力層,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。無論我們是做互聯網,還是其它IT行業,都有一個共性。經常發生變更的總是集中在20%左右的功能上,而變更頻繁的就是前端展示Portal和元數據映射、編排。后端的接口和能力通常是比較穩定的。核心應用、公共應用,作為獨立的服務下沉到核心和公共能力層,逐漸形成穩定的服務中心,獨立集群和部署。前后端分離,使前端可以更靈活的適配業務需求的變更。