微服務:主要依賴的幾個基本組件


服務描述

服務調用首先要解決的問題就是服務如何對外描述。比如服務名、調用這個服務需要提供哪些信息、返回的結果是什么格式的、如何解析等問題。
常用的服務描述方式包括 RESTful API、XML 配置以及 IDL 文件三種。
其中,RESTful API 方式通常用於 HTTP 協議的服務描述,並且常用 Wiki 或者Swagger來進行管理。
下面是一個 RESTful API 方式的服務描述的例子。
XML 配置方式多用作 RPC 協議的服務描述,通過 *.xml 配置文件來定義接口名、參數以及返回值類型等。
如motan_server.xml中

<motan:basicService id="serviceBasicConfig" export="demoMotan:8002" group="motan-demo-rpc" module="motan-demo-rpc" registry="registry"/>
IDL 文件方式通常用作 Thrift 和 gRPC 這類跨語言服務調用框架中,比如 gRPC 就是通過 Protobuf 文件來定義服務的接口名、參數以及返回值的數據結構。

服務描述方式 使用場景 缺點

RESTFUL API 跨語言平台,組織內外皆可 使用了HTP作為通信協議,相比TCP協議,性能較差

XML配置 Java平台,一般用作組織內部 不支持跨語言平台

IDL文件 跨語言平台,組織內外皆可 修改或者除PB字段不能向前兼容

注冊中心

有了服務的接口描述,下一步要解決的問題就是服務的發布和訂閱,就是說你提供了一個服務,如何讓外部想調用你的服務的人知道。這個時候就需要一個類似注冊中心的角色,服務提供者將自己提供的服務以及地址登記到注冊中心,服務消費者則從注冊中心查詢所需要調用的服務的地址,然后發起請求。

一般來講,注冊中心的工作流程是:
服務提供者在啟動時,根據服務發布文件中配置的發布信息向注冊中心注冊自己的服務。
服務消費者在啟動時,根據消費者配置文件中配置的服務信息向注冊中心訂閱自己所需要的服務。
注冊中心返回服務提供者地址列表給服務消費者。
當服務提供者發生變化,比如有節點新增或者銷毀,注冊中心將變更通知給服務消費者。

服務框架

通過注冊中心,服務消費者就可以獲取到服務提供者的地址,有了地址后就可以發起調用。但在發起調用之前你還需要解決以下幾個問題。
服務通信采用什么協議?就是說服務提供者和服務消費者之間以什么樣的協議進行網絡通信,是采用四層 TCP、UDP 協議,還是采用七層 HTTP 協議,還是采用其他協議?
數據傳輸采用什么方式?就是說服務提供者和服務消費者之間的數據傳輸采用哪種方式,是同步還是異步,是在單連接上傳輸,還是多路復用。
數據壓縮采用什么格式?通常數據傳輸都會對數據進行壓縮,來減少網絡傳輸的數據量,從而減少帶寬消耗和網絡傳輸時間,比如常見的 JSON 序列化、Java 對象序列化以及 Protobuf 序列化等。

服務監控

一旦服務消費者與服務提供者之間能夠正常發起服務調用,你就需要對調用情況進行監控,以了解服務是否正常。
通常來講,服務監控主要包括三個流程。
指標收集。就是要把每一次服務調用的請求耗時以及成功與否收集起來,並上傳到集中的數據處理中心。
數據處理。有了每次調用的請求耗時以及成功與否等信息,就可以計算每秒服務請求量、平均耗時以及成功率等指標。
數據展示。數據收集起來,經過處理之后,還需要以友好的方式對外展示,才能發揮價值。
通常都是將數據展示在 Dashboard 面板上,並且每隔 10s 等間隔自動刷新,用作業務監控和報警等。

服務追蹤

除了需要對服務調用情況進行監控之外,你還需要記錄服務調用經過的每一層鏈路,以便進行問題追蹤和故障定位。
服務追蹤的工作原理大致如下:
服務消費者發起調用前,會在本地按照一定的規則生成一個 requestid,發起調用時,將 requestid 當作請求參數的一部分,傳遞給服務提供者。
服務提供者接收到請求后,記錄下這次請求的 requestid,然后處理請求。如果服務提供者繼續請求其他服務,會在本地再生成一個自己的 requestid,然后把這兩個 requestid 都當作請求參數繼續往下傳遞。
以此類推,通過這種層層往下傳遞的方式,一次請求,無論最后依賴多少次服務調用、經過多少服務節點,都可以通過最開始生成的 requestid 串聯所有節點,從而達到服務追蹤的目的。

服務治理

服務監控能夠發現問題,服務追蹤能夠定位問題所在,而解決問題就得靠服務治理了。服務治理就是通過一系列的手段來保證在各種意外情況下,服務調用仍然能夠正常進行。
常見故障:
單機故障:自動摘除故障節點。
單 IDC 故障:自動切換故障 IDC 的流量到其他正常
IDC依賴服務不可用:熔斷。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM