星期三, 7月 04, 2007

軟體重裝工具推薦(1)-應用程式資料分享篇-分散式雜湊表(Distributed hash table)與memcached

分享一個AP資料分享的新實作應用:分散式雜湊表(Distributed hash table) 與 memcached系統:

跨程式與跨機器AP要分享資料, 除了用DB, 為了執行效率, 資料安全與備援能力, 我們可以採用網路儲存之NAS檔案, 或是訊息平台與shared memory結合等方法.

如果是經常要非循序查詢的資料結構資料, 放在hash table很方便, 使用hash table 模組又能夠放在 shared memory 的話, 就更方便了, 可讓同機器不同AP去存取. 若使用STL等標準資料結構的hash table函式庫, 無法直接放到shared memory上, 除非自己去修改實作. 我因為工作需要, 曾經實作了可供不同程式同時讀寫的shared memory AVL tree程式庫(可參考http://aery.scope.googlepages.com/coolcodeworks).

這還不能解決跨機器的問題, 所以我們可以加上訊息平台, 發送訊息向能夠讀取的程式要資料.

後來更好的技術出現啦, 2001年出現了 Distributed hash tables (DHTs) 這樣的觀念, 並且開始了廣泛的實作應用(如P2P的BitTorrent用於分散存放 routing 資料), 可以參考網址:
http://en.wikipedia.org/wiki/Distributed_hash_table

DHT網路中的各機器加入與組織方式像P2P網路具有彈性, 因此DHT 提供了三種優勢特性:
Decentralisation(去集中化), Scalability(可延展性), Fault tolerance(容錯能力, 當系統產生fault 而能繼續提供服務的能力).

memcached (http://www.danga.com/memcached/) 是一種高效率分散式記憶體物件caching系統, 它是應用DHT的開放原始碼專案, 此專案提供的程式庫管理與利用網路上參與各機器的部份記憶體, 透過一致性API函數, 可以存取網路程式或WEB程式的共享資料, 安裝使用方便, 有多種程式語言的API, 網頁程式使用此程式庫可加快執行效率, 故許多網站皆有使用(如Facebook, LiveJournal, Wikipedia), 相關介紹可參考 http://en.wikipedia.org/wiki/Memcached

有需要的人可以去研究看看...

Yuan-Feng Lu