一種可進行服務治理與語言調用的輕量級RPC框架的製作方法
2023-10-09 18:55:44 1
本發明涉及數據處理技術領域,尤其涉及一種可進行服務治理與語言調用的輕量級RPC框架。
背景技術:
目前,各大網際網路公司大量使用微服務架構,服務與服務之間進行跨進程間通信,RPC(遠程過程調用)框架應運而生。業界RPC框架大致分為兩類,一種是偏重服務治理,另一種側重跨語言調用。
服務治理型RPC框架典型的是Dubbo和DubboX。Dubbo是阿里開源的分布式服務框架,實現高性能的RPC調用同時提供了豐富的管理功能,是一款應用廣泛的優秀的RPC框架,但現在較少維護更新,DubboX是基於Dubbo框架擴展的一個RPC框架,支持REST風格的遠程調用、Kryo/FST序列化。
這類RPC框架的特點是功能豐富,提供高性能的遠程調用、服務發現及服務治理能力,適用於大型服務的服務解耦及服務治理,對於特定語言(Java)的項目可以實現透明化接入,缺點是語言耦合度較高,跨語言支持難度較大。
跨語言調用型的RPC框架有Thrift、gRPC、Hessian、Hprose等,這類RPC框架側重於服務的跨語言調用,能夠支持大部分的語言進行語言無關的調用,非常適合多語言調用場景。但這類框架沒有服務發現相關機制,實際使用時需要代理層進行請求轉發和負載均衡策略控制。
類似於Dubbo這類偏重服務治理的框架,雖然能夠提供遠程調用、服務發現及服務治理能力,但是語言耦合度較高,跨語言支持難度較大,然而使用類似Thrift這類框架,沒有服務發現和服務治理等相關機制;
因此,本領域的技術人員亟需研究出一種適配公司環境,可進行服務治理與跨語言調用,輕量部署和業務代碼解耦、解決微服務難於管理和難於跨語言調用的問題的可進行服務治理與語言調用的輕量級RPC框架。
技術實現要素:
本發明要解決的技術問題是提供一種可進行服務治理與語言調用的輕量級RPC框架,該可進行服務治理與語言調用的輕量級RPC框架能高度適配公司環境,可進行服務治理與跨語言調用,輕量部署和業務代碼解耦、解決微服務難於管理和難於跨語言調用的問題。
為解決上述技術問題,一種可進行服務治理與語言調用的輕量級RPC框架,包括註冊中心、伺服器及客戶端,所述註冊中心與所述伺服器及客戶端連接,所述伺服器與所述客戶端連接,所述伺服器向註冊中心註冊聲明所提供的服務,通過ServerBootstrap暴露策略向所述註冊中心以服務規範的路徑暴露自己,所述客戶端進行初始化並向所述註冊中心訂閱指定服務,所述註冊中心將服務列表返回所述伺服器,所述客戶端與所述註冊中心返回信息的伺服器建立連接,進行RPC服務調用;
所述伺服器包括第一傳輸模塊、第一序列化模塊、第一協議模塊及服務模塊,所述客戶端包括第二傳輸模塊、第二序列化模塊、集群模塊、第二協議模塊及引用模塊;
所述引用模塊引入API,調用所述客戶端的API接口並將調用的數據發送給所述第二協議模塊;所述第二協議模塊接收所述引用模塊調用的數據,並進行調用的代理,所述第二協議模塊將代理的服務數據發送所述集群模塊;所述集群模塊根據負載均衡策略選取所述集群模塊持有的可用的服務實例進行集群;所述集群模塊保持所述客戶端與與伺服器進行通信,所述集群模塊將服務實例的數據發送所述第二序列化模塊,維護服務實例的連接;所述第二序列化模塊根據所述客戶端與所述伺服器雙方通信制定好的協議進行JAVA對象到JSON的序列化,所述第二序列化模塊序列化完成後將序列化的服務數據發送給所述第二傳輸模塊;所述第二傳輸模塊進行I/O的操作向所述伺服器的第一傳輸模塊發送服務數據包;所述第一傳輸模塊接收所述第二傳輸模塊發送的服務數據並將接收的數據發送給所述第一序列化模塊;所述第一序列化模塊根據所述客戶端與所述伺服器雙方通信制定好的協議進行JSON到JAVA對象的解序列化,所述第一序列化模塊解序列化完成後將解序列化的服務數據發送給所述第一協議模塊;所述第一協議模塊將解序列化的服務數據發送所述服務模塊;所述服務模塊將服務實例的數據返回發送給所述第一協議模塊;所述第一協議模塊將服務數據發送給所述第一序列化模塊;所述第一序列化模塊根據所述客戶端與所述伺服器雙方通信制定好的協議進行JAVA到JSON對象的序列化,所述第一序列化模塊序列化完成後將序列化的服務數據發送給所述第一傳輸模塊;所述第一傳輸模塊進行O/I的操作向所述伺服器的第二傳輸模塊發送服務數據包;所述第二傳輸模塊接收所述第一傳輸模塊發送的服務數據並將接收的數據發送給所述第二序列化模塊;所述第二序列化模塊根據所述客戶端與所述伺服器雙方通信制定好的協議進行JSON對象到JAVA的解序列化,所述第二序列化模塊解序列化完成後將序列化的服務數據發送給所述集群模塊;所述集群模塊根據負載均衡策略選取所述集群模塊持有的可用的服務實例進行集群並將集群完成的服務數據發送所述第二協議模塊;所述第二協議模塊將集群的服務數據發送所述引用模塊;所述客戶端的引用模塊引入API,調用所述客戶端的API接口。
優選地,所述伺服器還包括第一註冊模塊,所述第一註冊模塊進行服務初始化,通過XML配置中的參數來初始化服務參數,通過所述參數來構建向所述註冊中心上報欄位,當服務初始化完成後,所述第一註冊模塊通過ServerBootstrap暴露策略向註冊中心以服務公司規範的路徑暴露自己,通過所述上報的欄位來描述本服務提供的服務和服務元數據,當所述第一註冊模塊將服務在註冊中心完成註冊後,註冊中心推送本次事件給訂閱了此服務的客戶端,所述第一協議模塊接收所述第一序列化模塊發送的序列化數據,並將服務變更數據同步到所述第一註冊模塊,所述第一協議模塊接收所述服務模塊發送的服務數據將變更的服務數據同步到所述第一註冊模塊;
其中,所述XML配置的參數包括:日誌、服務變量、服務版本。
優選地,所述客戶端還包括第二註冊模塊,所述第二註冊模塊根據XML中配置的服務名在註冊中心訂閱所述服務;所述客戶端接收所述註冊中心推送過來的事件,從所述事件中獲取所述服務上報的欄位來取得這個服務的元數據,所述第二協議模塊接收所述集群模塊發送的序列化服務數據,並將服務變更數據同步到所述第二註冊模塊。
優選地,所述第一註冊模塊及第二註冊模塊用於和註冊中心進行交互業務,所述伺服器會在系統初始化時通過所述第一註冊模塊註冊服務,所述客戶端在客戶端初始化時通過所述第二註冊模塊訂閱具體提供服務的服務列表,當服務列表發生變更時由所述第二註冊模塊通知所述客戶端。
優選地,所述交互業務包括註冊服務、訂閱服務、服務變更通知及服務心跳發送。
優選地,所述第一協議模塊及所述第二協議模塊用於進行RPC服務的描述、RPC服務的配置管理、添加不同功能的過濾器來完成統計及並發限制。
優選地,所述第一序列化模塊及第二序列化模塊用於將所述客戶端及伺服器請求中的參數、結果進行序列化和反序列化。
優選地,所述序列化和反序列化為進行JSON對象與字節流的互相轉換,JAVA對象和JSON的互相轉換。
優選地,所述集群模塊用於一組可用的服務模塊在邏輯上的封裝,包含若干可以提供rpc服務的服務子模塊,根據不同的高可用與負載均衡策略選擇一個可用的服務子模塊進行路由,並發起遠程調用。
採用了上述框架之後,所述伺服器向註冊中心註冊聲明所提供的服務,通過ServerBootstrap暴露策略向所述註冊中心以服務規範的路徑暴露自己,所述客戶端進行初始化並向所述註冊中心訂閱指定服務,所述註冊中心將服務列表返回所述伺服器,所述客戶端與所述註冊中心返回信息的伺服器建立連接,進行RPC服務調用;所述客戶端的引用模塊引入API,調用所述客戶端的API接口並將調用的數據發送給所述第二協議模塊;所述第二協議模塊接收所述引用模塊調用的數據,並進行調用的代理,所述第二協議模塊將代理的服務數據發送所述集群模塊;所述集群模塊根據負載均衡策略選取所述集群模塊持有的可用的服務實例進行集群;所述集群模塊保持所述客戶端與與伺服器進行通信,所述集群模塊將服務實例的數據發送所述第二序列化模塊,維護服務實例的連接;所述第二序列化模塊根據所述客戶端與所述伺服器雙方通信制定好的協議進行JAVA對象到JSON的序列化,所述第二序列化模塊序列化完成後將序列化的服務數據發送給所述第二傳輸模塊;所述第二傳輸模塊進行I/O的操作向所述伺服器的第一傳輸模塊發送服務數據包;所述第一傳輸模塊接收所述第二傳輸模塊發送的服務數據並將接收的數據發送給所述第一序列化模塊;所述第一序列化模塊根據所述客戶端與所述伺服器雙方通信制定好的協議進行JSON到JAVA對象的解序列化,所述第一序列化模塊解序列化完成後將解序列化的服務數據發送給所述第一協議模塊;所述第一協議模塊接收所述第一序列化模塊發送的序列化數據,並將服務變更數據同步到所述第一註冊模塊,所述第一協議模塊將解序列化的服務數據發送所述服務模塊;然後,再由所述服務模塊返回到所述客戶端的引用模塊;該可進行服務治理與語言調用的輕量級RPC框架能高度適配公司環境,可進行服務治理與跨語言調用,輕量部署和業務代碼解耦、解決微服務難於管理和難於跨語言調用的問題。
附圖說明
圖1是本發明的一種可進行服務治理與語言調用的輕量級RPC框架的具體模型示意圖;
圖2是本發明的可進行服務治理與語言調用的輕量級RPC框架的整體模型示意圖;
圖3是與圖1的對應的可進行服務治理與語言調用的輕量級RPC框架的模型的另一種展示方式;
圖4是圖2的整體模型落地到具體實施例的示意圖。
具體實施方式
為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖及實施例,對本發明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅用於解釋本發明,並不用於限定本發明。
實施例1
請參閱圖1至圖2,圖1是本發明的一種可進行服務治理與語言調用的輕量級RPC框架的具體模型示意圖;
圖2是本發明的可進行服務治理與語言調用的輕量級RPC框架的整體模型示意圖;
本發明公開了一種可進行服務治理與語言調用的輕量級RPC框架,包括註冊中心、伺服器及客戶端,所述註冊中心與所述伺服器及客戶端連接,所述伺服器與所述客戶端連接,所述伺服器向註冊中心註冊聲明所提供的服務,通過ServerBootstrap暴露策略向所述註冊中心以服務規範的路徑暴露自己,所述客戶端進行初始化並向所述註冊中心訂閱指定服務,所述註冊中心將服務列表返回所述伺服器,所述客戶端與所述註冊中心返回信息的伺服器建立連接,進行RPC服務調用;
所述伺服器包括第一傳輸模塊、第一序列化模塊、第一協議模塊及服務模塊,所述客戶端包括第二傳輸模塊、第二序列化模塊、集群模塊、第二協議模塊及引用模塊;
所述引用模塊引入API,調用所述客戶端的API接口並將調用的數據發送給所述第二協議模塊;所述第二協議模塊接收所述引用模塊調用的數據,並進行調用的代理,所述第二協議模塊將代理的服務數據發送所述集群模塊;所述集群模塊根據負載均衡策略選取所述集群模塊持有的可用的服務實例進行集群;所述集群模塊保持所述客戶端與與伺服器進行通信,所述集群模塊將服務實例的數據發送所述第二序列化模塊,維護服務實例的連接;所述第二序列化模塊根據所述客戶端與所述伺服器雙方通信制定好的協議進行JAVA對象到JSON的序列化,所述第二序列化模塊序列化完成後將序列化的服務數據發送給所述第二傳輸模塊;所述第二傳輸模塊進行I/O的操作向所述伺服器的第一傳輸模塊發送服務數據包;所述第一傳輸模塊接收所述第二傳輸模塊發送的服務數據並將接收的數據發送給所述第一序列化模塊;所述第一序列化模塊根據所述客戶端與所述伺服器雙方通信制定好的協議進行JSON到JAVA對象的解序列化,所述第一序列化模塊解序列化完成後將解序列化的服務數據發送給所述第一協議模塊;所述第一協議模塊將解序列化的服務數據發送所述服務模塊;所述服務模塊將服務實例的數據返回發送給所述第一協議模塊;所述第一協議模塊將服務數據發送給所述第一序列化模塊;所述第一序列化模塊根據所述客戶端與所述伺服器雙方通信制定好的協議進行JAVA到JSON對象的序列化,所述第一序列化模塊序列化完成後將序列化的服務數據發送給所述第一傳輸模塊;所述第一傳輸模塊進行O/I的操作向所述伺服器的第二傳輸模塊發送服務數據包;所述第二傳輸模塊接收所述第一傳輸模塊發送的服務數據並將接收的數據發送給所述第二序列化模塊;所述第二序列化模塊根據所述客戶端與所述伺服器雙方通信制定好的協議進行JSON對象到JAVA的解序列化,所述第二序列化模塊解序列化完成後將序列化的服務數據發送給所述集群模塊;所述集群模塊根據負載均衡策略選取所述集群模塊持有的可用的服務實例進行集群並將集群完成的服務數據發送所述第二協議模塊;所述第二協議模塊將集群的服務數據發送所述引用模塊;所述客戶端的引用模塊引入API,調用所述客戶端的API接口。
在本實施例中,所述伺服器還包括第一註冊模塊,所述第一註冊模塊進行服務初始化,通過XML配置中的參數來初始化服務參數,通過所述參數來構建向所述註冊中心上報欄位,當服務初始化完成後,所述第一註冊模塊通過ServerBootstrap暴露策略向註冊中心以服務公司規範的路徑暴露自己,通過所述上報的欄位來描述本服務提供的服務和服務元數據,當所述第一註冊模塊將服務在註冊中心完成註冊後,註冊中心推送本次事件給訂閱了此服務的客戶端,所述第一協議模塊接收所述第一序列化模塊發送的序列化數據,並將服務變更數據同步到所述第一註冊模塊,所述第一協議模塊接收所述服務模塊發送的服務數據將變更的服務數據同步到所述第一註冊模塊;
其中,所述XML配置的參數包括:日誌、服務變量、服務版本。
在本實施例中,所述客戶端還包括第二註冊模塊,所述第二註冊模塊根據XML中配置的服務名在註冊中心訂閱所述服務;所述客戶端接收所述註冊中心推送過來的事件,從所述事件中獲取所述服務上報的欄位來取得這個服務的元數據,所述第二協議模塊接收所述集群模塊發送的序列化服務數據,並將服務變更數據同步到所述第二註冊模塊。
在本實施例中,所述第一註冊模塊及第二註冊模塊用於和註冊中心進行交互業務,所述伺服器會在系統初始化時通過所述第一註冊模塊註冊服務,所述客戶端在客戶端初始化時通過所述第二註冊模塊訂閱具體提供服務的服務列表,當服務列表發生變更時由所述第二註冊模塊通知所述客戶端。
所述交互業務包括註冊服務、訂閱服務、服務變更通知及服務心跳發送。
在本實施例中,所述第一協議模塊及所述第二協議模塊用於進行RPC服務的描述、RPC服務的配置管理、添加不同功能的過濾器來完成統計及並發限制。
在本實施例中,所述第一序列化模塊及第二序列化模塊用於將所述客戶端及伺服器請求中的參數、結果進行序列化和反序列化。
在本實施例中,所述序列化和反序列化為進行JSON對象與字節流的互相轉換,JAVA對象和JSON的互相轉換。
在本實施例中,所述集群模塊用於一組可用的服務模塊在邏輯上的封裝,包含若干可以提供rpc服務的服務子模塊,根據不同的高可用與負載均衡策略選擇一個可用的服務子模塊進行路由,並發起遠程調用。
在所述伺服器與所述客戶端連接,所述客戶端對所述伺服器的服務數據進行調用時,所述客戶端擁有高可用和負載均衡功能,也可根據具體的路由策略來選取可用的實例,以下是幾個例子:
請參閱圖3,圖3是與圖1的對應的可進行服務治理與語言調用的輕量級RPC框架的模型的另一種展示方式;
所述可進行服務治理與語言調用的輕量級RPC框架整體模型如圖3所示。
請參閱圖4,圖4是圖2的整體模型落地到具體實施例的示意圖;
HelloService提供服務,並向註冊中心註冊自己,說明自己提供的服務,WorldService向註冊中心訂閱HelloService,感知到HelloService的上下線,並建立或斷開連接,進行rpc調用。
採用了上述框架之後,所述伺服器向註冊中心註冊聲明所提供的服務,通過ServerBootstrap暴露策略向所述註冊中心以服務規範的路徑暴露自己,所述客戶端進行初始化並向所述註冊中心訂閱指定服務,所述註冊中心將服務列表返回所述伺服器,所述客戶端與所述註冊中心返回信息的伺服器建立連接,進行RPC服務調用;所述客戶端的引用模塊引入API,調用所述客戶端的API接口並將調用的數據發送給所述第二協議模塊;所述第二協議模塊接收所述引用模塊調用的數據,並進行調用的代理,所述第二協議模塊將代理的服務數據發送所述集群模塊;所述集群模塊根據負載均衡策略選取所述集群模塊持有的可用的服務實例進行集群;所述集群模塊保持所述客戶端與與伺服器進行通信,所述集群模塊將服務實例的數據發送所述第二序列化模塊,維護服務實例的連接;所述第二序列化模塊根據所述客戶端與所述伺服器雙方通信制定好的協議進行JAVA對象到JSON的序列化,所述第二序列化模塊序列化完成後將序列化的服務數據發送給所述第二傳輸模塊;所述第二傳輸模塊進行I/O的操作向所述伺服器的第一傳輸模塊發送服務數據包;所述第一傳輸模塊接收所述第二傳輸模塊發送的服務數據並將接收的數據發送給所述第一序列化模塊;所述第一序列化模塊根據所述客戶端與所述伺服器雙方通信制定好的協議進行JSON到JAVA對象的解序列化,所述第一序列化模塊解序列化完成後將解序列化的服務數據發送給所述第一協議模塊;所述第一協議模塊接收所述第一序列化模塊發送的序列化數據,並將服務變更數據同步到所述第一註冊模塊,所述第一協議模塊將解序列化的服務數據發送所述服務模塊;然後,再由所述服務模塊返回到所述客戶端的引用模塊;該可進行服務治理與語言調用的輕量級RPC框架能高度適配公司環境,可進行服務治理與跨語言調用,輕量部署和業務代碼解耦、解決微服務難於管理和難於跨語言調用的問題。
同時,應當理解的是,以上僅為本發明的優選實施例,不能因此限制本發明的專利範圍,凡是利用本發明說明書及附圖內容所作的等效結構或等效實現方法,或直接或間接運用在其他相關的技術領域,均同理包括在本發明的專利保護範圍內。