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