一個微服務框架的情節


記得14年初下定決心重構系統的那一刻 ,“一切從簡”的欲望尤為強烈,只因事情已經被“復雜”堵得水泄不通,其實歸根到底還是過往自身的工具化思維局限了問題“最優解”的選擇。對於一個“入世未深”的小伙來說,“簡單”僅僅是簡單。但無論如何,能把“簡法”付諸行動,就已經不很簡單了。

每當代碼打包發布的時候,一個上百兆的部署文件讓我深感憂慮。我的擔憂並非空穴來風,一次又一次的瓶頸讓我驗證了這該死的擔憂。面對這樣一個龐然怪物,就算無數個“通宵”也削減不了我對它的力不從心,“分解”成為了我當時的唯一想法。因為“分解”是我們人類處理復雜的一種常識化手段,它能讓我把一條復雜的數學題逐一破解,也能讓我把一項艱巨的任務分而治之,更讓我看到了人類從“自給自足”到“專業化分工”的魅力。

無可否認,MVC是互聯網時代的“王者榮耀”,但隨着移動互聯網的發展,我試圖尋找另一種更適合多端消費的服務化抽象模式。如果我只是單純地把沉重的SSH切換到當時較為流行且輕量的SSM,其實並沒有太多本質上的區別。我們當時的這種“服務化”分解其實更多地想給“消費者”提供一種輕量化、標准化、抽象化的服務支撐,如果要用專業術語來形容,可能SOA(面向服務架構)更為貼切。但ESB和WS作為當時SOA的主流實現和工具,它們的“沉重”讓我望而卻之。

有想法對於一個年輕人來說再正常不過,但把能把這想法付諸實現還是需要一定的付出、勇氣和機遇。才疏學淺的我在當時並未看到“服務化”的普及,選擇一款成熟且契合自己思路的工具也不是一件容易的事,又或許是我內心當時那份熱血澎湃的重構欲望在日益膨脹。幸運的是,開放的平台給了我足夠開放的心態、空間和信心去打造屬於我們的“輪子”。

“簡單”是我們設計的首要原則,因為簡單賦予了靈活,提高了效率、增強了可控,而且自主研發的約束范圍也會遠遠大於工具的選擇,為“簡化”創造了無限可能。開源工具的思考邊界可能更多地會集中在技術引擎和技術規范二者之間,因為它必須抽象在應用場景之下才能達到一定的通用性,所以開源的考慮會非常周到且功能齊全,但會存在一定的“臃腫”和“個性化”局限,這也是我們“自造輪子”的重要考慮之一,但更重要的還是從本質出發。

“服務化”的設計理念會把應用根據“領域邊界”分解成一個個獨立的“服務進程”。其實,划分后的應用系統跟操作系統還是有幾分相似之處,服務好比進程,線程好比服務的業務執行單元。事實上,它們在運行過程中就是這樣一種上下層的對應關系。

線程的執行是基於棧幀的“跳進跳出”,而業務的執行是基於“流程”的線性執行。“流程”是業務執行的線性抽象,對“流程”的分解、定義、組織和管控恰恰就是我們對“技術引擎”設計的關鍵所在。

對流程的抽象並非想說明我們“輪子”的獨特之處,而是嘗試對流程本質進行重新理解。因為本質,所以無論SSH還是SSM都能作為該抽象流程的一種實現。但是,我們要做的是嘗試重新透過現象看本質,然后基於本質之上一磚一瓦重新打造出我們“服務化”理念的另一種實現。

一張白紙的背后可能隱藏着數十道工序的運作,我們“輪子”每磚瓦的堆砌同樣少不了對系統從始至終、由里到外的無數次觀察和思考。每一次的重構都千差萬別,每一次的放棄都異常掙扎,但每一次都更接近於自己的內心。

除了服務交互協議層外(Service Interaction protocal),我們把框架總體划分為框架服務(Framework Service)、基礎服務(Base Service)和業務服務(Business Service)三個層次,各層次服務都是由定時器模塊組件(Timer)、初始化模塊組件(Initor)、銷毀模塊組件(Destoryer)、業務前置模塊組件( SB_Module)、業務后置模塊組件(SA_Module)以及業務實現模塊組件(Services)組成。從結構上看,每一層的服務都內嵌於它上一層的服務之中,讓各種模塊組件形成了一種高約定、標准化、插拔式的切面規則。

從開發框架的切面結構上看,框架的規范化約束已經弱化了傳統的三層結構模式,把一切非核心邏輯“邊緣模塊組件化”,重點關注業務的核心邏輯實現。

因“欲望”的驅動,“自由”成為人性放飛自我的向往,但無拘無束的“自由”往往會對人性的自我控制形成嚴峻的考驗,否則不會“無規不成圓”。“自由”和“約束”看似一種魚和熊掌的關系,實際上,“約束”是邁向“自由”必不可少的前提。所以,“約束”可以讓我們盡量地減少了配置、封裝和依賴,盡量以一種簡潔、高效且通俗易懂的工具形態讓執行者“自由地”聚焦在問題的本質之上。

以上的服務定義主要源於我們對技術引擎的流程抽象分析。但業務服務(BUSINESS)本身除了具備核心業務的能力支撐以外,背后還隱藏着一個對核心業務的管理職責(俗稱服務信息管理平台)。因此,我們繼續把服務按功能性類別分解為“面向服務支撐(SOP)”和“面向服務管理(SMP)”兩大類服務類型,無論業務支撐還是信息管理都實現了前后端的分離,把輕量化SOA演繹得淋漓盡致。因為基礎服務與業務服務的強關聯性,基礎服務同樣被細分為BASESOP和BASESMP兩大類基礎服務。

服務目錄命名規范中的xxx為業務服務自定義標識,模塊組件命名規范中的XXX為三位純數字組合,除了唯一性的約束以外,還具備了內部模塊組件(除業務實現模塊)執行順序的規范化約束,這一點跟Linux的運行級別中的運行腳本命名規范還是有幾分相似之處(KXX.../SXX...)。

從某個角度來看,人性的“懶惰”是社會進步的動力,它激發了人類創造的欲望來釋放自己並減少一系列人為的不穩定性。但在那些尚未被工具自動化或智能化所覆蓋的領域,適當的提前約束和規范同樣是對人為管理的一種自動化體現。

框架的會話上下文(SessionContext)是線程流程代理及其模塊組件解耦的關鍵所在,它承載着整個線程生命周期的狀態信息,如業務會話(抽象)對象、請求報文對象(JSON)、響應報文對象(JSON)、模塊組件內部執行上下文以及關系數據庫事務控制等數據和信息。而框架服務內更多地集成了流程的一些應用規范化實現,如服務並發控制攔截,數據統一解析、安全攔截驗證 、數據統一響應輸出以及統一規范化日志記錄等基礎應用實現。此外,框架還集成了如關系數據庫、內存數據庫、遠程過程調用等規范化的“數據適配器組件”,讓業務的核心邏輯更加輕量和清晰地聚焦在業務層面(Service)。最終,應用服務基於標准化的應用規范之上實現了全方位的流程代理及管控。

經濟學認為“交換驅動發展”,這是人類從自給自足發展至全球化分工的一個演變“真理”。而互聯網的出現更讓交換出現了前所未有的低成本、大范圍,甚至把數量龐大的“物”也“卷入”了交換的浪潮,把未來的一切想象無限放大。“服務化”應用同樣是信息交換驅動發展的一種演變和趨勢,一個個具有“獨立領域行為”的個體服務在信息交互過程中增加了各種應用行為“涌現”的可能性。

服務發現中心(KingWorks-RDC)在服務網絡中扮演了信息登記服務的角色,有點類似於DNS服務在互聯網中的定位,“模糊”了主機的位置,解耦了服務之間的關聯。歸根到底,RDC是一個基於服務開發框架(KingWorks-SDF)建設的“動態解析”支撐類信息服務。而微網關(KingWorks-MSG)則是一個內置於服務開發框架的服務請求代理組件,除了具備基於RDC動態代理的實現,還兼顧了“靜態解析”的預留,為一些“穩定”的服務應用場景省去了動態的消耗。

服務信息的動態解析是基於“服務信息中心”組件的周期更新,此外,RDC還預留了“服務變更”主動推送通知功能,需要此功能的服務只需要通過“推送開關”配置即可實現RDC的服務變更實時推送通知(非強一致性),提高本地服務對敏感信息更新的實時性。另外,對於一些存在多服務區域(多局域網)的應用場景,我們通過對本地服務信息(IP1&PORT1)和外部服務信息(IP2&PORT2)的區分讓“混合雲”的服務化應用成為可能。

凡事都有兩面性,好壞優缺得失並存,但是善於“揚長補短”的人類注定不會讓社會成為一個“零和游戲”。當我面對服務化多節點所導致的高額人工維護成本時,自動化工具將是這場“正值游戲”的重要手段。

自動化管控服務(KingWorks-OPS)是整個服務化應用的管控平台。底層主要是由一個C/S模式的腳本任務調度引擎支撐,C是一個內嵌於應用服務的任務執行代理(OPS-Agent By Python),提供了定時和實時的執行入口,而S則是一個任務調用管控服務,集中式對所有服務任務進行管理、配置以及調用。基於引擎之上的,就是面向場景的集成,如服務統一配置與管控、數據集中可視化監控、自動化告警處理以及自動化實施等場景的擴展。

人的一生其實可以歸納為只是自己與大腦的一場游戲,行動受控於思想,且行為上變化更多是自身的潛在思維與受控思維的一場較量,就像我們應用從傳統到服務化的轉變無非就是一場“自我驅動”對“隨波續流”發起的挑戰。改變了思維,改變了技術,當然,也改變了我們團隊的協作方式......

 

 “DEV-TEAM”主要是由1個組長+2~3個組員組成的服務開發小組,基於開發框架的模式我們把小組主要划分為前端小組(Android、iOS、H5)以及服務端小組(設計、開發、測試、實施、維護),各個服務開發小組靈活地游離於各個項目之間,每個項目必須配備一個項目經理,一個項目經理可以同時管控多個項目,就像一個服務開發小組同時服務於多個項目。各個服務小組都有自己擅長的業務領域,隨着團隊經驗的積累以及自我驅動,服務組件的沉淀就是一件水到渠成的事情。當然,這一切的前提都是基於我們統一的服務化思想,集中力量於同一焦點,把效能最大化。

 服務化思想其實並不是什么新鮮事,它早已游離在我們的生活之中,因此會讓我們產生一種似曾相識的感覺,這也許就是事物的相通性,而這種相通性的本質可能就是源於我們人性深處的某一種共性。

轉眼間,十二一輪回,將近四年的服務化實踐經歷堪比十二載,但初衷還在,只是簡單已不再是單純的簡單,更多地會是一份發自內心從容的簡單。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM