《微服務架構下,如何打造別具一格的服務治理體驗?(上)》要點:
本文介紹了微服務架構下,如何打造別具一格的服務治理體驗?(上),希望對您有用。如果有疑問,可以聯系我們。
作者介紹
本文將包括以下內容:
2、微服務計算平臺的設計思想與抽象模型
3、打造微服務計算的基礎三件事
4、總結
經典的微服務架構一般包含兩個部分:API網關,一組微服務.API網關是唯一的請求入口,它還要負責負載均衡,路由編排,失效切換等工作.
經典的微服務架構圖(來源網絡):
關于經典微服務架構的文章很多,這里重點想分享一些我們實踐經典微服務架構的一些問題:
整體看來,經典微服務架構還不夠“聰明和智能”,于是我們設計并著手研發新一代微服務計算平臺,希望能夠讓其充分發揮微服務架構的優勢和特性.
“微智能”這個概念起源于智能家居,是目前智能硬件領域的一股創新思想.在提到“智能”這個詞,通常是相對人而言,智能家居通過“智”的體現,更好的服務人的生活.于是,我們就思考是否系統或者服務也能體現“智”,如果與微服務相結合,讓其更加“聰明”的工作?
先來看看微智能的設計思想:
1)自動發現:即真實的反映現實世界,盡可能利用“自動化”手段捕獲現實情況并提取有效”信息”.微服務實際上對原有的單體系統或”重”服務進行了拆分,意味著服務種類以及服務實例個數會成倍增加,依靠人工整理或編排的手段變得笨重滯后.自動發現實現了微服務生命周期管理初始環節的自動化.
2)自我維護:即形成“閉環”反饋回路,將“輸入”或“中間”或“結果”信息再反饋到系統中,合并成新的“輸入”或“中間”或“結果”信息.真實世界的信息變化很快,為了盡量趨近真實,需要不停的迭代.微服務架構除了更多的服務實例個數(規模增長),也意味著更加“多變復雜”的服務更迭(變更頻率增長),自我維護實現了微服務生命周期管理更迭的自動化.
3)自動適應(適配):自動適應拓展了自動發現+自我維護的思想外延,是“智”的體現.根據自動發現的信息適配相應的處理(初次適應);根據自我維護的反饋,不斷調整(迭代適應).比如服務降級的閥值,其實不同時間不同資源使用情況下這個閥值是動態變化的,在數百服務實例的級別都已無法依靠人工來進行調整,而需要每個服務實例依據上下文的環境以及歷史狀態的分析自主的調節.
所以微智能設計思想的三個核心原則正是構建“智”的微服務計算平臺的基礎指導思想.
有了微智能的思想,我們還需要重新認識“服務”.什么是微服務,社群里有很多文章都分享了相關的內容.我們理解服務的“微”體現在:
這里引入一個很有意思的思考:社會是由人(個體)構成的相互協作的群體,每個人都可能具備幾種技能,并使用這些技能參與到社會分工協作中去.具備同種技能的人可以一起協作來提高生產效率和提供可靠性高的生產輸出;具備不同技能的人可以在某一件事情上進行分工協作,形成生產流水線.
其實可以發現微服務的特性跟人類社會的運作方式很像.服務實例就是個體,服務能力就是技能,允許服務實例具備幾種服務能力,具備相同服務能力的實例可以看做同類型的實例,多個同類型實例構成的集群可以實現負載均衡和高可用,不同類型實例可以被編排在一起完成業務流程.我們把這種分布式設計稱為“擬社會化”.
“擬社會化”分布式設計抽象圖:
“擬社會化”分布式設計的特點:
這里可能有個疑問:為什么允許某個服務計算節點有多個服務能力,這是不是一種“倒退”,不符合微服務的原則?其實主要有兩個方面的原因:
這里舉兩個例子對“擬社會化”分布式設計的應用加以說明.
實踐實例一:短信系統是常見的高并發系統,在互聯網環境下可能因為各種營銷活動引起Peaktime,常規的做法是增加資源,但現實是資源池是有限的,而且多數時候Peaktime會波及整個營銷活動鏈條的系統,這些系統都需要增加資源,很快資源池就分光了.在“擬社會化”的分布式設計下,可以通過服務能力的快速切換,把一些業務休眠或在當前時間段體量小的服務能力的計算資源向Peaktime的服務能力集中,在Peaktime過去以后,又能快速的恢復原集群.同時,可以發現另一個特性的體現:軟件定義集群.這個特性會在以后的分享專題中專門說明.
實踐實例二:在P2P業務中,線下簽約通常是白天進行而晚上無業務,而簽約數據的統計工作是T+1的模式,是在晚上進行.傳統方式是部署兩個完全獨立的系統,而“擬社會化”的分布式系統通過復合能力節點,以服務能力切換的方式實現同一套計算資源的復用.
接下來,就是把微智能思想和擬社會化分布式設計統一起來,構建微服務計算平臺的計算節點抽象模型.它遵循以下原則:
計算節點抽象模型:
服務能力是一種計算能力,分為基礎服務能力和業務服務能力.
按照以上原則,服務計算節點還提供了三類基礎支持:
值得注意的是,服務能力可以被裝配或卸載,這個過程分為Soft模式和Hard模式.Soft模式是通過配置的方式,服務能力的實現(例如jar包)還存在;Hard模式就是配置與實現一起裝配或卸載.實際應用中,Soft模式更加靈活,服務能力實現的變更可以交給節點升級來做.
當然計算節點自身管理包含工作有很多擴展,要根據實際需求定義.
微服務計算平臺實現服務治理首先要解決三個基礎:服務注冊與發現,服務監控,服務調用控制.
1)服務注冊
經典的服務注冊方法有以下兩種:
但它也有如下問題:
基于前文的計算節點模型,我們的微服務注冊過程如下:
我們的服務注冊過程是以心跳系統為基礎的,服務注冊是心跳事務中的一種.實際上服務注冊中心是基礎服務能力“心跳服務端”的功能,而它的載體是另一個計算節點(如圖服務計算節點B),這也是計算節點的對等性體現,因為任何一個具備心跳服務端能力的計算節點都可以作為服務注冊中心.
在大規模部署服務計算節點時,往往還會遇到跨大網段,跨機房,跨IDC中心,白名單IP策略等問題.所以心跳系統還支持“心跳級聯代理”模式,其作用是允許建立多級的心跳群,每個群由若干“代理”心跳服務端組成,它們只負責轉發心跳信息,所以服務注冊信息也依靠這個過程進行轉發到服務注冊中心.
在某些特殊業務場景下,對服務注冊信息更新延遲容忍度較低,這時,讓心跳級聯的計算節點也作為服務注冊中心.如下圖,節點B是1級服務注冊中心(以下簡稱1級中心),節點C是2級服務注冊中心(以下簡稱2級中心).1級中心會存儲向自己提交的服務注冊信息,也會把這些信息轉發到上級服務注冊中心.2級中心上可見所有下級中心的服務注冊信息.這種模式可以獲得更快的服務發現,因為同級的節點發現其他節點服務能力只需經過本級服務注冊中心即可,下文會結合服務發現做詳細解釋.
服務注冊中心依靠TTL的方式對服務接口注冊信息進行生命周期管理.我們定義生命狀態如下:
另一個關鍵點是服務接口名的定義,它應該是全局唯一的命名,因為在多個服務能力之間互相調用時是以服務接口名為目標的.在服務畫像時,會自動生成服務接口名,它提取以下三類信息:
它們共同構成服務接口名,例如:
runtimenotify-RuntimeNotifyServerWorker-/rtntf/oper
hbserveragent-HeartBeatServerListenWorker-/heartbeat
2)服務發現
服務發現的本質是通過服務接口名查詢服務注冊中心,服務注冊中心基于某些策略返回服務接口可用地址列表,服務調用方也可以基于某些策略來使用地址列表.
微服務計算平臺的服務發現過程如下:
在心跳級聯代理模式下的服務發現與常規模式類似,這里不做詳述.
多級服務中心模式下的服務發現:
上文提到在多級服務注冊中心模式下,可以獲得更快的服務發現.從心跳客戶端的角度來看,其實沒有差別,但是如果是查詢同級的服務接口,在1級中心立刻查到,無須去2級中心;對于查詢跨級的服務接口,則需要從2級中心獲取,并會在1級中心緩存,從而加快跨級查詢.有一點注意,1級中心的緩存也是TTL的,并且生存周期要短于2級中心,這是性能和時效性的互相適應的結果.因為從1級查緩存雖然快,但是1級中心無法判斷跨級服務的存活,所以長時間的緩存可能是錯誤的信息,縮短TTL時長是為了更快更新跨級服務的地址信息.
服務接口失效的快速反饋:
當業務服務能力X調用Http服務能力A遇到異常時,服務能力實現框架會自動捕獲異常信息,并將系統性異常(Timeout,SocketException等等)以及某些業務異常(基于策略)提交到服務注冊中心,這個過程不必等到心跳周期到達而是立即觸發的,從而服務注冊中心可以實現對這些服務接口的快速隔離.而其他打算調用該服務接口的其他服務能力,通過心跳下行獲得地址列表更新.這樣的方式可以彌補TTL機制可能的延遲.
另外說明一下為什么沒有使用Zookeeper類似的長連接(盡管時效性更好),主要有如下原因:
文章出處:DBAplus社群(訂閱號ID:dbaplus)
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/4403.html