HSF原理簡介

2022-09-20 04:06:14 字數 2387 閱讀 3776

hsf是乙個分布式的遠端服務呼叫框架,其實我更喜歡把分布式幾個字去掉,因為hsf本身並不是乙個單獨的服務(指乙個程序),他是附屬在你的應用裡的乙個元件,乙個rpc元件(遠端過程呼叫——remote procedure call,是一種通過網路從遠端電腦程式上請求服務,而不需要了解底層網路技術的協議。在osi網路通訊模型中,rpc跨越了傳輸層和應用層。rpc使得開發分布式應用更加容易),當然hsf完全的內容肯定不止這些。

​ hsf(high-speed service framework),高速服務框架,是阿里系主要採用的服務框架,其目的是作為橋梁聯通不同的業務系統,解耦系統之間的實現依賴。其高速體現在底層的非阻塞i/o以及優秀的序列化機制上,實現了同步和非同步呼叫方式,並且有一套軟負載體系,實現分布式應用。

我們先來看一張圖:

很多同學看了這張圖可能會覺得這跟http的過程有什麼區別?

有這麼乙個場景(本來想舉乙個便具體業務的例子,想想還是已技術實現相關的比較好),監控平台:監控所有主機的狀態,這時候每台主機上有乙個agent,每個幾秒向監控平台上傳一次資料(主機記憶體使用率、硬碟狀況、cpu、load、程序資訊等等)。

可能在開發的時候最簡單的方式就是監控平台有乙個http介面,agent每隔幾秒請求一次,能夠滿足需求,但是如果主機數快速增長了很多、監控項越來越多、請求體越來越大,你會發現http的傳輸效率下降了,每一次呼叫的耗時增加了。

這時我們會去研究http協議,想去優化這個過程,發現http的過程是:建立連線、傳送請求資訊、傳送響應資訊、關閉連線,看到這個過程首先想優化的就是能不能不要每次都去建立連線關閉連線,因為資料上報是個持續的過程;緊接著去研究http頭,發現很多協議用不到,繁雜,白白增加了訊息體;後來又覺得http的協議解析還原過程很複雜,可以自己開發乙個提公升效能……

rpc來了,他能滿足這些需求,但是前提是需要開發,需要前期成本,所以想專案設計時就要去衡量,不過沒事,我們有hsf啊。

我們將上圖稍微改造一下:

現在從圖中可以看著,client和server之間有一條長連線,並且我們有自己的協議體:rpcrequest和rpcresponse。

rpc就講到這裡,畢竟重點是hsf,想要更多的了解rpc,可以上wiki或者網上查詢。

其實在我們的應用中,一般情況下你的應用不僅僅是client,也是server,因為你不僅需要去呼叫其他應用提供的服務,也提供服務給其他應用,所以這樣一來,整個hsf的服務呼叫鏈路也會很複雜。

從上面兩幅圖中我們很顯然的發現乙個問題,就是服務提供者如何告知客戶端他提供的服務,所以需要有乙個服務註冊與發現的地方,在hsf架構中提供這個功能的是configserver,如下圖:

從上圖可以看出server端啟動的時候會向configserver註冊自己提供的服務,client會向configserver訂閱需要的服務,configserver通過訂閱資訊將相關服務提供者的位址以及其他關鍵資訊推送給client。

上面已經實現了基本的能力,但是如何動態配置負載(執行緒池大小)、預設配置(configserver位址等)、還有一些特性功能(如路由規則),這時候就需要有乙個持久化配置中心,如下圖:

client和server啟動的時候會先去diamond獲取需要的配置資訊,如最關鍵的服務註冊中心的型別和位址,除此之外之外還有服務治理的型別和位址等。

重點說一下路由規則,舉個例子:通過路由規則配置在服務呼叫的時候只呼叫同機房的server,這樣子服務呼叫的耗時肯定比跨機房的耗時短。除此之外hsf裡還單獨寫了unitservice進行服務單元發布來區分中心發布,這些番外的東西以後有時間再寫個番外篇,這裡就不過多闡述了,畢竟這些有點偏場景偏業務的內容以後可能就改成別的方式了。

相信大家都用過hsf服務治理**,通過這個**可以看到有哪些服務、服務提供者的位址是多少、有多少提供者、具體的消費者是誰,hsf通過configserver、redis、diamond裡的儲存資訊獲取到這些資訊。

redis功能:hsf使用redis儲存元資料,每乙個hsf consumer/provider 都會在啟動後、每隔一段時間向redis上報元資料,這些元資料採集起來又提供給hsfops做服務治理,包括應用名和服務的對映、服務的元資料等。

參考:

HSF原始碼閱讀

首先服務發布初始化bean,hsfspringproviderbean實現了spring的3個介面,將hsf的publish和spring容器的生命週期繫結在一起。1 initializingbean,實現afterpropertiesset介面,在init方法之前呼叫,執行服務發布的初始化資訊 o...

HSF和Dubbo服務互調

1.hsf呼叫dubbo 1.1 edas專案和dubbo專案要求 edas專案 war,啟動方式 ali tomcat dubbo專案 war jar,啟動方式 tomcat8 1.2 呼叫方式 方法 dubbo服務註冊到zk,hsf從zk中呼叫dubbo服務 詳解 1.2.1 在當前應用中加入不...

Oracle BAM原理簡介

oracle bam全稱為oracle busines activity monitoring,中文叫oracle 業務活動監視 bam有兩種功能 1.建立實時report 2.建立基於一定規則的alert bam最大的特點就是,它的功能都是實時的,任意的資料變化,他都能實時的反應到正在顯示的rep...