成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

[讀書(shū)筆記]大型分布式網(wǎng)站架構(gòu)設(shè)計(jì)與實(shí)踐.分布式緩存

pepperwang / 3357人閱讀

摘要:接下來(lái)將介紹分布式緩存的典型代表,以及分布式緩存的應(yīng)用場(chǎng)景。的分布式實(shí)現(xiàn)本身并不是一種分布式的緩存系統(tǒng),它的分布式是由訪問(wèn)它的客戶(hù)端來(lái)實(shí)現(xiàn)的。

前言:本書(shū)是對(duì)分布式系統(tǒng)架構(gòu)涉及到的相關(guān)技術(shù)的一本科普書(shū)籍。由于很難作為開(kāi)發(fā)參考,只能但求了解。所以通篇淺讀,對(duì)分布式系統(tǒng)進(jìn)行大致的了解。因?yàn)閷?xiě)的非常好,感覺(jué)非常有意思,自己也做不出總結(jié)。所謂的讀書(shū)筆記也就演變成了摘抄。

簡(jiǎn)介

一個(gè)大型、穩(wěn)健、成熟的分布式系統(tǒng)的背后,往往會(huì)設(shè)計(jì)眾多的支撐系統(tǒng),我們將這些支撐系統(tǒng)成為分布式系統(tǒng)的基礎(chǔ)設(shè)施。除了前面所介紹的分布式協(xié)作及配置管理系統(tǒng)ZooKeeper,我們進(jìn)行系統(tǒng)架構(gòu)設(shè)計(jì)所依賴(lài)的基礎(chǔ)設(shè)施,還包括分布式緩存系統(tǒng)、持久化存儲(chǔ)、分布式消息系統(tǒng)、搜索引擎、以及CDN系統(tǒng)、負(fù)載均衡系統(tǒng)、運(yùn)維自動(dòng)化系統(tǒng)等,還有實(shí)時(shí)計(jì)算系統(tǒng)、離線計(jì)算系統(tǒng)、分布式文件系統(tǒng)、日志收集系統(tǒng)、監(jiān)控系統(tǒng)、數(shù)據(jù)倉(cāng)庫(kù)等。

分布式緩存

在高并發(fā)環(huán)境下,大量的讀、寫(xiě)請(qǐng)求涌向數(shù)據(jù)庫(kù),磁盤(pán)的處理速度與內(nèi)存顯然不在一個(gè)量級(jí),從減輕數(shù)據(jù)庫(kù)的壓力和提供系統(tǒng)響應(yīng)速度兩個(gè)角度來(lái)考慮,一般都會(huì)在數(shù)據(jù)庫(kù)之前加一層緩存。由于單臺(tái)機(jī)器的內(nèi)存資源和承載能力有限,并且如果大量使用本地緩存,也會(huì)使相同的數(shù)據(jù)被不同的節(jié)點(diǎn)存儲(chǔ)多份,對(duì)內(nèi)存資源造成較大的浪費(fèi),因此才催生出了分布式緩存。
接下來(lái)將介紹分布式緩存的典型代表memcache,以及分布式緩存的應(yīng)用場(chǎng)景。最為典型的場(chǎng)景莫過(guò)于分布式session。

memcache

memcache是一款開(kāi)源的高性能的分布式內(nèi)容對(duì)象緩存系統(tǒng),被許多大型網(wǎng)站所采用,用于在應(yīng)用中減少對(duì)數(shù)據(jù)庫(kù)的訪問(wèn),提高應(yīng)用的訪問(wèn)速度,并降低數(shù)據(jù)庫(kù)的負(fù)載。為了在內(nèi)存中提供數(shù)據(jù)的高速查找能力,memcache使用key-value形式存儲(chǔ)和訪問(wèn)數(shù)據(jù),在內(nèi)存中維護(hù)一張巨大的HashTable,使得對(duì)數(shù)據(jù)查詢(xún)的時(shí)間復(fù)雜度降低到O(1),保證了對(duì)數(shù)據(jù)的高性能訪問(wèn)。內(nèi)存的空間總是有限的,當(dāng)內(nèi)存沒(méi)有更多的空間來(lái)存儲(chǔ)新的數(shù)據(jù)時(shí),memcache就會(huì)使用LRU(Least Recently Used)算法,將最近不常訪問(wèn)的數(shù)據(jù)淘汰掉,以騰出空間來(lái)存放新的數(shù)據(jù)。memcache存儲(chǔ)支持的數(shù)據(jù)格式也是靈活多樣的,通過(guò)對(duì)象的序列化機(jī)制,可以將更高層的對(duì)象轉(zhuǎn)換成為二進(jìn)制數(shù)據(jù),存儲(chǔ)在緩存服務(wù)器中,當(dāng)前端應(yīng)用需要時(shí),又可以通過(guò)二進(jìn)制內(nèi)容反序列化,將數(shù)據(jù)還原成原有對(duì)象。

memcache客戶(hù)端與服務(wù)端通過(guò)構(gòu)建在TCP協(xié)議之上的memcache協(xié)議來(lái)進(jìn)行通信,協(xié)議支持兩種數(shù)據(jù)的傳遞,這兩種數(shù)據(jù)分別為文本行和非結(jié)構(gòu)化數(shù)據(jù)。文本行主要用來(lái)承載客戶(hù)端的命令及服務(wù)端的響應(yīng),而非結(jié)構(gòu)化數(shù)據(jù)則主要用于客戶(hù)端和服務(wù)端數(shù)據(jù)的傳遞。由于非結(jié)構(gòu)化數(shù)據(jù)采用字節(jié)流的形式在客戶(hù)端和服務(wù)端之間進(jìn)行傳輸和存儲(chǔ),因此使用方式非常靈活,緩存數(shù)據(jù)存儲(chǔ)幾乎沒(méi)有任何限制,并且服務(wù)端也不需要關(guān)心存儲(chǔ)的具體內(nèi)容及字節(jié)序。

memcache的分布式實(shí)現(xiàn)

memcache本身并不是一種分布式的緩存系統(tǒng),它的分布式是由訪問(wèn)它的客戶(hù)端來(lái)實(shí)現(xiàn)的。一種比較簡(jiǎn)單的實(shí)現(xiàn)方式是根據(jù)緩存的key來(lái)進(jìn)行Hash,當(dāng)后端有N臺(tái)緩存服務(wù)器時(shí),訪問(wèn)的服務(wù)器為hash(key)%N,這樣可以將前端的請(qǐng)求均衡地映射到后端的緩存服務(wù)器。但這樣也會(huì)導(dǎo)致一個(gè)問(wèn)題,一旦后端某臺(tái)緩存服務(wù)器宕機(jī),或者是由于集群壓力過(guò)大,需要新增緩存服務(wù)器時(shí),大部分的key將會(huì)重新分布。對(duì)于高并發(fā)系統(tǒng)來(lái)說(shuō),這可能會(huì)演變成一場(chǎng)災(zāi)難,所有的請(qǐng)求將如洪水般瘋狂地涌向后端的數(shù)據(jù)庫(kù)服務(wù)器,而數(shù)據(jù)庫(kù)服務(wù)器的不可用,將會(huì)導(dǎo)致整個(gè)應(yīng)用的不可用,形成所謂的“雪崩效應(yīng)”。

consistent Hash算法

使用consistent Hash算法能夠在一定程度上改善上述問(wèn)題。該算法早在1997年就在論文Consistent hashing and random trees中被提出,它能夠在移除/添加一臺(tái)緩存服務(wù)器時(shí),盡可能小地改變已存在的key映射關(guān)系,避免大量key的重新映射。

consistent Hash的原理是這樣的,它將Hash函數(shù)的值域空間組織成一個(gè)圓環(huán),假設(shè)Hash函數(shù)的值域空間為0~(2的32次方-1),也就是Hash值是一個(gè)32位的無(wú)符號(hào)整型,整個(gè)空間按照順時(shí)針的方向進(jìn)行組織,然后對(duì)相應(yīng)的服務(wù)器節(jié)點(diǎn)進(jìn)行Hash,將他們映射到Hash環(huán)上,假設(shè)有4臺(tái)服務(wù)器分別為node1,node2,node3,node4,它們?cè)诃h(huán)上的位置如圖所示。

接下來(lái)使用相同的Hash函數(shù),計(jì)算出對(duì)應(yīng)的key的Hash值在環(huán)上對(duì)應(yīng)的位置。根據(jù)consistent Hash算法,按照順時(shí)針?lè)较?,分布在node1與node2之間的key,它們的訪問(wèn)請(qǐng)求會(huì)被定位到node2,而node2與node4之間的key,訪問(wèn)請(qǐng)求會(huì)被定位到node4,以此類(lèi)推。
假設(shè)有新的節(jié)點(diǎn)node5增加進(jìn)來(lái)時(shí),假設(shè)它被Hash到node2與node4之間,那么受影響的只有node2和node5之間的key,它們將被重新映射到node5,而其他key的映射關(guān)系將不會(huì)發(fā)生改變,這樣避免了大量key的重新映射。
當(dāng)然上面描繪的知識(shí)一種理想的情況,各個(gè)節(jié)點(diǎn)在環(huán)上分布得十分均勻。正常情況下,當(dāng)節(jié)點(diǎn)數(shù)據(jù)較少時(shí),節(jié)點(diǎn)的分布可能十分不均勻,從而導(dǎo)致數(shù)據(jù)訪問(wèn)的傾斜,大量的key被映射到同一臺(tái)服務(wù)器上。為了避免這種情況的出現(xiàn),可以引入虛擬節(jié)點(diǎn)的機(jī)制,對(duì)每一個(gè)服務(wù)器節(jié)點(diǎn)都計(jì)算多個(gè)Hash值,每一個(gè)Hash值都對(duì)應(yīng)環(huán)上一個(gè)節(jié)點(diǎn)的位置,該節(jié)點(diǎn)稱(chēng)為虛擬節(jié)點(diǎn),而key的映射方式不變,只是多了一步從虛擬節(jié)點(diǎn)再映射到真實(shí)節(jié)點(diǎn)的過(guò)程。這樣,如果虛擬節(jié)點(diǎn)的數(shù)量足夠多,即使只有很少的實(shí)際節(jié)點(diǎn),也能夠使key分布得相對(duì)均衡。

分布式session

對(duì)于大型分布式網(wǎng)站來(lái)說(shuō),支撐其業(yè)務(wù)的遠(yuǎn)遠(yuǎn)不止一臺(tái)服務(wù)器,而是一個(gè)分布式集群,請(qǐng)求在不同服務(wù)器之間跳轉(zhuǎn)。那么如何保持服務(wù)器之間的session同步呢?傳統(tǒng)網(wǎng)站一般通過(guò)將一部分?jǐn)?shù)據(jù)存儲(chǔ)在cookie中,來(lái)規(guī)避分布式環(huán)境下session的操作。這樣做的弊端很多,一方面cookie的安全性一直廣為詬病,另一方面cookie存儲(chǔ)數(shù)據(jù)的大小是有限制的。隨著移動(dòng)互聯(lián)網(wǎng)的發(fā)展,很多情況下還得兼顧移動(dòng)端的session需求,使得采用cookie來(lái)進(jìn)行session同步的方式的弊端更為凸顯。分布式session正是在這種情況下應(yīng)運(yùn)而生的。
對(duì)于系統(tǒng)可靠性要求較高的用戶(hù),可以將session持久化到DB中,這樣可以保證宕機(jī)時(shí)會(huì)話不易丟失,但缺點(diǎn)也是顯而易見(jiàn)的,系統(tǒng)的整體吞吐將受到很大的影響。另一種解決方案便是將session統(tǒng)一存儲(chǔ)到緩存集群上,如memcache,這樣可以保證較高的讀、寫(xiě)性能,這一點(diǎn)對(duì)于并發(fā)量大的系統(tǒng)來(lái)說(shuō)非常重要;并且從安全性考慮,session比較是有有效期的,使用緩存存儲(chǔ),也便于利用緩存的失效機(jī)制。使用緩存的缺點(diǎn)是,一旦緩存重啟,里面保存的會(huì)話也就丟失了,需要重新建立會(huì)話。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/61897.html

相關(guān)文章

  • 大型網(wǎng)站系統(tǒng)Java中間件》讀書(shū)筆記(上)

    摘要:另一個(gè)用戶(hù)請(qǐng)求過(guò)來(lái),負(fù)載均衡器指派這個(gè)請(qǐng)求到服務(wù)器。這樣就平攤了請(qǐng)求這種方式就叫做輪詢(xún)策略還有很多種,就看你想怎么實(shí)現(xiàn)了,反正這個(gè)邏輯的代碼放在負(fù)載均衡器上。 前言 只有光頭才能變強(qiáng)。文本已收錄至我的GitHub倉(cāng)庫(kù),歡迎Star:https://github.com/ZhongFuCheng3y/3y 這本書(shū)買(mǎi)了一段時(shí)間了,之前在杭州沒(méi)帶過(guò)去,現(xiàn)在讀完第三章,來(lái)做做筆記 showI...

    baukh789 評(píng)論0 收藏0
  • 從小白程序員一路晉升為大廠高級(jí)技術(shù)專(zhuān)家我看過(guò)哪些書(shū)籍?(建議收藏)

    摘要:大家好,我是冰河有句話叫做投資啥都不如投資自己的回報(bào)率高。馬上就十一國(guó)慶假期了,給小伙伴們分享下,從小白程序員到大廠高級(jí)技術(shù)專(zhuān)家我看過(guò)哪些技術(shù)類(lèi)書(shū)籍。 大家好,我是...

    sf_wangchong 評(píng)論0 收藏0
  • 后端技術(shù)精選

    摘要:服務(wù)教程在它提出十多年后的今天,已經(jīng)成為最重要的應(yīng)用技術(shù)之一。全方位提升網(wǎng)站打開(kāi)速度前端后端新的技術(shù)如何在內(nèi)完整打開(kāi)網(wǎng)站會(huì)直接影響用戶(hù)的滿意度及留存率,在前端后端數(shù)據(jù)緩存加速等等方面都有諸多可以提升。 HTTPS 原理剖析與項(xiàng)目場(chǎng)景 最近手頭有兩個(gè)項(xiàng)目,XX 導(dǎo)航和 XX 產(chǎn)業(yè)平臺(tái),都需要使用 HTTPS 協(xié)議,因此,這次對(duì) HTTPS 協(xié)議做一次整理與分享。 使用緩存應(yīng)該注意哪些問(wèn)題...

    GitCafe 評(píng)論0 收藏0
  • 后端技術(shù)精選

    摘要:服務(wù)教程在它提出十多年后的今天,已經(jīng)成為最重要的應(yīng)用技術(shù)之一。全方位提升網(wǎng)站打開(kāi)速度前端后端新的技術(shù)如何在內(nèi)完整打開(kāi)網(wǎng)站會(huì)直接影響用戶(hù)的滿意度及留存率,在前端后端數(shù)據(jù)緩存加速等等方面都有諸多可以提升。 HTTPS 原理剖析與項(xiàng)目場(chǎng)景 最近手頭有兩個(gè)項(xiàng)目,XX 導(dǎo)航和 XX 產(chǎn)業(yè)平臺(tái),都需要使用 HTTPS 協(xié)議,因此,這次對(duì) HTTPS 協(xié)議做一次整理與分享。 使用緩存應(yīng)該注意哪些問(wèn)題...

    explorer_ddf 評(píng)論0 收藏0
  • 后端技術(shù)精選

    摘要:服務(wù)教程在它提出十多年后的今天,已經(jīng)成為最重要的應(yīng)用技術(shù)之一。全方位提升網(wǎng)站打開(kāi)速度前端后端新的技術(shù)如何在內(nèi)完整打開(kāi)網(wǎng)站會(huì)直接影響用戶(hù)的滿意度及留存率,在前端后端數(shù)據(jù)緩存加速等等方面都有諸多可以提升。 HTTPS 原理剖析與項(xiàng)目場(chǎng)景 最近手頭有兩個(gè)項(xiàng)目,XX 導(dǎo)航和 XX 產(chǎn)業(yè)平臺(tái),都需要使用 HTTPS 協(xié)議,因此,這次對(duì) HTTPS 協(xié)議做一次整理與分享。 使用緩存應(yīng)該注意哪些問(wèn)題...

    Jensen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<