构建高性能分布式搜索引擎(Memcached-基础篇)一
生活随笔
收集整理的這篇文章主要介紹了
构建高性能分布式搜索引擎(Memcached-基础篇)一
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Memcached是danga.com(運(yùn)營(yíng)LiveJournal的技術(shù)團(tuán)隊(duì))開發(fā)的一套高性能的,分布式內(nèi)存對(duì)象緩存系統(tǒng),用于在動(dòng)態(tài)系統(tǒng)中減少數(shù)據(jù)庫(kù)負(fù)載,提升性能。關(guān)于這個(gè)東西,相信很多人都用過(guò),本文意在通過(guò)對(duì)memcached的實(shí)現(xiàn)及代碼分析,獲得對(duì)這個(gè)出色的開源軟件更深入的了解,并可以根據(jù)我們的需要對(duì)其進(jìn)行更進(jìn)一步的優(yōu)化。 為什么不使用數(shù)據(jù)庫(kù)做這些? 暫且不考慮使用什么樣的數(shù)據(jù)庫(kù)(MS-SQL, Oracle, Postgres, MysQL-InnoDB, etc..), 實(shí)現(xiàn)事務(wù)(ACID,Atomicity, Consistency, Isolation, and Durability )需要大量開銷,特別當(dāng)使用到硬盤的時(shí)候,這就意味著查詢可能會(huì)阻塞。當(dāng)使用不包含事務(wù)的數(shù)據(jù)庫(kù)(例如Mysql-MyISAM),上面的開銷不存在,但讀線程又可能會(huì)被寫線程阻塞。
Memcached從不阻塞,速度非常快。 為什么不使用共享內(nèi)存?
最初的緩存做法是在線程內(nèi)對(duì)對(duì)象進(jìn)行緩存,但這樣進(jìn)程間就無(wú)法共享緩存,命中率非常低,導(dǎo)致緩存效率極低。后來(lái)出現(xiàn)了共享內(nèi)存的緩存,多個(gè)進(jìn)程或者線程共享同一塊緩存,但畢竟還是只能局限在一臺(tái)機(jī)器上,多臺(tái)機(jī)器做相同的緩存同樣是一種資源的浪費(fèi),而且命中率也比較低。
Memcached Server和Clients共同工作,實(shí)現(xiàn)跨服務(wù)器分布式的全局的緩存。并且可以與Web Server共同工作,Web Server對(duì)CPU要求高,對(duì)內(nèi)存要求低,Memcached Server對(duì)CPU要求低,對(duì)內(nèi)存要求高,所以可以搭配使用。 Mysql 4.x的緩存怎么樣?
Mysql查詢緩存不是很理想,因?yàn)橐韵聨c(diǎn):
當(dāng)指定的表發(fā)生更新后,查詢緩存會(huì)被清空。在一個(gè)大負(fù)載的系統(tǒng)上這樣的事情發(fā)生的非常頻繁,導(dǎo)致查詢緩存效率非常低,有的情況下甚至還不如不開,因?yàn)樗鼘?duì)cache的管理還是會(huì)有開銷。
在32位機(jī)器上,Mysql對(duì)內(nèi)存的操作還是被限制在4G以內(nèi),但memcached可以分布開,內(nèi)存規(guī)模理論上不受限制。
Mysql上的是查詢緩存,而不是對(duì)象緩存,如果在查詢后還需要大量其它操作,查詢緩存就幫不上忙了。
如果要緩存的數(shù)據(jù)不大,并且查詢的不是非常頻繁,這樣的情況下可以用Mysql 查詢緩存,不然的話memcached更好。 數(shù)據(jù)庫(kù)同步怎么樣?
這里的數(shù)據(jù)庫(kù)同步是指的類似Mysql Master-Slave模式的靠日志同步實(shí)現(xiàn)數(shù)據(jù)庫(kù)同步的機(jī)制。
你可以分布讀操作,但無(wú)法分布寫操作,但寫操作的同步需要消耗大量的資源,而且這個(gè)開銷是隨著slave服務(wù)器的增長(zhǎng)而不斷增長(zhǎng)的。
下一步是要對(duì)數(shù)據(jù)庫(kù)進(jìn)行水平切分,從而讓不同的數(shù)據(jù)分布到不同的數(shù)據(jù)庫(kù)服務(wù)器組上,從而實(shí)現(xiàn)分布的讀寫,這需要在應(yīng)用中實(shí)現(xiàn)根據(jù)不同的數(shù)據(jù)連接不同的數(shù)據(jù)庫(kù)。
當(dāng)這一模式工作后(我們也推薦這樣做),更多的數(shù)據(jù)庫(kù)導(dǎo)致更多的讓人頭疼的硬件錯(cuò)誤。
Memcached可以有效的降低對(duì)數(shù)據(jù)庫(kù)的訪問(wèn),讓數(shù)據(jù)庫(kù)用主要的精力來(lái)做不頻繁的寫操作,而這是數(shù)據(jù)庫(kù)自己控制的,很少會(huì)自己阻塞 自己。 Memcached快嗎? 非常快,它使用libevent,可以應(yīng)付任意數(shù)量打開的連接(使用epoll,而非poll),使用非阻塞網(wǎng)絡(luò)IO,分布式散列對(duì)象到不同的服務(wù)器,查詢復(fù)雜度是O(1)。 深圳E搜科技(搜索引擎技術(shù)鉆研者!)
QQ群:15911745
QQ:448114915;934724029
Mobile:13168078506;13713628016
Email:pc2004lcq@126.com;jackbison@163.com
Memcached從不阻塞,速度非常快。 為什么不使用共享內(nèi)存?
最初的緩存做法是在線程內(nèi)對(duì)對(duì)象進(jìn)行緩存,但這樣進(jìn)程間就無(wú)法共享緩存,命中率非常低,導(dǎo)致緩存效率極低。后來(lái)出現(xiàn)了共享內(nèi)存的緩存,多個(gè)進(jìn)程或者線程共享同一塊緩存,但畢竟還是只能局限在一臺(tái)機(jī)器上,多臺(tái)機(jī)器做相同的緩存同樣是一種資源的浪費(fèi),而且命中率也比較低。
Memcached Server和Clients共同工作,實(shí)現(xiàn)跨服務(wù)器分布式的全局的緩存。并且可以與Web Server共同工作,Web Server對(duì)CPU要求高,對(duì)內(nèi)存要求低,Memcached Server對(duì)CPU要求低,對(duì)內(nèi)存要求高,所以可以搭配使用。 Mysql 4.x的緩存怎么樣?
Mysql查詢緩存不是很理想,因?yàn)橐韵聨c(diǎn):
當(dāng)指定的表發(fā)生更新后,查詢緩存會(huì)被清空。在一個(gè)大負(fù)載的系統(tǒng)上這樣的事情發(fā)生的非常頻繁,導(dǎo)致查詢緩存效率非常低,有的情況下甚至還不如不開,因?yàn)樗鼘?duì)cache的管理還是會(huì)有開銷。
在32位機(jī)器上,Mysql對(duì)內(nèi)存的操作還是被限制在4G以內(nèi),但memcached可以分布開,內(nèi)存規(guī)模理論上不受限制。
Mysql上的是查詢緩存,而不是對(duì)象緩存,如果在查詢后還需要大量其它操作,查詢緩存就幫不上忙了。
如果要緩存的數(shù)據(jù)不大,并且查詢的不是非常頻繁,這樣的情況下可以用Mysql 查詢緩存,不然的話memcached更好。 數(shù)據(jù)庫(kù)同步怎么樣?
這里的數(shù)據(jù)庫(kù)同步是指的類似Mysql Master-Slave模式的靠日志同步實(shí)現(xiàn)數(shù)據(jù)庫(kù)同步的機(jī)制。
你可以分布讀操作,但無(wú)法分布寫操作,但寫操作的同步需要消耗大量的資源,而且這個(gè)開銷是隨著slave服務(wù)器的增長(zhǎng)而不斷增長(zhǎng)的。
下一步是要對(duì)數(shù)據(jù)庫(kù)進(jìn)行水平切分,從而讓不同的數(shù)據(jù)分布到不同的數(shù)據(jù)庫(kù)服務(wù)器組上,從而實(shí)現(xiàn)分布的讀寫,這需要在應(yīng)用中實(shí)現(xiàn)根據(jù)不同的數(shù)據(jù)連接不同的數(shù)據(jù)庫(kù)。
當(dāng)這一模式工作后(我們也推薦這樣做),更多的數(shù)據(jù)庫(kù)導(dǎo)致更多的讓人頭疼的硬件錯(cuò)誤。
Memcached可以有效的降低對(duì)數(shù)據(jù)庫(kù)的訪問(wèn),讓數(shù)據(jù)庫(kù)用主要的精力來(lái)做不頻繁的寫操作,而這是數(shù)據(jù)庫(kù)自己控制的,很少會(huì)自己阻塞 自己。 Memcached快嗎? 非常快,它使用libevent,可以應(yīng)付任意數(shù)量打開的連接(使用epoll,而非poll),使用非阻塞網(wǎng)絡(luò)IO,分布式散列對(duì)象到不同的服務(wù)器,查詢復(fù)雜度是O(1)。 深圳E搜科技(搜索引擎技術(shù)鉆研者!)
QQ群:15911745
QQ:448114915;934724029
Mobile:13168078506;13713628016
Email:pc2004lcq@126.com;jackbison@163.com
轉(zhuǎn)載于:https://blog.51cto.com/desertwolf/210788
總結(jié)
以上是生活随笔為你收集整理的构建高性能分布式搜索引擎(Memcached-基础篇)一的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 太极拳的特点及演练技法(太极拳的特点)
- 下一篇: 甲午战争日本有没有航母参战甲午战申甲午战