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