Spinnaker第二節-微服務設計

本篇詳細介紹一個spinnaker項目的微服務設計,這裏之所以叫微服務設計,而不是叫微服務架構,是因爲spinnaker是由Netflix和Google多個開源產品搭建的微服務節點組合成的一個微服務組羣,裏面摻雜了Go、Groovy、Node.js各種語言,並沒有採用流行的Spring Cloud這樣的架構

 

我們理解的傳統的微服務架構包括以下部分:

我們先不說具體的細節,我們可以看得出從大體方向上微服務架構是具備一定方法論的,需要配套一系列輔助和管理節點來幫助我們完成服務的治理。

 

Spinnaker雖然沒有這種治理的理念,我仍認爲它是微服務設計,是因爲很多節點項目在2012年就啓動了,那個時候還沒有SpringCloud,很多Spring Cloud的雛形代碼都是從這些開源項目裏獲取的靈感。我對微服務的理解是,只要對功能的拆分做的好,節點職責明確,每個節點間通過ResfFul鬆耦合調用,節點內部也具備高擴展性,就可以稱之爲微服務設計。

 

具體看下Spinnaker每個服務節點的能力職責

 

Deck—前端UI

這個節點是node.js開發的一套前端的UI界面,爲操作人員提供可視化的界面,唯一對接的後端接口是gate。

 

Gate—服務網關

與SpringCloud中zuul一樣,Gate節點負責對後端端口進行路由轉發和鑑權,只不過這裏的鑑權並不是由Gate自己提供的,還調用了另一個叫“Fiat”的服務節點。Fiat和Gate互相配合完成鑑權,關於如何鑑權我們在Fiat節點中詳細說明。

 

Fiat—服務鑑權

Spinnaker關於賬號的安全限制分爲兩個方面:鑑權Authentication和授權Authrization。鑑權是對賬號合法性的認證,授權是授予這個賬號什麼樣的權力。spinnaker先交給了Fiat這個微服務節點來處理鑑權,得到登陸賬號後把用戶名和是否合法傳給gate,gate再去調用fiat的授權接口。Spinnaker的賬號密碼是非侵入性的,也就是說它沒有獨立的用戶倉庫,完全靠LDAP、github、SAML和自定義文件配置等方式直接集成到企業系統中。

 

Front50

Spinnaker中專門負責存儲的地方,對接的是AWS中的S3、Redis、minio(可以理解爲本地的一個S3桶)、Google的Storage和微軟的Storage,可以說把國外主流的雲存儲都支持了一邊,

 

CloudDriver

Spinnaker的三大核心之一,負責對接雲平臺API的微服務節點,看似功能比較單一,只是調用雲平臺SDK而已,但是要知道每接入一種雲就要將這個雲的所有SDK幾乎都要對接一遍,這可是個十分龐大的工作量。原生版本支持OpenStack、AWS、Google雲、微軟雲、K8s,2019年6月份騰訊雲接入了進來,成爲國內首位支持spinnaker的雲廠商,2019年8月阿里雲將會接入,京東雲華爲雲已經開始制定接入計劃。

 

Rosco

Spinnaker中負責製作鏡像的微服務節點,理論上它應該也屬於clouddriver的一部分,但是由於製作雲平臺的鏡像是個獨立而複雜的功能,而且需要引入packer這樣的專業工具,所以spinnaker將它專門拆分了出來。

 

Echo

這是spinnaker中負責跑堂的店小二,從字面意思看是負責通知的微服務,其實它還幹了很多其它的輔助工作,例如定時任務、事件監聽等,用dota的話說是標準的5號位,打信息的,沒啥技術含量,專幹體力活。

 

Igor

這是spinnaker中的外交官,負責對接一切CI/CD領域流行的工具,例如Jenkins、github、travis等,就像一個插排轉接頭,負責與外面工具進行集成。

 

Kayenta

這也是spinnaker三大核心之一,負責金絲雀分析的微服務節點。它對接了Stackdriver、Atlas、 Prometheus、Datadog這些主流的監控工具,可以讓我們拋開業務層面直接拿新版本鏡像與在網版本鏡像進行CPU、內存、磁盤、IO、網絡請求等各種維度的比對,並賦予一定權重,最終給出0-100之間的一個參考分數,輔助我們判斷新版本的可用性。

 

Orca

Spinnaker三大核心之首,負責整個微服務的“編制”工作。Spinnaker將一些串行的任務指定爲一個個的stage,而前臺UI提供了可視化的界面將這些stage串聯起來形成一個個的pipeline。Orca就是負責這些Pipeline中stage的調度的。舉個例子要發佈一個軟件包首先要經過baker這個stage,orca會去調用rosco進行處理;然後有了鏡像後經過deploy這個stage去highlander部署,orca會去調用clouddriver創建伸縮組、創建伸縮配置、創建伸縮規則、監聽實例狀態、縮容在網伸縮組、切換LB的流量、銷燬在網伸縮組等一些列接口,一旦中間發生異常需要通知echo進行告警。

 

Halyard

有點像Spring Config+Spring Bus的組合體,是spinnaker爲了操作方面開發出的命令方式管理工具,按照spinnaker的hal命令操作手策輸入不同的命令和參數,halyard就會將這些配置更新到對應的微服務yml配置中去。

 

Spinnaker整個設計就像積木一樣,每個節點都可以獨立運轉並具備獨當一面的功能,而做爲混合雲持續部署平臺,Orca、CloudDriver、Rosco、Front50、Gate、Deck這6個是必選的,如果需要安全加固就引入fiat,如果需要通知機制就引入echo,如果需要金絲雀分析就引入kayenta,如果要跟其它工具集成就引入igor。Halyard也不是必須的,因爲一旦熟練後完全可以直接修改對應服務的yml配置文件。

 

所以微服務設計的產品,重在功能的拆分,而且每個節點也具備獨立的服務能力和高擴展性。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章