1.SOA SOA(Service-Oriented Architecture)面向服務架構,將應用程式不同功能單元(稱為服務)進行拆分,並通過這些服務之間定義良好的介面和契約聯繫起來。 SOA 不是特定的規範,是一種技術思想,一種理念,上圖為 SOA 架構的參考模型。 SOA 是一種粗粒度、松耦合 ...
1.SOA
SOA(Service-Oriented Architecture)面向服務架構,將應用程式不同功能單元(稱為服務)進行拆分,並通過這些服務之間定義良好的介面和契約聯繫起來。
SOA 不是特定的規範,是一種技術思想,一種理念,上圖為 SOA 架構的參考模型。
SOA 是一種粗粒度、松耦合服務架構,服務之間通過簡單、精確定義的介面進行通訊,不涉及底層編程介面和通訊模型。
阿裡 Dubbo 算是 SOA 架構經典實現,其中應用之間的訪問又遵循下麵即將描述的 RPC 思想。
2.RPC
RPC(remote procedure call)遠程過程調用,即本地調用一個函數或者對象方法,實際上是調用了遠程機器上的函數或方法。
個人理解 RPC 和 SOA 一樣也不是規範,不是協議,是一種技術思想,一種理念,其實你日常編碼中一直在接觸它,只是你並沒有感知到而已。
比如耳熟能祥的 HTTP 和 WebService 就是 RPC 思想的一種很好的體現方式,HTTP 雖然有完備的體系和標準的規範,但滿足不了企業內外部日益複雜的信息交互。
就這樣許多優秀的 RPC 框架應運而生,封裝了一些像負載均衡、熔斷降級、服務註冊、服務發現等等面向對象的高級特性。
流行的 RPC 框架有阿裡的 Dubbo,微博開源的 Motan,Google 開源的 gPRC,百度開源的 bRPC,螞蟻金服開源的 sofa-rpc 等等。
還有一些拘謹的 RPC 框架比如 JDK 1.1 開始出現的 RMI (兩端必須都使用 Java),Spring MVC 中的 HttpInvoker(兩端必須都引入 Spring)。
既然 RPC 框架需要遠程去調用其他伺服器上的資源,那麼不可避免的需要進行網路通訊和傳輸,可以選擇已有成熟的協議,當然也可以自定義。
比如 Google 自研的 gRPC 使用 HTTP2 作為通訊協議,預設使用自家的 Protocol Buffers 作為傳輸協議。
阿裡大佬自研的 dubbo 支持九種不同的通訊協議和各自的傳輸定義,有興趣的戳後面鏈接:https://blog.csdn.net/xiaojin21cen/article/details/79834222