與一般的HTTP REST框架不同,一個可用的RPC架構不僅解決了遠程調用問題,也提供了用于服務注冊和服務發現的基礎設施,比如RMI(JAVA語言的RPC)里的RMI Registry,如下圖所示。

在使用RMI時,我們所開發的“遠程對象”(RemoteObject)都需要被注冊(Binding)到Registry里,客戶端(Client)則首先需要通過Registry的接口查詢到遠程對象的訪問地址,然后才能發起對遠程對象的“遠程過程調用”,將這種模式表達為更抽象的模型,就是如下圖所示的服務注冊和服務發現的通用模型。
從RPC和COBRA發展而來的服務注冊與服務發現模型,被后來者奉為經典。如下所示是ZeroC Ice的實現架構圖,其中注冊表實現了主從復制的特性,避免了單點故障。

服務注冊與服務發現的模型在Web Service時代被提到了一個很高的境界,Web Service的核心架構一般如下圖所示。

在Web Service的技術架構中,用XML定義的編程語言中立的服務接口描述語言WSDL其實來自COBRA中的IDL,基于Socket的復雜RPC調用被簡單和容易掌握的HTTP上的SOAP調用所替換。
此外,為了應對不同開發商的“互聯互不同”及“以自我為中心”的思想,IBM倡導了全球服務注冊中心(UDDIRegistry)的理念,希望各個廠商都能將自己的Web Service注冊到一起,全球聯網,服務無國界,這次嘗試以失敗告終,無數公司不得不重復開發并不很復雜的軟件系統。
后來出現了SOA這個新概念,雖然業界對SOA這個概念有各種“詮釋”,但“面向服務的架構”即以服務(Service)為中心的分布式架構深入人心,如下圖所示是一個理想化的大一統的SOA架構藍圖,我們看到服務注冊與服務發布模型及RPC技術依然是SOA的技術核心。

服務注冊與服務發布模型成為后來通用分布式系統架構的核心和關鍵技術基礎,也被賦予一個新概念——服務治理框架。
服務治理框架這個概念與SOA在本質上屬于一類,它的一個典型代表是曾經熱門的開源項目——Dubbo。下面給出了Dubbo的原理概念圖,可以看出,相對于SOA架構,在Dubbo的服務治理框架中最大的一個亮點是增加了服務監控這個必要的運維特性。

Dubbo同時提出了很多看起來比較吸引人的新特性,比如服務編排、服務降級、訪問規則控制,但實際上這并不是核心。
作為一個分布式系統的重要基礎設施,穩定、高性能的RPC通信及多語言支持才是其關鍵的核心指標。