全部產品
Search
文件中心

Enterprise Distributed Application Service:HSF概述

更新時間:Jun 30, 2024

高速服務架構HSF(High-speed Service Framework),是在阿里巴巴廣泛使用的分布式RPC服務架構。

概述

HSF連通不同的業務系統,解耦系統間的實現依賴。HSF從分布式應用的層面,統一了服務的發布與調用方式,從而協助使用者更加方便、快速地開發分布式應用,以及提供或使用公用功能模組。HSF為使用者屏蔽了分布式領域中的各種複雜技術細節,如遠程通訊、序列化實現、效能損耗、同步與非同步呼叫方式的實現等。

HSF架構

HSF作為一個純用戶端架構的RPC架構,沒有服務端叢集,所有HSF服務調用均是通過服務消費方(Consumer)與服務提供者(Provider)點對點進行。為了實現整套分布式服務體系,HSF還需要依賴以下外部系統。

EDAS_HSF架構圖

  • 服務提供者

    服務提供者綁定了12200連接埠,用於接收請求並提供服務,同時將地址資訊發布到地址註冊中心。

  • 服務消費方

    服務消費者通過地址註冊中心訂閱服務,根據訂閱到的地址資訊發起調用,地址註冊中心不參與調用。

  • EDAS地址註冊中心

    HSF依賴註冊中心進行服務發現,如果沒有註冊中心,HSF只能完成簡單的點對點調用。

    服務提供端無法將服務資訊對外暴露,服務消費端可能已經明確了待調用的服務,但是無法擷取該服務。因此註冊中心是服務資訊的中介,為服務提供了註冊與發現的功能。

  • EDAS持久化配置中心

    持久化的配置中心用於儲存HSF服務的各種治理規則,HSF用戶端在啟動的過程中向持久化配置中心訂閱服務治理規則,如路由規則、歸組規則、權重規則等,從而根據規則對調用過程的選址邏輯進行幹預。

  • EDAS中繼資料存放區中心

    中繼資料指HSF服務對應的方法列表以及參數結構等資訊。中繼資料對HSF的調用過程不會產生影響,因此中繼資料存放區中心是可選的。由於服務營運的便捷性,HSF用戶端在啟動時會將中繼資料上報到中繼資料存放區中心,方便服務營運。

  • EDAS控制台

    EDAS控制台打通了服務地址註冊中心、持久化配置中心、中繼資料存放區中心等,為使用者提供了服務營運功能,包括服務查詢、服務治理規則管理等,提高HSF服務研發的效率、營運的便捷性。

功能

HSF作為分布式RPC服務架構,支援多種服務的調用方式。

說明

Dubbo 3.0實現了和HSF架構的技術統一。在EDAS中,可以便捷地將HSF應用升級為Dubbo 3.0應用。升級之後,HSF應用可沿用原有的開發方式,還可以使用EDAS為Dubbo應用提供的更加完善的服務治理功能。

  • 同步調用

    HSF用戶端預設以同步調用的方式消費服務,用戶端代碼需要同步等待返回結果。

  • 非同步呼叫

    對於服務調用的用戶端,並非所有HSF服務都需要同步等待返回結果。HSF提供非同步呼叫,協助用戶端無需同步阻塞在HSF調用上。HSF的非同步呼叫有Future調用和Callback調用2種。

    • Future調用

      用戶端在需要擷取調用的返回結果時,通過HSFResponseFuture.getResponse(int timeout)主動擷取結果。

    • Callback調用

      Callback調用利用HSF內部提供的回調機制,在指定HSF服務消費完畢拿到返回結果時,HSF架構會回調使用者實現的HSFResponseCallback介面,用戶端通過回調通知的方式擷取結果。

  • 泛化調用

    對於一般的HSF調用來說,HSF用戶端需要依賴服務的二方包,通過依賴二方包中的API進行編程調用,擷取返回結果。但是泛化調用不需要依賴服務的二方包,可以發起HSF調用,擷取返回結果。在平台型的產品中,泛化調用的方式可以有效減少平台型產品的二方包依賴,實現系統的輕量級運行。

  • 調用鏈路Filter擴充

    HSF內部設計了調用過濾器,能夠主動發現使用者的調用過濾器擴充點,將其整合到HSF調用鏈路中,便於擴充方對HSF的請求進行擴充處理。

應用開發方式

使用HSF架構開發應用有Ali-Tomcat和Pandora Boot兩種方式。

  • Ali-Tomcat:依賴Ali-Tomcat和Pandora,提供了完整的HSF功能,包括服務註冊與發現、隱式傳參、非同步呼叫、泛化調用和調用鏈路Filter擴充。應用程式須以WAR包方式部署。

  • Pandora Boot:依賴Pandora,提供了比較完整的HSF功能,包括服務註冊與發現、非同步呼叫。應用程式編譯為可啟動並執行JAR包並部署即可。