服務提供者如何發佈一個服務,服務消費者如何引用這個服務。具體來講,就是這個服務的接口名是什麼?調用這個服務須要傳遞哪些參數?接口的返回值是什麼類型?以及一些其餘接口描述信息
最多見的服務發佈和引用的方式有三種:
RESTful API (通常對外)
XML配置 (對內)
IDL文件(跨語言,Thrift, gRPC)mysql
在微服務架構下,主要有三種角色:服務提供者(RPC Server)、服務消費者(RPC Client)和服務註冊中心(Registry)。正則表達式
RPC Server提供服務,在啓動時,根據服務發佈文件server.xml中的配置的信息,向Registry註冊自身服務,並向Registry按期發送心跳彙報存活狀態。redis
RPC Client調用服務,在啓動時,根據服務引用文件client.xml中配置的信息,向Registry訂閱服務,把Registry返回的服務節點列表緩存在本地內存中,並與RPC Sever創建鏈接。算法
當RPC Server節點發生變動時,Registry會同步變動,RPC Client感知後會刷新本地內存中緩存的服務節點列表。sql
RPC Client從本地緩存的服務節點列表中,基於負載均衡算法選擇一臺RPC Sever發起調用。瀏覽器
註冊中心的實現主要涉及幾個問題:註冊中心須要提供哪些接口,該如何部署;如何存儲服務信息;如何監控服務提供者節點的存活;若是服務提供者節點有變化如何通知服務消費者,以及如何控制註冊中心的訪問權限。緩存
註冊中心必須提供如下最基本的API服務器
除此以外,爲了便於管理,註冊中心還必須提供一些後臺管理的API,例如:微信
在進行服務化拆分以後,服務提供者和服務消費者運行在兩臺不一樣物理機上的不一樣進程內,它們之間的調用相比於本地方法調用,可稱之爲遠程方法調用,簡稱RPC。網絡
想要完成遠程調用,你須要解決四個問題:
客戶端和服務端之間基於TCP協議創建網絡鏈接最經常使用的途徑有兩種
最經常使用的有HTTP協議,它是一種開放的協議,各大網站的服務器和瀏覽器之間的數據傳輸大都採用了這種協議。還有一些定製的私有協議,好比阿里巴巴開源的Dubbo協議等。
經常使用的序列化方式分爲兩類:
一般有兩種數據收集方式:
數據傳輸最經常使用的方式有兩種:
數據處理是對收集來的原始數據進行聚合並存儲。數據聚合一般有兩個維度:
數據展現是把處理後的數據以Dashboard的方式展現給用戶。數據展現有多種方式,好比曲線圖、餅狀圖、格子圖展現等。
在微服務架構下,因爲進行了服務拆分,一次請求涉及到多個服務調用,若是請求失敗,就很難定位是在哪一個環節出錯,因此咱們須要服務調用鏈的追蹤。
它的核心理念就是調用鏈:經過一個全局惟一的ID將分佈在各個服務節點上的同一次請求串聯起來,從而還原原有的調用關係,能夠追蹤系統問題、分析調用數據並統計各類系統指標。
服務追蹤系統能夠分爲三層
一次服務調用,服務提供者、註冊中心、網絡這三者均可能會有問題,此時服務消費者應該如何處理才能確保調用成功呢?這就是服務治理要解決的問題。
服務調用失敗通常是由兩類緣由引發的,一類是服務提供者自身出現問題,如服務器宕機、進程意外退出等;一類是網絡問題,如服務提供者、註冊中心、服務消費者這三者任意二者之間的網絡出現問題。
不管是服務提供者自身出現問題仍是網絡發生問題,都有兩種節點管理手段。
這種機制要求服務提供者定時的主動向註冊中心彙報心跳,註冊中心根據服務提供者節點最近一次彙報心跳的時間與上一次彙報心跳時間作比較,若是超出必定時間,就認爲服務提供者出現問題,繼而把節點從服務列表中摘除,並把最近的可用服務節點列表推送給服務消費者。
雖然註冊中心主動摘除機制能夠解決服務提供者節點異常的問題,但若是是由於註冊中心與服務提供者之間的網絡出現異常,最壞的狀況是註冊中心會把服務節點所有摘除,致使服務消費者沒有可用的服務節點調用,但其實這時候服務提供者自己是正常的。因此,將存活探測機制用在服務消費者這一端更合理,若是服務消費者調用服務提供者節點失敗,就將這個節點從內存中保存的可用服務提供者節點列表中移除。
經常使用的負載均衡算法主要包括如下幾種。
對於服務消費者而言,在內存中的可用服務節點列表中選擇哪一個節點不只由負載均衡算法決定,還由路由規則肯定。所謂的路由規則,就是經過必定的規則如條件表達式或者正則表達式來限定服務節點的選擇範圍。
爲何要制定路由規則呢?主要有兩個緣由。
服務調用並不老是必定成功的,對於服務調用失敗的狀況,須要有手段自動恢復,來保證調用成功。
服務容錯經常使用的手段主要有如下幾種。
通常狀況下對於冪等的調用,能夠選擇FailOver或者FailCache,非冪等的調用能夠選擇FailBack或者FailFast。
參考資料
極客專欄:從0開始學微服務
本文亦在微信公衆號【小道資訊】發佈,歡迎掃碼關注!