專業(yè)技術(shù)顧問王慶友--大型APP服務(wù)端架構(gòu)演化及最佳實(shí)踐
原創(chuàng)【51CTO.com原創(chuàng)稿件】 在WOT2016移動(dòng)互聯(lián)網(wǎng)技術(shù)峰會(huì)上,王慶友前1號(hào)店***架構(gòu)師兼獨(dú)立技術(shù)顧問為我們講述APP服務(wù)端的變化過程。王慶友老師從四個(gè)方面為我們講述:架構(gòu)歷史和問題、***服務(wù)端2.0架構(gòu)、APP架構(gòu)總結(jié)及架構(gòu)本質(zhì)的理解。
架構(gòu)歷史和問題
最初架構(gòu),可以稱為0.1版本,架構(gòu)本身非常簡單了。首先有一個(gè)無線接口模塊,統(tǒng)一對(duì)接APP的請(qǐng)求,內(nèi)部是利用各個(gè)業(yè)務(wù)開發(fā)team提供架包完成業(yè)務(wù)邏輯返回結(jié)果。這個(gè)架構(gòu)有兩色,一個(gè)是集中式架構(gòu),另外是架包物理耦合。對(duì)于一開始提供一個(gè)簡單的APP還是非常有利,但是后續(xù)弊端很明顯,主要有兩塊:***,這是物理架包耦合,各個(gè)業(yè)務(wù)team負(fù)責(zé)架包開發(fā),開發(fā)完需要同步給服務(wù)端開發(fā)team,經(jīng)常導(dǎo)致雙方通訊出問題,導(dǎo)致架包版本不一致,出現(xiàn)各種各樣的坑。第二,對(duì)服務(wù)端開發(fā)team也很有挑戰(zhàn),他拿到架包,架包太原始了,需要對(duì)架包在基礎(chǔ)上做很多梳理整合,匯總數(shù)據(jù),提供給客戶端,相當(dāng)要理解所有1號(hào)店的業(yè)務(wù)邏輯,這個(gè)挑戰(zhàn)性非常大。
1.0架構(gòu),功能越來越多,對(duì)各個(gè)業(yè)務(wù)研發(fā)team,負(fù)責(zé)這個(gè)接口,一般情況下還是以PC端為主,不會(huì)提供單獨(dú)應(yīng)用實(shí)現(xiàn)無線功能,會(huì)在PC端Web系統(tǒng)提供簡單的處理,無非還是HTTP請(qǐng)求,相當(dāng)于在Web系統(tǒng)開了一個(gè)無線小窗口來滿足APP的請(qǐng)求需要。這個(gè)架構(gòu)對(duì)于提供業(yè)務(wù)功能還是很有利的,因?yàn)槊總€(gè)業(yè)務(wù)team非常熟悉本領(lǐng)域的業(yè)務(wù)邏輯,但是因?yàn)樯砗罄m(xù)一系列問題。***個(gè)問題,緊耦合,雖然不是架包物理耦合,無線小窗口跟Web系統(tǒng)耦合在一起,有兩塊獨(dú)立的需求。第二問題,每個(gè)業(yè)務(wù)team拿到接口以后,更多關(guān)注業(yè)務(wù)功能開發(fā),通用功能不大會(huì)關(guān)注,無線也有自身的特點(diǎn),需要一些通用功能開發(fā),包括無線協(xié)議分裝、安全、性能監(jiān)控、日志等等。
***服務(wù)端2.0架構(gòu)
在2.0架構(gòu),無線端處理過程跟Web端處理過程,兩個(gè)完全相互獨(dú)立,以前無線總體上是依附于Web系統(tǒng),現(xiàn)在是完全獨(dú)立的。接下來具體介紹一下無線網(wǎng)關(guān)內(nèi)部三個(gè)層的設(shè)計(jì)。每個(gè)具體功能又是相對(duì)獨(dú)立的,分裝成攔截器的形式,各個(gè)攔截器共同組成處理鏈,分為Inbound進(jìn)來的處理鏈跟outbound出去的處理鏈。一個(gè)請(qǐng)求過來首先經(jīng)過Inbound處理,再進(jìn)行具體業(yè)務(wù)處理,又反過來進(jìn)行outbound處理,這里業(yè)務(wù)處理不是屬于通用層,放上去只是為了更好說明目的。如果一個(gè)攔截器處理完以后,產(chǎn)生一些結(jié)果,后續(xù)攔截器想利用這個(gè)結(jié)果,是通過統(tǒng)一上下文對(duì)象傳遞信息。
APP架構(gòu)總結(jié)
路由層,根據(jù)無線請(qǐng)求過來的URL里有路徑信息,轉(zhuǎn)發(fā)到具體的適配器。適配層,定位是各個(gè)業(yè)務(wù)系統(tǒng)在無線前端代理,是起到代理的作用,是根據(jù)預(yù)處理過的、通用處理過的請(qǐng)求,轉(zhuǎn)發(fā)到后端實(shí)際業(yè)務(wù)系統(tǒng)做進(jìn)一步處理,主要是適配和轉(zhuǎn)發(fā)目的。具體接口也是把參數(shù)清晰分為兩類:一類是偏業(yè)務(wù)參數(shù),一類是偏設(shè)備參數(shù)。在無線網(wǎng)關(guān)系統(tǒng)級(jí)功能在通用層得到很好的處理,業(yè)務(wù)邏輯也是通過適配器做代理,后續(xù)也是得到很好的處理。服務(wù)升降級(jí),中心化對(duì)外提供服務(wù),每個(gè)無線請(qǐng)求過來,是用Java線程,都會(huì)有線程去對(duì)應(yīng)做相應(yīng)的處理,這部分資源是共享的。
架構(gòu)本質(zhì)的理解
一個(gè)系統(tǒng)開始比較簡單、比較清晰,隨著功能越來越多,像機(jī)房一樣布線越來越多,慢慢整個(gè)體系非?;靵y,架構(gòu)整個(gè)系統(tǒng)混亂度增加,慢慢失控了。在物理上熱力學(xué)有個(gè)很著名的熵增加理論,一個(gè)分配系統(tǒng)如果人為不對(duì)它進(jìn)行干預(yù),自然情況下慢慢會(huì)從有序變成更加無序,它的熵不斷增加,這個(gè)熵是衡量一個(gè)系統(tǒng)的無序度。這時(shí)就需要架構(gòu)介入,對(duì)系統(tǒng)進(jìn)行有序化重構(gòu),為這個(gè)系統(tǒng)建立一個(gè)秩序體系。在這個(gè)秩序體系里,每個(gè)模塊、每個(gè)功能都有一個(gè)清晰的定位,都是有序的,通過這個(gè)架構(gòu)改善,最終減少系統(tǒng)的熵,使系統(tǒng)能夠不斷進(jìn)化。架構(gòu)改造的手段其實(shí)很簡單,就是分和合。分首先把大的系統(tǒng)打散,成一個(gè)具體的子系統(tǒng)或者模塊,這個(gè)打散不能是隨意的,一定要根據(jù)每個(gè)子系統(tǒng)模塊、定位,根據(jù)定位才能找到邊界,才能進(jìn)行合理切割,每個(gè)模塊或子系統(tǒng)內(nèi)部是高內(nèi)聚的,模塊、系統(tǒng)之間是松耦合的。最終可以根據(jù)具體業(yè)務(wù)需求有機(jī)組合起來,打造一個(gè)有機(jī)的系統(tǒng),如果需要一個(gè)大的業(yè)務(wù)創(chuàng)新,可以簡單調(diào)整一下,重新整合,可以快速滿足業(yè)務(wù)需要。
***從分和合的角度,對(duì)服務(wù)端架構(gòu)重新回顧一下。0.1架構(gòu)是這個(gè)形狀,很類似單體架構(gòu),我稱之為形不散神散,形不散很好理解,神散是神比較散的,內(nèi)部模塊、子系統(tǒng)之間是非常緊密的耦合,如果想改一個(gè)地方就牽一發(fā)動(dòng)全身,類似單體架構(gòu)一樣,神是比較散的。1.0架構(gòu),非常類似簡單分布式架構(gòu),是直上直下煙囪型結(jié)構(gòu),這個(gè)稱之為形散神也散。從單塊來說還是有神的,端到端處理,但是總體上看神是比較散的,之間缺乏一個(gè)有機(jī)關(guān)聯(lián)。2.0架構(gòu),有點(diǎn)類似于搭積木,這個(gè)稱之為形散神不散,形散是很直觀的,為什么說神不散?神體現(xiàn)在首先網(wǎng)關(guān)每一層有清晰的定位,各個(gè)層之間通過一致的數(shù)據(jù)格式、接口規(guī)范有機(jī)串接在一起,***完成端到端的功能。具體對(duì)通用層,通過攔截器鏈把各個(gè)攔截器有機(jī)結(jié)合起來,從單個(gè)攔截器來看功能很散,但是總體來看每個(gè)攔截器是一環(huán)扣一環(huán),形成一個(gè)有機(jī)的總體,共同完成一個(gè)系統(tǒng)級(jí)的處理,所以是有它的神,很類似SOA架構(gòu)。特別是最近比較熱門的微服務(wù)架構(gòu),微服務(wù)形肯定是很散的,但神散不散?微服務(wù)架構(gòu)需要一個(gè)重點(diǎn)考量的地方,微服務(wù)一定要把系統(tǒng)核心靈魂體現(xiàn)出來,如果只是打造成一個(gè)服務(wù),微服務(wù)反而是一點(diǎn)價(jià)值沒有,整個(gè)系統(tǒng)變成形散神也散的系統(tǒng)。不管是0.1架構(gòu)、1.0架構(gòu)還是2.0架構(gòu),需要提供的功能都是那么多,是由業(yè)務(wù)本性屬性決定,少不了。但是通過一個(gè)有效重新分和合有機(jī)組合起來,整個(gè)架構(gòu)給系統(tǒng)建立一個(gè)很清晰的秩序,在這個(gè)秩序下每一塊都有明確的定位。有序化帶來的結(jié)果,系統(tǒng)開發(fā)成本、開發(fā)效率,系統(tǒng)可用性、系統(tǒng)可擴(kuò)展性都大大提高,這是架構(gòu)帶來的價(jià)值。
一個(gè)好的架構(gòu)必須像優(yōu)美的散文一樣,一定是形散神不散。
【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】