微服務具備如下的特色。前端
口 按照業務來劃分服務,單個服務代碼量小,業務單一,易於維護。 口 每一個微服務都有本身獨立的基礎組件,例如數據庫、 緩存等,且運行在獨立的進程中。 口 微服務之間的通訊是經過 HTTP 協議或者消息組件,且具備容錯能力。 口 微服務有一套服務治理的解決方案,服務之間不相合,能夠隨時加入和剔除服務。 口 單個微服務可以集羣化部署,而且有負載均衡的能力。 口 整個微服務系統應該有一個完整的安全機制,包括用戶驗證、權限驗證、資源保護等。 口 整個微服務系統有鏈路追蹤的能力。 口 有一套完整的實時日誌系統。
微服務的功能主要 體如今如下兒個方面。數據庫
口 服務的註冊和發現。 口 服務的負載均衡。 口 服務的容錯。 口 服務網關。 口 服務配置的統一管理。 口 鏈路追蹤。 口 實時日誌。
全部的服務都向服務註冊中心註冊,服務註冊中心持有每一個服務的應用名和 IP 地址等信息,同時每一個服務也會獲取全部服務註冊列表信息。
服務消費者集成負載均衡組件,該組件會向服務消費者獲取服務註冊列表信息,並每隔一段時間從新刷新獲取該列表。當服務消費者消費服務時,負載均衡組件獲取服務提供者所 有實例的註冊信息,並經過必定的負載均衡策略(開發者能夠配置〉,選擇一個服務提供者的 實例,向該實例進行服務消費,這樣就實現了負載均衡。
服務註冊中心不但須要定時接收每一個服務的心跳(用來檢查服務是否可用),並且每 個服務會按期獲取服務註冊列表的信息,當服務實例數量不少時,服務註冊中心承擔了 很是大的負載。因爲服務註冊中心在微服務系統中起到了相當重要的做用,因此必須實 現高可用。 通常的作法是將服務註冊中心集羣化,每一個服務註冊中心的數據實時同步, 如圖 2-3 所示。
後端
Netflix 的 Hystrix 熔斷器開源組件功能很是強大,不只有烙斷器的功能,還有熔斷器的狀態 監測,並提供界面友好的 UI, 開發人員或者運維人員經過 UI 界面可以直觀地看到熔斷器的狀 態和各類性能指標。
其他就不作多餘講解了,有興趣的同窗能夠看看前面的文章。緩存
微服務系統經過將資源以 API 接口的形式暴露給外界來提供服務。在微服務系統中, API 接口資源一般是由服務網關(也稱 API 網關〉統一暴露,內部服務不直接對外提供 API 資源 的暴露。 這樣作的好處是將內部服務隱藏起來,外界還覺得是一個服務在提供服務,在必定程 度上保護了微服務系統的安全。 API 網關一般有請求轉發的做用, 另外它可能須要負責必定的 安全驗證,例如判斷某個請求是否合法,該請求對某一個資源是否具備操做權限等。一般狀況 ,網關層以集羣的形式存在。在服務網關層以前,有可能須要加上負載均衡層,一般爲 Nginx 雙機熱備,經過必定的路由策略, 將請求轉發到網關層。到達網關層後,通過一系列的用戶身 份驗證、權限判斷, 最終轉發到具體的服務。具體的服務通過一系列的邏輯運算和數據操做, 最終將結果返回給用戶 ,此時的架構如圖 2-6 所示。
安全
網關層具備很重要的意義, 具體體如今如下方面。服務器
實現這些功能,須要作高可用,不然網關極可能成爲架構中的瓶頸。 最經常使用的 網關組件有 Zuul、 Nginx 等。網絡
在微服務架構中,須要有統一管理配置文件的組件, 例如 Spring Cloud 的 Spring Cloud Config 組件、阿里的 Diamond、百度的 Disconf、攜程的 Apollo 等。 這些配置組件所實現的功 能大致相同,{旦又有些差異,下面以 Spring Cloud Config 爲例來闡述服務配置的統一管理。
架構
對於集羣化的服務, 能夠經過使用消息總線來刷新多個服務實例。若是服務數量較多,對配置 中心須要考慮集羣化部署,從而使配置中心高可用,作分佈式集羣。app
在微服務系統中 , 一個來自用戶 的請求先達到前端 A C如前端界面),而後經過遠程調用,達到 系統的中間件 B、 c (如負載均衡、網關等),最後達到後端服 務 D、 E。後端通過一系列的業務邏輯計算,最後將數據返回給 用戶。對於這樣一個請求, 經歷了這麼多服務, 怎麼樣將它的 請求過程的數據記錄下來呢?這就須要用到服務鏈路追蹤。
目前,常見的鏈路追蹤組件有 Google 的 Dapper、 Twitter 的 Zipkin,以及阿里的 Eagleeye (鷹眼)等,都是很是優秀的鏈路追蹤開源組件。負載均衡