參考資料:
Shared Nothing Architecture與PHP的童話
Shared Nothing Architecture
?? 以往集群架構(gòu)都采用Session共享模式進(jìn)行設(shè)計(jì),而后PHP等方面提出了SNA架構(gòu),主張Session不共享。SNA架構(gòu)思想,無論對企業(yè)應(yīng)用還是大型互聯(lián)網(wǎng)站,極大提高了web應(yīng)用的吞吐量和性能。
?? 一般SNA架構(gòu)以集成分布式Cache例如 memcached 的方案居多,此處姑且稱為 Cache模式。
?? 我結(jié)合公司電信項(xiàng)目的情況,以及思考,總結(jié)另一種方案,供參考。
?? SNA思想的關(guān)鍵就是每個集群內(nèi)web server實(shí)例不互相共享session,Cache模式主張session數(shù)據(jù)都放到分布式緩存中,意味著,邏輯上集群內(nèi)還是要共享session信息;這種考慮源于負(fù)載均衡時(shí),同一個IP發(fā)來的兩個請求,可能走到不同的 Web Server上。
?? 因此,只要同一IP的兩個請求轉(zhuǎn)發(fā)到同一個 Web? server實(shí)例,那么就可以不需要全局的 session信息緩存。
?? 1) 我所在的移動項(xiàng)目下,采用 F5硬件負(fù)載均衡器,使用IP記憶機(jī)制實(shí)現(xiàn)了這一點(diǎn)。因此,各 web server實(shí)例的session無需共享,仍然保存在自己的session內(nèi)存中,節(jié)省了網(wǎng)絡(luò)開銷和Cache命中查找時(shí)間。
?? F5很貴,因此對于網(wǎng)站一般負(fù)擔(dān)不起,但可以采用軟件負(fù)載來做到這一點(diǎn)。
?? 切分模式的SNA架構(gòu):
?? 2) IP Memory(IP記憶):負(fù)載服務(wù)器記錄 客戶端IP -> ServerID 的關(guān)系,模擬F5;
?? 3) (Dispatch by Rule)按規(guī)則轉(zhuǎn)發(fā):IP記憶需要維護(hù)一張路由table, 因此,需要消耗一定內(nèi)存,以及映射關(guān)系查找的時(shí)間;
????? 我們將客戶端的所有IP看作一個集合 IP Set,按固定規(guī)則將其平均分配集群的server實(shí)例上去,這樣就可以節(jié)省路由table的開銷。 關(guān)鍵是分配算法,可以考慮的有:
????? 2.1) 簡單數(shù)值法: IP各節(jié)加總 = X, 假定集群實(shí)例個數(shù)為 N,編號1-N, 那么每次請求選擇的目標(biāo)server id = X mod N。
????? 2.2) hash值法: 有的系統(tǒng)可能想基于 userid 進(jìn)行請求分配, 那么可以采用 X = hashCode(userid), serverID = X mod N;
????? 具體情況下, 可以靈活選擇使用那個數(shù)據(jù)項(xiàng)判斷請求分配的邏輯。這個思想?yún)⒖剂? memcached 的集群管理思想。
???
?? 4) stickySession方式。
????? 一般apache等采用這種方式做負(fù)載均衡。但必須結(jié)合 jvmRoute。 第一次被分配的 web server必須返回一個 jvmRoute在response中,并由 apache 送到客戶端瀏覽器,第二次請求發(fā)起時(shí),request信息中將包含 JSESSIONID 和 對應(yīng)的 jvmRoute, apache根據(jù)次找到對應(yīng)的 server,完成 stickySession機(jī)制。
結(jié)論: 切分模式的SNA架構(gòu),基于規(guī)則進(jìn)行請求轉(zhuǎn)發(fā),可以省去分布式Cache的使用,更進(jìn)一步的提升系統(tǒng)吞吐量和響應(yīng)性。
Shared Nothing Architecture與PHP的童話
Shared Nothing Architecture
?? 以往集群架構(gòu)都采用Session共享模式進(jìn)行設(shè)計(jì),而后PHP等方面提出了SNA架構(gòu),主張Session不共享。SNA架構(gòu)思想,無論對企業(yè)應(yīng)用還是大型互聯(lián)網(wǎng)站,極大提高了web應(yīng)用的吞吐量和性能。
?? 一般SNA架構(gòu)以集成分布式Cache例如 memcached 的方案居多,此處姑且稱為 Cache模式。

?? 我結(jié)合公司電信項(xiàng)目的情況,以及思考,總結(jié)另一種方案,供參考。
?? SNA思想的關(guān)鍵就是每個集群內(nèi)web server實(shí)例不互相共享session,Cache模式主張session數(shù)據(jù)都放到分布式緩存中,意味著,邏輯上集群內(nèi)還是要共享session信息;這種考慮源于負(fù)載均衡時(shí),同一個IP發(fā)來的兩個請求,可能走到不同的 Web Server上。
?? 因此,只要同一IP的兩個請求轉(zhuǎn)發(fā)到同一個 Web? server實(shí)例,那么就可以不需要全局的 session信息緩存。
?? 1) 我所在的移動項(xiàng)目下,采用 F5硬件負(fù)載均衡器,使用IP記憶機(jī)制實(shí)現(xiàn)了這一點(diǎn)。因此,各 web server實(shí)例的session無需共享,仍然保存在自己的session內(nèi)存中,節(jié)省了網(wǎng)絡(luò)開銷和Cache命中查找時(shí)間。
?? F5很貴,因此對于網(wǎng)站一般負(fù)擔(dān)不起,但可以采用軟件負(fù)載來做到這一點(diǎn)。
?? 切分模式的SNA架構(gòu):
?? 2) IP Memory(IP記憶):負(fù)載服務(wù)器記錄 客戶端IP -> ServerID 的關(guān)系,模擬F5;
?? 3) (Dispatch by Rule)按規(guī)則轉(zhuǎn)發(fā):IP記憶需要維護(hù)一張路由table, 因此,需要消耗一定內(nèi)存,以及映射關(guān)系查找的時(shí)間;
????? 我們將客戶端的所有IP看作一個集合 IP Set,按固定規(guī)則將其平均分配集群的server實(shí)例上去,這樣就可以節(jié)省路由table的開銷。 關(guān)鍵是分配算法,可以考慮的有:
????? 2.1) 簡單數(shù)值法: IP各節(jié)加總 = X, 假定集群實(shí)例個數(shù)為 N,編號1-N, 那么每次請求選擇的目標(biāo)server id = X mod N。
????? 2.2) hash值法: 有的系統(tǒng)可能想基于 userid 進(jìn)行請求分配, 那么可以采用 X = hashCode(userid), serverID = X mod N;
????? 具體情況下, 可以靈活選擇使用那個數(shù)據(jù)項(xiàng)判斷請求分配的邏輯。這個思想?yún)⒖剂? memcached 的集群管理思想。
???

?? 4) stickySession方式。
????? 一般apache等采用這種方式做負(fù)載均衡。但必須結(jié)合 jvmRoute。 第一次被分配的 web server必須返回一個 jvmRoute在response中,并由 apache 送到客戶端瀏覽器,第二次請求發(fā)起時(shí),request信息中將包含 JSESSIONID 和 對應(yīng)的 jvmRoute, apache根據(jù)次找到對應(yīng)的 server,完成 stickySession機(jī)制。
結(jié)論: 切分模式的SNA架構(gòu),基于規(guī)則進(jìn)行請求轉(zhuǎn)發(fā),可以省去分布式Cache的使用,更進(jìn)一步的提升系統(tǒng)吞吐量和響應(yīng)性。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
