關於SNA架構

2021-05-28 13:24:40 字數 1362 閱讀 8543

以往集群架構都採用session共享模式進行設計,而後php等方面提出了sna架構,主張session不共享。sna架構思想,無論對企業應用還是大型互聯**,極大提高了web應用的吞吐量和效能。

一般sna架構以整合分布式cache例如 memcached 的方案居多,此處姑且稱為 cache模式。

我結合公司電信專案的情況,以及思考,總結另一種方案,供參考。

sna思想的關鍵就是每個集群內web server例項不互相共享session,cache模式主張session資料都放到分布式快取中,意味著,邏輯上集群內還是要共享session資訊;這種考慮源於負載均衡時,同乙個ip發來的兩個請求,可能走到不同的 web server上。

因此,只要同一ip的兩個請求**到同乙個 web  server例項,那麼就可以不需要全域性的 session資訊快取。

1) 我所在的移動專案下,採用 f5硬體負載均衡器,使用ip記憶機制實現了這一點。因此,各 web server例項的session無需共享,仍然儲存在自己的session記憶體中,節省了網路開銷和cache命中查詢時間。

f5很貴,因此對於**一般負擔不起,但可以採用軟體負載來做到這一點。

切分模式的sna架構:

2) ip memory(ip記憶):負載伺服器記錄 客戶端ip -> serverid 的關係,模擬f5;

3) (dispatch by rule)按規則**:ip記憶需要維護一張路由table, 因此,需要消耗一定記憶體,以及對映關係查詢的時間;

我們將客戶端的所有ip看作乙個集合 ip set,按固定規則將其平均分配集群的server例項上去,這樣就可以節省路由table的開銷。 關鍵是分配演算法,可以考慮的有:

2.1) 簡單數值法: ip各節加總 = x, 假定集群例項個數為 n,編號1-n, 那麼每次請求選擇的目標server id = x mod n。

2.2) hash值法: 有的系統可能想基於 userid 進行請求分配, 那麼可以採用 x = hashcode(userid), serverid = x mod n;

具體情況下, 可以靈活選擇使用那個資料項判斷請求分配的邏輯。這個思想參考了  memcached 的集群管理思想。

4) stickysession方式。

一般apache等採用這種方式做負載均衡。但必須結合 jvmroute。 第一次被分配的 web server必須返回乙個 jvmroute在response中,並由 apache 送到客戶端瀏覽器,第二次請求發起時,request資訊中將包含 jsessionid 和 對應的 jvmroute, apache根據次找到對應的 server,完成 stickysession機制。

結論: 切分模式的sna架構,基於規則進行請求**,可以省去分布式cache的使用,更進一步的提公升系統吞吐量和響應性。

SNA架構的幾種實現方式

參考資料 shared nothing architecture與php的童話 shared nothing architecture 以往集群架構都採用session共享模式進行設計,而後php等方面提出了sna架構,主張session不共享。sna架構思想,無論對企業應用還是大型互聯 極大提高了...

SNA網路互連

早在1974年首次公布的sna是ibm為了連線他的3270系列產品而推出的方案。sna包括一套聯網協議。sna這個體系結構中,包括大型計算機系統 主機 中型機計算機系統 3270終端和台式計算機,並有乙個使這些系統與主機系統通訊或系統間相互對等通訊的策略。簡單的歷史回顧有助於我們認識到集中 分層的s...

關於java架構心得

一,對外開放jar包 1.開放全域性異常捕獲 好處 在業務 中,不需要關注返回值,不用關心返回客戶端格式,事務內部需要要特殊關注回滾,2.例子 提供兩個檔案,bus ception異常類,exceptioninterceptor異常 2.1bus ception 返回給客戶端統一格式 定義返回值,定...