沈錫城,任 杰
(杭州市交通運輸行政執法隊,杭州 310014)
隨著云計算技術的不斷發展,越來越多的行業正在加快推動上云,進行自身的數字化轉型升級[1-2]。新形勢下運營需求變化快,業務系統也從傳統單體應用架構加快向輕量化、容器化、微服務化的互聯網新架構轉變[3-4]。越來越多的業務需要結合應用場景選擇適當的微服務拆分策略,從而可以形成與業務應用訪問匹配的微服務顆粒度[5-6]。
隨著業務系統不斷提出上云需求,如何發揮微服務單體靈活的特性,促進業務快速發布、迭代一直是業界研究的重點方向[7-8]。業務拆分并不是拆的越小越好,也不是顆粒度越大越好,在進行微服務拆分的時候,既要考慮業務的特點與資源的情況,又要綜合加權形成業務拆分顆粒度,指導微服務拆分上云[9-10]。
微服務架構主要包括服務網關API、注冊中心RA、服務監控、配置中心、緩存、數據庫等組件,以及相關的微服務。整體架構如圖1所示。

圖1 微服務整體架構
通過配置中心實現微服務的有效動態配置信息的存儲,在不同的運行場景下通過訂閱的模式將信息及時同步到微服務中。
業務系統拆分需要采用合理的粒度劃分,并不是簡單地將服務變小,要綜合考慮服務本身的業務復雜度。在微服務的設計階段,需要明確劃分微服務的邊界界面,微服務之間需要采取相對獨立并保持松耦合的劃分。服務拆分主要是為了增強橫向擴展性,微服務拆分應該以橫向拆分為主,而非縱向拆分成一串連續服務。
在信息提取階段,提取源代碼中結構信息,并利用結構信息和擬定的微服務列表來確定微服務之間的依賴關系。要識別微服務之間的依賴關系,有必要識別類之間的依賴關系,并將依賴關系與微服務建議關聯起來。
在數據庫重構階段,利用結構信息和微服務之間的依賴關系來確定哪些關系需要重構,通過將數據庫調用替換為微服務服務調用來實現對這些實體的重構,同時用外鍵維護了實體與實體之間的關系。
在代碼重構階段,利用結構信息和微服務之間的依賴關系來識別與其他微服務的類有依賴關系的實例變量,將這些實例變量對其他微服務的方法調用重構為微服務的服務調用。
微服務的拆分主要是基于業務復雜度,當業務復雜度高時基于領域驅動劃分服務,當業務復雜度較低時可以選擇基于數據驅動模式劃分服務。所有數據模型、領域模型設計均應遵循模型規范。基于領域驅動劃分服務流程如圖2所示。

圖2 基于領域驅動劃分服務
單體程序源碼和通過微服務拆分得到的擬定的微服務作為輸入,通過信息提取、數據庫重構和代碼重構三個步驟將代碼自動重構為微服務架構的應用程序。通用語言盡量以業務語言為主,而非技術語言,通用語言和代碼都需要不斷地重構,然后確定核心的業務流程逐步擴展到全部,內部討論逐步細化。基于數據驅動劃分服務如圖3所示。

圖3 基于數據驅動劃分服務
通過領域專家分析業務場景和特點,確定核心的業務流程,然后從中提煉出相關的數據結構,接著分析數據結構,識別服務,服務應該滿足高內聚、低耦合、單一職責等特征,確定服務調用關系,以服務為粒度實現時序圖。
同時融合綜合加權將詞粒度和句特征提取思路,設計基于詞句上下文的微服務特征提取方法,實現局部微服務拆分最優,基于詞語上下文的局部最優微服務提取方法如圖4所示。

圖4 基于詞語上下文的局部最優微服務提取方法
業務抽象提出詞語上下文,將提取出來的詞作為詞粒度編碼器的輸入、句作為句粒度編碼器的輸入,結合業務上下文語境,可以推導出詞粒度、句粒度向量,兩者融合可以形成線性層,最后形成融合上下文語境的特征向量。
結合微服務架構設計,應用到微服務拆分及微服務拓撲關聯方面,初步實現微服務的快速故障診斷和便捷維護功能,提升用戶對微服務體系運維的交付體驗,提供基于微服務的探索和列表展示,展示接入到平臺的微服務有多少個節點,以及節點運行情況,根據微服務調用鏈路形成微服務調用拓撲圖,展示微服務的調用依賴。微服務拓撲架構如圖5所示。

圖5 微服務拓撲架構
根據微服務調用時序形成微服務接口調用鏈,并且根據每個調用鏈的調用軌跡判斷服務調用異常點,在業務微服務不做任何改動的情況下可以方便接入,有助于后續大規模部署和實踐應用,自動形成微服務調用鏈和跟蹤鏈,方便在大型微服務應用場景下快速定位問題。
綜上所述,提出微應用、微服務拆分設計的原則,從多個維度給出了拆分需要遵循的技術要求,描繪了兩種拆分模式,給出了信息系統向微應用、微服務轉換過程中的拆分策略。