robot
最新文章(10)
Mqskit 和其它相關工具
CPython 的 GC 二、三事
寫 Mecurial Extension 是件快樂的事!
Mozilla 台灣辨公室徵人啟事
關於 Apple 的兩項專利
core dump 之前的 frame
怎麼發出 beep 聲?
先承認你要找的是奴才吧!
程式碼要清的多乾淨?
FreeBSD 的 Thread-Local Storage 實作
首頁
新編
最新留言
Entries RSS
重要關鍵字(10)
coding (122)
Python (93)
FreeBSD (71)
WEB (61)
URL (48)
hardware (46)
javascript (36)
Linux (34)
blog (30)
C++ (16)
所有關鍵字
新增 URL
HEMiDEMi 這樣的網站該如何 cache
by thinker
2 Columns
關鍵字:
WEB
研究
tempo(?) 在 linkname:[個人化網頁內容的 cache 方式] http://www.pocketshark.com/blog/page/tempo?entry=%E5%80%8B%E4%BA%BA%E5%8C%96%E7%B6%B2%E9%A0%81%E5%85%A7%E5%AE%B9%E7%9A%84_cache_%E6%96%B9%E5%BC%8F 提了一個問題,```對於 hemi 這種全個人化網頁, 有什麼方法可以做比較好的網頁 cache 系統呢?''' 這讓我一時心癢,想起了 Lamport Theorem 或 linkname:[Lamport Ordering] http://en.wikipedia.org/wiki/Lamport_ordering ,這個在 distribution system 領域中,堪稱最重要的理論。 有回文說,可以用 object cache,或 DB 的 cache 之類的平常方法。這些方法應該有某種程度的效用,但對我這種好發言論技術愛好者來說,完全不夠。因為,我追求的是極至的「奇技淫巧」 :) == Lamport Ordering == 以 Lamport Ordering 主要的觀念就是 「happen before」,「任何 A 得知某個事件 Y 發生,而且 X happen before Y,那麼 A 之後看到受 X 事件所影嚮資訊時,該資訊必需是 X 事件發生後的狀態」。當 X 事件影嚮到某物 t 的狀態,而 Y 事又到其後影嚮同物 t,使 t 的狀態改變,我們就稱 X happen before Y。Lamport Ordering 可以在分散式環境下,維持一種 casual ordering,也就是你看到的相關事件次序和其它人都一樣,但整體的事件發生次序可能不同,最重要的是最後的資訊狀態是有一致性的。 舉例來說,如果有一輛車從停車場出發,然後在路上車禍全毀。之後如果拿監視器存檔給某人看,騙他那是現在的即時定格畫面,如果先讓其看到車禍的畫面,然後才看到車子好好停在停車場的畫面,那一定很奇怪,順序上不一致。如果反過來,先看到車子在停車場的畫面,然後看到車子在路上跑的畫面,即使車子現在早就毀了,我們也覺的車子在路上跑的畫面是很正常的。 又如果,有兩輛車 A、B,兩車完全不在出現在相同現場,A 已毀,而 B 在 A 之後也毀了。如果把存檔定格畫面給某人 看,騙他是即時的定格畫面。如果先出現 B 撞毀的畫面,才接著 A 撞毀的畫面,對某人而言,並沒有不合理的狀況,即使實際順序是反過來的。這是因為兩件事禍是沒有相關性,所以先後順序並不影嚮一致性。如果兩件車禍是有相關性時,順序就很重要。例如有輛車子 $C$ 先把 A 撞爛之後,才衝到另一現場撞 B,這時就不能先出現撞爛的 $C$ 車去撞 B 車,然後才出現嶄新的 $C$ 車去撞 A 車。 == $WEB$ cache == 如果在系統維持一個遞增的版本編號,每產生頁面時,就將當時的版本編號附在 cookie 裡,傳送出去。Reverse proxy 在 cache 該網頁時,會連同網頁的版本編號一起記錄下來。而每個 client 在 request 網頁時,都會透過 cookie 得到版本編號,並下次 request 時送出。 proxy 在收到 request 時,比對 cache 是否 hit,hit 到的 page 如果是動態資料,是否有 cookie 裡記錄的對映版本?如果有,直接傳送給 client,否則找尋大於 cookie 版本的最小版本編號的 page。傳送 hit 的 page 時,必需將該 page 的版本透過 cookie 一起送出。如果是靜態資料的部分,則不傳送版本資訊。 當 client update 時,proxy 必需連回 server 去 update。但,proxy 必需知道什麼情況是 update 資料。這可能得需要 application 的合作,可能是在 update 資料的 $URL$,都附有特定記號,以標示 update 資料,或透過其它方式。proxy 一旦連回 server update 資料,就會連同 respond 的頁面,取得最近的版本編號。之後,client 會透過 cookie update 本身的版本編號,以便之後可以取得更新過的版本。 這個 algorithm 的運作條件是,client update 資料的頁面是很分散,而且 update 資料的比例是相對的少。因此,大部分 client 可以透過 reverse proxy 取得舊一點的資料,而不會影嚮一致性,進而減少 server load。 == Implement == 建議可使用 tinyproxy 來修改。
最後更新時間: 2006-10-04 01:13:40 CST |
引用
查詢:
COMMENTS: