回覆列表
-
1 # 程式設計師檸檬橙
-
2 # BAT攻城獅老李
微服務架構中服務之間的通訊大部分都是透過tcp協議來進行通訊;其次有服務中心繫統提供服務註冊和服務發現功能,當模組A要和模組B通訊時,先向服務中心查詢模組B所監聽的ip和埠(模組B啟動的時候就向服務中心註冊自己的ip和埠),然後再向該ip和埠發起tcp連線,最後發起通訊請求;模組之間的通訊都採用相同的應用層協議,比如可以是通用的http協議,也可以是google開源的protobuf協議,也可以是facebook的thrift協議。
-
3 # 在程式碼界奔跑的蝸牛
微服務架構是,它描述了一種將軟體應用程式設計為可獨立部署的服務套件的特定方式。儘管這種架構風格沒有確切的定義,但圍繞業務能力,自動化部署,端點智慧以及語言和資料的分散控制等方面存在著某些共同特徵。
這時候各個微服務之間的通訊極為重要,但是最重要的一個關鍵點就是解耦,通用的通訊協議比如 REST API/grpc/rpc/messageQueue等等, 都是可以保證微服務之間相互通訊的方式。
如何選擇通訊協議也是一門學問,比如如果服務之間並沒有訂閱機制,可以不是由queue的pub/sub,如果服務之間的連結是無狀態的可以使用REST api比較易上手。
但是如果服務之間既有同步/非同步,還有返回處理結果的要求,不如嘗試grpc協議
微服務之間的通訊,一般都是藉助於微服務框架完成,一般有REST風格的api通訊,和微服務框架結合的RPC.
REST風格的api通訊所謂的REST風格的api通常來講就是HTTP結合來使用,但是要遵循REST規範的HTTP有如下特徵.
統一介面
無狀態
快取
客戶端-伺服器
分層系統
按需程式碼(可選)
RPC通訊RPC (Remote Procedure Call)遠端過程呼叫是一個計算機通訊協議。我們一般的程式呼叫是本地程式內部的呼叫,RPC允許你像呼叫本地函式一樣去呼叫另一個程式的函式,這中間會涉及網路通訊和程序間通訊,但你無需知道實現細節,RPC框架為你遮蔽了底層實現。RPC是一種伺服器-客戶端(Client/Server)模式,經典實現是一個透過「傳送請求-接受迴應」進行資訊互動的系統。
RPC通訊通常和微服務框架結合,框架會定於訊息的序列化格式,比如谷歌的gRPC框架就是利用protobuff序列化,來序列化訊息之後通訊。
常見的微服務框架有:Dubbo
是阿里巴巴公司開源的一個Java高效能優秀的服務框架,使得應用可透過高效能的 RPC 實現服務的輸出和輸入功能,可以和 Spring框架無縫整合。 Apache Dubbo |ˈdʌbəʊ| 是一款高效能、輕量級的開源Java RPC框架,它提供了三大核心能力:面向介面的遠端方法呼叫,智慧容錯和負載均衡,以及服務自動註冊和發現 。2011 年末對外開源,僅支援 Java 語言。
官網:http://dubbo.apache.org/zh-cn/
Tars
騰訊內部使用的微服務架構 TAF(Total Application Framework)多年的實踐成果總結而成的開源專案。 僅支援 C++ 語言,目前在騰訊內部應用也非常廣泛。2017 年對外開源,僅支援 C++ 語言。
原始碼: https://github.com/TarsCloud/Tars/
Motan
是新浪微博開源的一個Java 框架。Motan 在微博平臺中已經廣泛應用,每天為數百個服務完成近千億次的呼叫。於 2016 年對外開源,僅支援 Java 語言。
官方指南: https://github.com/weibocom/motan/wiki/zh_userguide
gRPC
是Google開發的高效能、通用的開源RPC框架,其由Google主要面向移動應用開發並基於HTTP/2協議標準而設計,基於ProtoBuf(Protocol Buffers)序列化協議開發。本身它不是分散式的,所以要實現上面的框架的功能需要進一步的開發。2015 年對外開源的跨語言 RPC 框架,支援多種語言。
中文教程:https://doc.oschina.net/grpc?t=58008
thrift
最初是由 Facebook 開發的內部系統跨語言的高效能 RPC 框架,2007 年貢獻給了 Apache 基金,成為 Apache 開源專案之一, 跟 gRPC 一樣,Thrift 也有一套自己的介面定義語言 IDL,可以透過程式碼生成器,生成各種程式語言的 Client 端和 Server 端的 SDK 程式碼,支援多種語言。