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