優(yōu)惠活動(dòng) - 12周年慶本月新客福利
優(yōu)惠活動(dòng) - 12周年慶本月新客福利
優(yōu)惠活動(dòng) - 12周年慶本月新客福利

網(wǎng)站對(duì)象緩存

對(duì)象緩存用于存儲(chǔ)會(huì)被應(yīng)用再用到的對(duì)象。這些對(duì)象通常來自數(shù)據(jù)庫,或由計(jì)算或應(yīng)用操作生成。這些對(duì)象幾乎都是有序?qū)ο?,?huì)被排列或組編成有序的格式,以便最小化內(nèi)存占用量。在獲取這些對(duì)象時(shí),它們的排序會(huì)被打亂或解編,以轉(zhuǎn)換成原始的數(shù)據(jù)類型。所謂組編,就是把對(duì)象的內(nèi)存表示形式轉(zhuǎn)換成字節(jié)流或字節(jié)序列進(jìn)程,以便存儲(chǔ)或傳輸。所謂解編,就是把字節(jié)流表示的對(duì)象解碼成原始的對(duì)象格式的進(jìn)程。如果使用了對(duì)象緩存,應(yīng)用必須注意到它們,并且實(shí)現(xiàn)操作緩存的方法。


 
操作緩存的基本方法包括把數(shù)據(jù)加人緩存、從緩存中獲取數(shù)據(jù)以及更新數(shù)據(jù)。通常在緩存中添加數(shù)據(jù)叫做set,從緩存中獲取數(shù)據(jù)叫做get,更新數(shù)據(jù)是replace。許多程序設(shè)計(jì)語言對(duì)最流行的緩存都已經(jīng)有內(nèi)置的支持。memcached是當(dāng)前最常用的緩存之一。它“本質(zhì)上是一種高性能的分布式內(nèi)存對(duì)象緩存系統(tǒng),但目的在于通過減輕數(shù)據(jù)庫的負(fù)載來加速動(dòng)態(tài)的Web應(yīng)用”。這種特殊的緩存使用了非??斓臒o阻塞網(wǎng)絡(luò)輸入輸出(IO),它自身具備防止內(nèi)存分片的slab分配器、可以確保分配是的,即不論數(shù)據(jù)多少都能夠在常數(shù)時(shí)間內(nèi)進(jìn)行計(jì)算。
 
正如在memcached的描述中所說的,它主要是通過減少對(duì)數(shù)據(jù)庫的請(qǐng)求,從而加速了Web應(yīng)用。這種方法是合理的,因?yàn)閿?shù)據(jù)庫幾乎總是應(yīng)用層中獲取數(shù)據(jù)最慢的設(shè)備。在關(guān)系數(shù)據(jù)庫管理系統(tǒng)中,實(shí)現(xiàn)ACID(原子性、一致性、隔離性、持久性)屬性的額外支出是很高的,尤其是要從硬盤讀寫數(shù)據(jù)時(shí)。但在某些情況下,在系統(tǒng)的其他層之間使用對(duì)象緩存層,也是完全正常和明智的。
 
在一個(gè)典型的兩層或者三層架構(gòu)中,放置對(duì)象緩存最好的方法是把它放在數(shù)據(jù)庫層之前。正如前面提到過的,這是因?yàn)閿?shù)據(jù)庫層通常是整體執(zhí)行速度最慢的層,也通常是擴(kuò)展最貴的一層。其中有一個(gè)Web服務(wù)器層、一個(gè)應(yīng)用服務(wù)器層和一個(gè)數(shù)據(jù)庫層。這里不止有一個(gè)對(duì)象緩存,而是有兩個(gè)。一個(gè)對(duì)象緩存位于應(yīng)用服務(wù)器與數(shù)據(jù)庫層之間,另一個(gè)位于Web服務(wù)器與應(yīng)用服務(wù)器之間。如果應(yīng)用服務(wù)器要執(zhí)行大量可緩存的計(jì)算或操作,那么這種設(shè)計(jì)是很合理的。這樣可以使應(yīng)用服務(wù)器不必總是重復(fù)計(jì)算相同的數(shù)據(jù),而是可以把結(jié)果緩存起來,從而減輕了應(yīng)用服務(wù)器的負(fù)載。與數(shù)據(jù)庫的情況相似,這個(gè)緩存層可以在不添加硬件的情況下,幫助應(yīng)用服務(wù)器層擴(kuò)展。緩存的對(duì)象很可能是來自數(shù)據(jù)庫或應(yīng)用服務(wù)器的完整數(shù)據(jù)集的子集。例如,Web服務(wù)器上的應(yīng)用代碼可能會(huì)利用緩存存放用戶權(quán)限對(duì)象,但是不會(huì)存放交易金額,因?yàn)橛脩魴?quán)限不經(jīng)常改變且會(huì)被經(jīng)常訪問,而每個(gè)交易的交易金額可能各不同且只會(huì)被訪問一次。
 
數(shù)據(jù)庫的ACID屬性
 
原子性、一致性、隔離性、持久性(ACID)是數(shù)據(jù)庫管理系統(tǒng)采用的屬性,以確保交易是完全可靠的。
 
原子性是數(shù)據(jù)庫管理系統(tǒng)的屬性,可以確保一個(gè)交易的所有任務(wù)都被完全執(zhí)行了,或者整個(gè)交易都被回退了。硬件或軟件的故障不會(huì)造成交易只完成了一半。
 
一致性是確保交易前和交易后數(shù)據(jù)庫保持穩(wěn)定狀態(tài)的屬性。如果一個(gè)交易成功了,它會(huì)把數(shù)據(jù)庫從一個(gè)有效狀態(tài)轉(zhuǎn)換到另一個(gè)符合一定規(guī)則的有效狀態(tài)。
 
隔離性是在一個(gè)交易操作數(shù)據(jù)時(shí),防止另一個(gè)交易訪問它的屬性。大多數(shù)數(shù)據(jù)庫管理系統(tǒng)都采用數(shù)據(jù)庫鎖來確保隔離性。
 
持久性這個(gè)屬性指的是在系統(tǒng)把交易標(biāo)記為成功后,交易就會(huì)保持為完成的、不會(huì)回退的。所有的一致性檢查必須在交易被認(rèn)為是完成了之前完成。
 
如果你在網(wǎng)站建設(shè)數(shù)據(jù)庫或應(yīng)用服務(wù)器中有經(jīng)常被訪問但卻不經(jīng)常更新的數(shù)據(jù),那么使用對(duì)象緩存就非常合理。要減少負(fù)載,首先查看的就是數(shù)據(jù)庫,因?yàn)樗ǔJ亲盥彩亲钯F的一層。但除此之外,還要考慮一下系統(tǒng)中的其他層或池,看看哪里需要對(duì)象緩存。另一個(gè)可能需要對(duì)象緩存的地方是集中的會(huì)話管理緩存。如果你使用了會(huì)話數(shù)據(jù),我們建議你首先盡可能地減少會(huì)話數(shù)據(jù)。如果你可以避免使用會(huì)話,那么就根本不要采用它們,因?yàn)樗鼈冊(cè)诨A(chǔ)設(shè)施和架構(gòu)方面,實(shí)現(xiàn)成本都很高。如果你不能避免使用會(huì)話,我們建議你考慮集中的會(huì)話管理系統(tǒng),這樣可以把請(qǐng)求發(fā)送到任何一個(gè)Web服務(wù)器上,會(huì)話可以從一個(gè)服務(wù)器轉(zhuǎn)移到另一個(gè)服務(wù)器上,不會(huì)造成任何干擾。這樣通過一個(gè)負(fù)載均衡的解決方案,你就能夠更有效地利用Web服務(wù)器,而當(dāng)發(fā)生故障時(shí),也可以以最小的干擾,把用戶從一臺(tái)服務(wù)器上轉(zhuǎn)移到另一臺(tái)服務(wù)器上。你可以繼續(xù)檢查自己的應(yīng)用,找到更多可以應(yīng)用對(duì)象緩存的地方。

本文地址:http://hbbqcd.cn//article/3898.html
相關(guān)文章:
最新文章: