導讀:Uber成長很是迅速,工程師團隊快速擴充,聽說Uber有2000名工程師,8000個代碼倉庫,部署了1000多個微服務。微服務架構是Uber應對技術團隊快速增加,功能快速上線很出色的解決方案。本文偏向微服務的入門篇,以Uber微服務爲例,進行了深刻淺出的講解。數據庫
對於微服務沒有適當的定義,你能夠說它是一個框架,由小型的、獨立的可部署的服務組成,執行不一樣的操做。安全
微服務專一於單個業務領域,能夠做爲徹底獨立的可部署服務,並在不一樣的技術棧上實現它們。服務器
在使用微服務構建本身的應用程序以前,須要清楚地瞭解應用程序的範圍和功能。架構
在當今世界,複雜性已經滲透到產品中。微服務架構可以更好地保持團隊的規模和功能。框架
如下是微服務設計的最佳實踐:異步
如今,讓咱們來看一個用例來更好地理解微服務。分佈式
案例:購物車應用程序微服務
當打開購物車應用程序時,你看到的只是一個網站。可是,在幕後,購物車應用程序有接受支付服務、顧客服務等等。
假設開發人員已經在一個總體框架中進行了建立。以下圖:
全部功能都放在一個代碼庫中,並在一個底層數據庫下。
如今,假設市場上出現了一個新品牌,開發人員但願將這個品牌的全部細節都放在這個應用程序中。
他們不只要從新爲新標籤提供服務,還必須從新構建完整的系統並進行相應部署。
爲了應對這種挑戰,開發人員決定將其應用程序從單體架構轉移到微服務。以下圖:
這意味着開發人員沒必要建立Web微服務,邏輯微服務或數據庫微服務。相反,他們爲搜索,推薦,客戶服務等建立單獨的微服務。
這種應用架構不只有助於開發人員克服之前架構面臨的挑戰,還有助於輕鬆構建,部署和擴展購物車應用程序。
在設計微服務時,已經瞭解了基本的指導方針,如今來了解一下微服務的架構。
一個典型的微服務架構(MSA)應該包括如下組件:
以下圖:
這個架構看起來有點複雜,讓咱們來簡化一下。
一、客戶端
架構始於不一樣類型的客戶端,從不一樣的設備嘗試執行各類管理功能,如搜索、構建、配置等。
二、身份提供者
這些來自客戶端的請求將傳遞給身份提供者,這些提供者對客戶端的請求進行身份驗證,並將請求傳遞給API網關。而後,請求經過定義良好的API網關與內部服務通訊。
三、API網關
因爲客戶端不直接調用服務,所以API網關做爲客戶端將請求轉發到適當的微服務的切入點。
使用API網關的優勢包括:
在接收到客戶端的請求後,內部架構由微服務組成,這些微服務經過消息相互通訊來處理客戶端請求。
四、消息格式
有兩種類型的消息經過它們進行通訊:
下一個問題是,使用微服務的應用程序如何處理數據?
五、數據處理
每一個微服務都擁有一個專有數據庫來捕獲它們的數據並實現相應的業務功能。此外,微服務的數據庫只經過其服務API進行更新。參考下圖:
微服務提供的服務被轉發到任何支持不一樣技術棧的進程間通訊的遠程服務。
六、靜態內容
在微服務內部進行通訊後,將靜態內容部署到基於雲的存儲服務,經過內容交付網絡(CDN)直接將其交付給客戶端。
除了上述組件,還有一些其餘組件出如今典型的微服務架構中。
七、管理
該組件負責平衡節點上的服務和故障識別。
八、服務發現
用做微服務的指南,以找到它們之間的通訊路由,由它維護節點所在的服務列表。
如今來看看這個架構的優缺點,以更好地理解什麼時候使用這種架構。
微服務架構的優勢 | 微服務架構的缺點 |
---|---|
自由使用不一樣的技術 | 增長故障排除難題 |
每一個微服務都關注單一業務能力 | 因爲遠程呼叫而增長延遲 |
支持單獨的可部署單元 | 增長配置和其餘運營工做量 |
容許頻繁的軟件發佈 | 難以保持交易安全 |
確保每項服務的安全性 | 很難跟蹤各類服務邊界的數據 |
並行開發和部署多個服務 | 服務之間很難移動代碼 |
下面來比較一下UBER以前和如今的架構。
Uber以前的架構
像許多初創公司同樣,UBER在開始之初在單一城市運營,爲單一產品打造了單體架構。當時有一個代碼庫彷佛被清理了,並解決了UBER的核心業務問題。然而,隨着UBER在全球範圍內擴張,它們在可擴展性和持續集成方面面臨各類各樣的問題。
上圖描述了UBER以前的架構。
所以,能夠發現這裏全部的特性,好比乘客管理、計費、通知功能、支付、行程管理和驅動管理都是在一個框架內完成的。
問題陳述
當Uber開始在世界範圍擴張時,這種框架引入了各類各樣的挑戰。如下是一些突出的挑戰。
解決方案
爲了不此類問題,Uber決定改變本身的架構,效仿亞馬遜(Amazon)、Netflix、Twitter等其餘超級增加公司。所以,Uber決定將其總體架構拆分爲多個代碼庫,以造成一個微服務架構。
參考下面的圖表,看看Uber的微服務架構。
例如,咱們都知道,搜索出租車的人數比預訂出租車和付款的人要多。這就獲得了一個推論:在乘客管理微服務上工做的流程的數量超過了處理支付的流程的數量。
經過這種方式,Uber將其架構從單一業務轉移到微服務中獲益。
原文連接: