国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[讀書筆記]大型分布式網站架構設計與實踐.分布式緩存

pepperwang / 3346人閱讀

摘要:接下來將介紹分布式緩存的典型代表,以及分布式緩存的應用場景。的分布式實現本身并不是一種分布式的緩存系統,它的分布式是由訪問它的客戶端來實現的。

前言:本書是對分布式系統架構涉及到的相關技術的一本科普書籍。由于很難作為開發參考,只能但求了解。所以通篇淺讀,對分布式系統進行大致的了解。因為寫的非常好,感覺非常有意思,自己也做不出總結。所謂的讀書筆記也就演變成了摘抄。

簡介

一個大型、穩健、成熟的分布式系統的背后,往往會設計眾多的支撐系統,我們將這些支撐系統成為分布式系統的基礎設施。除了前面所介紹的分布式協作及配置管理系統ZooKeeper,我們進行系統架構設計所依賴的基礎設施,還包括分布式緩存系統、持久化存儲、分布式消息系統、搜索引擎、以及CDN系統、負載均衡系統、運維自動化系統等,還有實時計算系統、離線計算系統、分布式文件系統、日志收集系統、監控系統、數據倉庫等。

分布式緩存

在高并發環境下,大量的讀、寫請求涌向數據庫,磁盤的處理速度與內存顯然不在一個量級,從減輕數據庫的壓力和提供系統響應速度兩個角度來考慮,一般都會在數據庫之前加一層緩存。由于單臺機器的內存資源和承載能力有限,并且如果大量使用本地緩存,也會使相同的數據被不同的節點存儲多份,對內存資源造成較大的浪費,因此才催生出了分布式緩存。
接下來將介紹分布式緩存的典型代表memcache,以及分布式緩存的應用場景。最為典型的場景莫過于分布式session。

memcache

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

memcache客戶端與服務端通過構建在TCP協議之上的memcache協議來進行通信,協議支持兩種數據的傳遞,這兩種數據分別為文本行和非結構化數據。文本行主要用來承載客戶端的命令及服務端的響應,而非結構化數據則主要用于客戶端和服務端數據的傳遞。由于非結構化數據采用字節流的形式在客戶端和服務端之間進行傳輸和存儲,因此使用方式非常靈活,緩存數據存儲幾乎沒有任何限制,并且服務端也不需要關心存儲的具體內容及字節序。

memcache的分布式實現

memcache本身并不是一種分布式的緩存系統,它的分布式是由訪問它的客戶端來實現的。一種比較簡單的實現方式是根據緩存的key來進行Hash,當后端有N臺緩存服務器時,訪問的服務器為hash(key)%N,這樣可以將前端的請求均衡地映射到后端的緩存服務器。但這樣也會導致一個問題,一旦后端某臺緩存服務器宕機,或者是由于集群壓力過大,需要新增緩存服務器時,大部分的key將會重新分布。對于高并發系統來說,這可能會演變成一場災難,所有的請求將如洪水般瘋狂地涌向后端的數據庫服務器,而數據庫服務器的不可用,將會導致整個應用的不可用,形成所謂的“雪崩效應”。

consistent Hash算法

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

consistent Hash的原理是這樣的,它將Hash函數的值域空間組織成一個圓環,假設Hash函數的值域空間為0~(2的32次方-1),也就是Hash值是一個32位的無符號整型,整個空間按照順時針的方向進行組織,然后對相應的服務器節點進行Hash,將他們映射到Hash環上,假設有4臺服務器分別為node1,node2,node3,node4,它們在環上的位置如圖所示。

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

分布式session

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/61897.html

相關文章

  • 大型網站系統Java中間件》讀書筆記(上)

    摘要:另一個用戶請求過來,負載均衡器指派這個請求到服務器。這樣就平攤了請求這種方式就叫做輪詢策略還有很多種,就看你想怎么實現了,反正這個邏輯的代碼放在負載均衡器上。 前言 只有光頭才能變強。文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y 這本書買了一段時間了,之前在杭州沒帶過去,現在讀完第三章,來做做筆記 showI...

    baukh789 評論0 收藏0
  • 從小白程序員一路晉升為大廠高級技術專家我看過哪些書籍?(建議收藏)

    摘要:大家好,我是冰河有句話叫做投資啥都不如投資自己的回報率高。馬上就十一國慶假期了,給小伙伴們分享下,從小白程序員到大廠高級技術專家我看過哪些技術類書籍。 大家好,我是...

    sf_wangchong 評論0 收藏0
  • 后端技術精選

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

    GitCafe 評論0 收藏0
  • 后端技術精選

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

    explorer_ddf 評論0 收藏0
  • 后端技術精選

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

    Jensen 評論0 收藏0

發表評論

0條評論

pepperwang

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<