寫給本身的 SOA 和 RPC 理解

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 等等。spa

   還有一些拘謹的 RPC 框架好比 JDK 1.1 開始出現的 RMI (兩端必須都使用 Java),Spring MVC 中的 HttpInvoker(兩端必須都引入 Spring)。.net

   既然 RPC 框架須要遠程去調用其餘服務器上的資源,那麼不可避免的須要進行網絡通信和傳輸,能夠選擇已有成熟的協議,固然也能夠自定義。

   好比 Google 自研的 gRPC 使用 HTTP2 做爲通信協議,默認使用自家的 Protocol Buffers 做爲傳輸協議。

   阿里大佬自研的 dubbo 支持九種不一樣的通信協議和各自的傳輸定義,有興趣的戳後面連接:http://www.javashuo.com/article/p-omyijdbo-ns.html

相關文章
相關標籤/搜索