基於Spring Cloud及K8S構建微服務應用


摘要

廣發證券蔡波斯先生經過三個大方向來爲咱們分享基於Spring Cloud及K8S構建微服務應用。node

內容來源:2017年6月10日,廣發證券蔡波斯在「Spring Cloud中國社區技術沙龍-深圳站」進行《基於Spring Cloud及K8S構建微服務應用》演講分享。IT 大咖說做爲獨家視頻合做方,經主辦方和講者審閱受權發佈。
nginx

閱讀字數:1565 | 3分鐘閱讀docker

嘉賓演講視頻及PPT: t.cn/RTo2OTX

基於Spring Cloud構建微服務

Netflix OSS- Eureka

Eureka服務啓動註冊的等待時間比較久,註銷服務也須要等待,這是最終一致性。致使服務已經下線了,可是服務中內心還有,這時若是接到請求就會出現報錯的狀況。
json

Netflix OSS- Ribbon

Ribbon基於客戶端的負載。傳統的負載分爲不少種,好比服務端的負載、客戶端的負載、在host上統一的噴發等等。而基於客戶端的負載好處就是分部,但本地的服務註冊必需要和遠程保持同步的狀態。後端

Ribbon還提供了動態路由。有些用過其它框架的用戶會質疑,Netflix默認提供的路由rule裏,爲何不提供基於權重的路由方式呢?因爲每一個團隊的開發背景不一樣,Netflix的服務基本上都附屬在亞馬遜雲上,因此對於不少雲端的服務強調無狀態,在無狀態的狀況下基於權重的路由方式就沒有什麼意義了。安全

基於meta/tag可使用Ribbon對server instance進行過濾,而後再選擇。併發

Netflix OSS- Feign

Feign是在Ribbon的基礎上對HTTP的加強。框架

Feign有一個默認的重試次數設置。錯誤重試一次,第一次等待100毫秒重試,最大等待1秒重試。微服務

還有一個超時設置。超時設置分爲連接超時和讀超時,能夠在代碼裏設置。它默認的connectTimeout爲10秒,readTimeout爲60秒,默認的retry爲4次。外部nginx的proxy_connect/read_timeout設置要大於Feign的配置,才能起到fallback的效果。工具

Netflix OSS- Hystrix

Hystrix是由Netflix提出的對業界很重要的一個概念。

若是使用rest分隔進行微服務開發的話,對於Hystrix來講是服務調用失敗的,這時就必需要標註Hystrixbadrequest,否則它會把這些異常計算在內,致使整個接口服務的熔斷。

Hystrix還能經過線程組達到隔離的效果。

Netflix OSS- Gateway

Zuul的提出在當時是爲了適配不一樣的協議格式,給移動端或PC端帶來統一的入口。Gateway是有些相似微服務的概念。

做爲網關,它能夠添加或修改請求參數、header,修改響應body,經過zuul對動態路由進行操做。zuul負責網關層面的統一安全校驗,雖然在每一個微服務裏作了數據權限,可是登陸權限仍是在網關層作的。而服務聚合若是在網關層作會致使業務邏輯緊密耦合,須要找其它更好的方案去作。

Spring Cloud

SpringCloud要有動態推送能力,不然手工作refresh太麻煩。

Yaml配置容易由於忽略重複key而出錯,須要一個更加友好的工具,進行編輯、校驗。

要有更豐富的格式在config的配置,好比json。

Slack alert

集成報警的好處就是在持續集成的時候直觀地瞭解到服務部署的狀況並傳達出來。

基於docker及kubernetes部署微服務

萬物docker化

非關鍵的服務或設備均可以跑在docker上。

十二要素

1. 基準代碼:一份基準代碼,多份部署。

2. 依賴:顯式聲明依賴關係。

3. 配置:在環境中儲存配置。

4. 後端服務:把後端服務看成附加資源。

5. 構建,發佈,運行:嚴格區分構建和運行。

6. 進程:將應用程序做爲一個或多個無狀態進程運行應用。

7. 端口綁定:經過端口綁定提供服務。

8. 併發:經過進程模型進行擴展。

9. 易處理:快速啓動和優雅終止可最大化健壯性。

10. 開發環境與線上環境等價:儘量的保持開發,預發佈,線上環境相同。

11. 日誌:把日誌看成事件流。

12. 管理進程:後臺管理任務看成一次性進程運行。

Kubernetes Cluster

由於咱們相信google的能力,因此咱們選擇了Kubernetes。Kubernetes有本身的master,能夠在master下面的每一個node裏跑docker。

對pod的服務發現機制

經過虛擬的ClusterIP地址、虛擬端口號,動態負載分發到後端pod。

SpringCloud vs k8s

SpringCloud和k8s有不少功能是重複的,k8s沒有熔斷功能,也能夠經過附加的組件把它加進去。

BUILD+TEST+DEPLOY+MONITOR

Code review

Codereview是一個很是必要的過程,避免代碼腐化。

自動化測試

自動化測試能夠大大提升和保證質量。

對於線上來講,每隔幾分鐘就跑一下服務,以保證線上服務正常。

藍綠部署

藍綠部署和docker緊密結合。在雲端空間足夠的狀況下,能夠利用docker容器進行大規模部署。部署一個green並檢查,而後生產流量指向進行canary測試,完成後再把流量導過來。

若是服務有bug,還能夠趁blue沒有銷燬,把負載指向blue,儘可能避免部署失敗。

Netflix-OSS紅黑部署

經過 Eureka實現服務的下線和上線。

K8s-rolling update

整個部署自動化,經過參數控制,保證rolling update服務儘量是無損的。

我今天的分享就到這裏,感謝聆聽!

相關文章
相關標籤/搜索