Go micro 微服務總結
對外提供restful. api 服務的是通過 api 框架或原生寫法 -> 直接調用的是 srv
內部調用 是 客戶端去訪問 服務端
直接 /rpc 調用的時候會繞過 restful. api(但是 micro api 網關是必須啟動的,網關也可配置) -> 直接調用srv (http請求 會自動轉成 rpc調用)
API 網關一般作用:
封裝了內部系統架構並且提供了每個客戶端定制的API、身份驗證、監控、負載均衡、緩存、數據通信協議轉換、統一維護流量路由表
至於向加一些其他功能比如鑒權則需要實現Micro Api的插件,可以參考項目中的實現
Micro Api通過接收前端HTTP請求,將請求轉換之后發送到內部服務,對於服務間的請求,A服務可以直接使用go語言的gRPC客戶端調用B服務的接口。相比在使用Restful方式完成服務之間的相互訪問,gRPC能提供更好的性能,更低的延遲,並且生來適合與分布式系統。
用戶身份鑒定:功能是除了登錄功能的每一個API都會調用的功能。統一在api 網關處理。對於容器化與無狀態服務,可以使用JWT進行身份驗證,以下是一個例子,從Authorization中解析出用戶信息然后傳遞給網關后的服務。
server 服務端:
Server包是使用編寫服務的構建包,可以命名服務,注冊請求處理器,增加中間件等等
客戶端:
客戶端提供接口來創建向服務端的請求。與服務端類似,它構建在其它包之上,它提供獨立的接口,通過注冊中心來基於名稱發現服務,基於選擇器(selector)來負載均衡,使用transport、broker處理同步、異步消息。
服務熔斷:當服務A調用服務B的請求滿足一定的規則,比如10秒內請求數達到20個,並且有一半以上的請求失敗了,此時我們通過切斷對服務B的調用來保護系統的整體響應,這種操作即為服務熔斷。
服務降級:在服務B被熔斷之后,服務A不會真正地調用服務B。取而代之的是,我們在服務A中定義一個服務降級邏輯(通常是一個fallback接口),此時服務A會直接調用服務降級邏輯快速獲取返回結果。
微服務注冊與發現:
服務的注冊發現對於微服務來說是一個非常重要的環節,在單一架構應用中,service 之間的互相調用,通過一個固定的 host 和 port 來發起 REST 或者 RPC 來調用,但是在微服務架構中,各個服務往往是動態變化的,所以需要一個服務發現機制來發送客戶端的請求到動態的 service 實例中去。
golang學習需要轉換的思維:
數據處理和類型轉換以及 類型定義
同一份代碼在多個地方部署,最后注冊成同一個服務名稱,不同的ip地址(也可以相同)或端口號
Cli 命令行的方式調用不需要運行 micro api 網關,不需要 啟動 go.micro.api.auth 服務。是直接調用 go.micro.srv.auth 服務