亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

學(xué)習(xí)筆記之Memcached原理

imingyu / 1538人閱讀

摘要:而多路復(fù)用無需等待任務(wù)完成,而是將所有任務(wù)維護(hù)在一個(gè)組中,在等待過程中線程可以去處理其他的任務(wù),當(dāng)某個(gè)任務(wù)完成后,再去操作該操作符。而目前僅有的調(diào)優(yōu)方案是調(diào)整因子,讓的大小盡可能的接近,減少空間的浪費(fèi)。

0x00 Memcached簡(jiǎn)述

Memcached是一套高性能的分布式內(nèi)存對(duì)象緩存系統(tǒng),用于在動(dòng)態(tài)系統(tǒng)中減少數(shù)據(jù)庫(kù)負(fù)載,提升性能。

0x01 Memcached特性

基于libevent的事件處理

內(nèi)置內(nèi)存存儲(chǔ)方式SLab Allocation機(jī)制

并不單一的數(shù)據(jù)刪除機(jī)制

基于客戶端的分布式系統(tǒng)

0x02 高性能的基礎(chǔ):libevent事件處理

Libevent 是一個(gè)用C語(yǔ)言編寫的、輕量級(jí)的開源高性能網(wǎng)絡(luò)庫(kù),主要有以下幾個(gè)亮點(diǎn):事件驅(qū)動(dòng)( event-driven),高性能;輕量級(jí),專注于網(wǎng)絡(luò),不如 ACE 那么臃腫龐大;源代碼相當(dāng)精煉、易讀;跨平臺(tái),支持 Windows、 Linux、 *BSD 和 Mac Os;支持多種 I/O 多路復(fù)用技術(shù), epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定時(shí)器和信號(hào)等事件;注冊(cè)事件優(yōu)先級(jí)。

以上引自百度百科,在不支持I/O多路復(fù)用的情況下,一個(gè)線程同時(shí)只能處理一個(gè)socket文件操作符,所以當(dāng)一個(gè)任務(wù)未完成時(shí),線程需要等待任務(wù)的處理,這種處理模型效率低下。而I/O多路復(fù)用無需等待任務(wù)完成,而是將所有任務(wù)維護(hù)在一個(gè)I/O組中,在等待過程中線程可以去處理其他的任務(wù),當(dāng)某個(gè)任務(wù)完成后,再去操作該socket操作符。值得一提的是,在I/O多路復(fù)用技術(shù)中,epoll是非常棒的,相比于select模型,epoll沒有文件操作符數(shù)量的限制;并且select模型是將所有操作符維護(hù)在一個(gè)I/O組中,當(dāng)有socket數(shù)據(jù)可操作時(shí),線程需要在組中尋找哪個(gè)文件操作符可操作,而epoll只將可操作的socket文件操作符給線程,線程無需自己尋找,可以直接操作該socket,提高了處理性能。

所以,使用libevent時(shí)間處理模型,非常好的提升了memcached的性能。

0x03 SLab Allocation機(jī)制

在memcached中,內(nèi)存不是直接C語(yǔ)言提供的malloc() free() 進(jìn)行管理的,因?yàn)樵膬?nèi)存管理方式會(huì)造成內(nèi)存碎片,會(huì)加重內(nèi)存管理器的內(nèi)存管理負(fù)擔(dān)。而SLab Allocation機(jī)制完美的解決了內(nèi)存碎片化的問題。

a.解決內(nèi)存碎片化

SLab Allocator 在初始化時(shí),通過將內(nèi)存分配成預(yù)先設(shè)置的大小,將這些內(nèi)存分割成特定長(zhǎng)度的塊(chunk),并把尺寸相同的chunk分成一個(gè)組,也就是chunk集合,而這種方式就解決了內(nèi)存碎片化的問題。

b.內(nèi)存預(yù)分配

在需要存儲(chǔ)緩存數(shù)據(jù)時(shí),memcached會(huì)在chunk中選擇與所存數(shù)據(jù)大小最接近的chunk,并將數(shù)據(jù)存儲(chǔ)到該chunk中,這樣不需要每次在存儲(chǔ)數(shù)據(jù)時(shí),都向操作系統(tǒng)申請(qǐng)空間,提升了memcached的處理性能。

c.內(nèi)存重復(fù)利用

當(dāng)存儲(chǔ)的數(shù)據(jù)過期后,memcached不會(huì)釋放該數(shù)據(jù)的所占用的內(nèi)存,而僅僅是將該數(shù)據(jù)標(biāo)記為不可用,當(dāng)有新數(shù)據(jù)需要存儲(chǔ)時(shí),memcached會(huì)將數(shù)據(jù)重新存儲(chǔ)到該空間中,用這種方式對(duì)內(nèi)存進(jìn)行重復(fù)利用。

d.缺點(diǎn)

因?yàn)镾lab Allocator將內(nèi)存分割成固定大小的塊,當(dāng)存儲(chǔ)的數(shù)據(jù)小于chunk的長(zhǎng)度,會(huì)導(dǎo)致該chunk剩余空間的浪費(fèi)。例如:當(dāng)一個(gè)數(shù)據(jù)占用60K,而最接近的chunk長(zhǎng)度為64K,此時(shí)就有4K的空間造成浪費(fèi)。而目前僅有的調(diào)優(yōu)方案是調(diào)整Growth Factor因子,讓chunk的大小盡可能的接近,減少空間的浪費(fèi)。

0x04 memached的刪除機(jī)制
a.不會(huì)真正刪除記錄

當(dāng)存儲(chǔ)在memcached中的記錄過期時(shí),memcached不會(huì)釋放該內(nèi)存,而是讓客戶端對(duì)該記錄不可見。留下內(nèi)存來,讓之后的存儲(chǔ)記錄進(jìn)行內(nèi)存重復(fù)利用。

b.Lazy Expiration(懶過期機(jī)制)

memcached為了提升性能,在內(nèi)部不會(huì)對(duì)存儲(chǔ)在memcached中的記錄進(jìn)行監(jiān)視,而是在每次get數(shù)據(jù)的時(shí)候,對(duì)該記錄的過期時(shí)間進(jìn)行校驗(yàn),當(dāng)記錄過期,則不返回?cái)?shù)據(jù)。

c.LRU(最近最少使用)

雖然memcached擁有內(nèi)存重復(fù)利用的機(jī)制,但是進(jìn)行大量數(shù)據(jù)緩存時(shí),還是會(huì)出現(xiàn)內(nèi)存吃滿,memcached無法在SLab中獲取到空閑的內(nèi)存,在這種情況下,memcached會(huì)觸發(fā)LRU,會(huì)在最近未被使用的記錄中進(jìn)行搜索,并將這些空間分配給新的記錄。

0x05 memcached的分布式

不同于其他軟件的分布式,memcached的分布式不存在于服務(wù)端,而是完全由客戶端進(jìn)行分布式的處理。這樣的好處是,減少memcached服務(wù)端之間的網(wǎng)絡(luò)連接,當(dāng)某一個(gè)服務(wù)器宕機(jī)時(shí),不至于影響其他機(jī)器的正常使用。

a.根據(jù)余數(shù)計(jì)算分散

通過crc32()計(jì)算出鍵的整數(shù)哈希值,然后除以服務(wù)器的臺(tái)數(shù),求得余數(shù)進(jìn)行服務(wù)器節(jié)點(diǎn)的選擇,此種方式的優(yōu)點(diǎn)是,簡(jiǎn)單易操作,并且數(shù)據(jù)的分散性也非常優(yōu)秀。但缺點(diǎn)是,當(dāng)改變服務(wù)器的數(shù)量時(shí),緩存重組的代價(jià)巨大,在此過程中緩存的命中率急劇下降。

b.Consistent Hashing(一致性哈希)

首先求出memcached服務(wù)器節(jié)點(diǎn)的哈希值,并將其分配到一個(gè)0~2^32的圓上,我們稱該這個(gè)圓為值域,之后通過同樣的計(jì)算方式求出鍵的哈希值,并將值映射到圓上,然后從數(shù)據(jù)映射到的位置開始順時(shí)針尋找,并將數(shù)據(jù)存儲(chǔ)到找到的第一個(gè)服務(wù)器節(jié)點(diǎn)上,如果找到2^32仍然找不到就將數(shù)據(jù)存儲(chǔ)到第一臺(tái)memcached機(jī)器上。

當(dāng)添加一臺(tái)新機(jī)器時(shí),通過同樣的hash算法將該機(jī)器映射到圓上,影響的僅僅是新機(jī)器的節(jié)點(diǎn)到它的上一個(gè)節(jié)點(diǎn)之間的數(shù)據(jù)。

當(dāng)刪除一臺(tái)機(jī)器時(shí),同樣也僅僅影響映射到刪除的機(jī)器和它的上一臺(tái)機(jī)器之間的數(shù)據(jù),而不會(huì)造成大面積的緩存重組即rehash.

0x06 擴(kuò)展閱讀

memcached完全剖析

使用 libevent 和 libev 提高網(wǎng)絡(luò)應(yīng)用性能

高性能IO模型淺析

備注:資源和圖片等均來自網(wǎng)絡(luò)

原文作者:我才是二亮
原文鏈接:http://blog.2liang.me/2016/11/28/learn-memcached-principle/
轉(zhuǎn)載請(qǐng)?jiān)谡闹袠?biāo)注并保留原文鏈接、作者等信息。

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

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

相關(guān)文章

  • PHPer書單

    摘要:想提升自己,還得多看書多看書多看書下面是我收集到的一些程序員應(yīng)該看得書單及在線教程,自己也沒有全部看完。共勉吧當(dāng)然,如果你有好的書想分享給大家的或者覺得書單不合理,可以去通過進(jìn)行提交。講師溫銘,軟件基金會(huì)主席,最佳實(shí)踐作者。 想提升自己,還得多看書!多看書!多看書!下面是我收集到的一些PHP程序員應(yīng)該看得書單及在線教程,自己也沒有全部看完。共勉吧!當(dāng)然,如果你有好的書想分享給大家的或者...

    jimhs 評(píng)論0 收藏0
  • Docker學(xué)習(xí)筆記

    摘要:學(xué)習(xí)背景近些年,如果你是一名開發(fā),那么這個(gè)熱門的技術(shù)名詞你一定聽說過,我也不例外,但是因?yàn)槠綍r(shí)沒接觸過,所以一直都沒動(dòng)力去了解使用。 學(xué)習(xí)背景 近些年,如果你是一名開發(fā),那么Docker這個(gè)熱門的技術(shù)名詞你一定聽說過,我也不例外,但是因?yàn)槠綍r(shí)沒接觸過,所以一直都沒動(dòng)力去了解使用。最近在折騰自己維護(hù)在github上的項(xiàng)目的時(shí)候,發(fā)現(xiàn)項(xiàng)目所依賴的外部環(huán)境比較多,比如zookeeper、re...

    chadLi 評(píng)論0 收藏0
  • 面試中關(guān)于Redis的問題看這篇就夠了

    摘要:所以查閱官方文檔以及他人造好的輪子,總結(jié)了一些面試和學(xué)習(xí)中你必須掌握的問題。在微博應(yīng)用中,可以將一個(gè)用戶所有的關(guān)注人存在一個(gè)集合中,將其所有粉絲存在一個(gè)集合。 昨天寫了一篇自己搭建redis集群并在自己項(xiàng)目中使用的文章,今天早上看別人寫的面經(jīng)發(fā)現(xiàn)redis在面試中還是比較常問的(筆主主Java方向)。所以查閱官方文檔以及他人造好的輪子,總結(jié)了一些redis面試和學(xué)習(xí)中你必須掌握的問題。...

    yanbingyun1990 評(píng)論0 收藏0
  • 『九個(gè)月實(shí)現(xiàn)破億用戶的可擴(kuò)展架構(gòu)』學(xué)習(xí)筆記

    摘要:五技術(shù)棧整個(gè)看下來會(huì)發(fā)現(xiàn)美拍的架構(gòu)做的非常的穩(wěn),小軍也有提到,在項(xiàng)目初期高速發(fā)展階段做架構(gòu)時(shí)要克服對(duì)完美架構(gòu)的欲望克服對(duì)新技術(shù)的欲望,先讓系統(tǒng)跑起來。 昨晚把美拍架構(gòu)負(fù)責(zé)人洪小軍在Qcon上的『九個(gè)月實(shí)現(xiàn)破億用戶的可擴(kuò)展架構(gòu)』分享看了一遍(其實(shí)那場(chǎng)QCon我也在現(xiàn)場(chǎng),但是當(dāng)時(shí)小軍這個(gè)會(huì)場(chǎng)實(shí)在太多人了,而且當(dāng)時(shí)北京還沒開空調(diào)又熱又悶,所以我就挑了個(gè)涼快的會(huì)場(chǎng)去聽了哈哈),感覺有不少值得學(xué)...

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

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

0條評(píng)論

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