每一個可以努力的日子,都是一份厚禮。
分布式
新浪雲商店試用評測(附邀請碼鏈接)
2012 7月 15th
使用Amazon雲系統保障存儲一致性
2011 5月 20th
背景:Data Provenance
在CS學術領域有個術語叫做Data Provenance,有人翻譯為“數據世系”。實際上,就是一個文件的meta data,屬性信息。只不過這裡的屬性記錄得更加詳細,頗有些log的意味。簡單來說,就是“誰創建了它”、“誰對它做了什麼修改”、“數據流傳輸到了哪裡”等等一系列記錄。在我們的數據出現異常的時候,數據世系能幫助我們追溯根源,在程序debug、核實取證以及數據恢復上也都有着巨大用途。
例如,在電信網絡流量管理中,一些異常檢測工具能夠及時的發現網絡流量中的異常,但是這些工具並不能檢測出是什麼原因導致的異常,異常發生在哪裡?如果系統能夠追蹤流數據的世系,那麼用戶可以確定數據演化過程以及產生異常的原始流,定位並確定異常產生的原因。 更多 >
計算圓周率Approximating Pi – Map Reduce Program
2011 4月 11th
MapReduce主要應用於大規模數據處理,特別是在搜索引擎中各種鏈接的訪問統計,進而影響到頁面關鍵詞排名等等。今天這個例子卻是講的利用MapReduce來對圓周率Pi進行近似計算。考慮下面這張圖:
我們知道,正方形的面積 As = (2r)2 也就是 4r2. 內嵌圓形的面積 Ac = pi * r2. 於是 更多 >
大型網站的後端架構設計
2011 4月 7th
對於像我這樣的小博客網站來說,日訪問量僅百餘,找個普通的主機託管完全可以滿足需要,實在是不必過多考慮後端的問題。然而,騰訊網易這樣的門戶網站、淘寶這樣的購物交易網站、人人網新浪微博等主要流行的社交網絡應用,則不得不運用多種技術設計後端架構,才能支撐起百萬甚至上億級別的訪問。
這裡我在一個high level例舉我所了解到的提升服務性能的相關技術,其中的每一項都可以展開討論,有空我會專門詳細整理一下和大家探討。 更多 >
學習MapReduce分布式程序設計方法
2011 2月 9th
MapReduce是Google提出的一個編程框架,用於大規模海量數據處理,其主要思想就是分治(divide and conquer)。我們希望程序有並行處理能力,於是就可以使用多台機器同時處理加快速度。
然而,怎樣分派任務給不同的計算機?如果任務單元的數量大於可執行任務的計算機的數量怎麼辦?計算需要使用到一些中間結果怎樣處理?如果某些計算機在處理任務時中途死掉了呢?怎樣才能知道任務已經處理完畢?問題主要來自於任務處理節點的交流(比如狀態信息),以及對共享資源(數據)的訪問。要解決這些棘手的問題,我們需要有一套完整的同步機制:同步鎖信號量、條件變量(等待、通告、廣播)等等。
現有的一些編程模型有共享內存(pthread)、消息傳遞(MPI)等,架構的設計模式有主從式(Master-Slaves)、生產者消費者流式(Producer-consumer flows)等。Map Reduce結合了函數式編程語言的思想,使用key-value對作為輸入和輸出。開發者只需要實現map(key, value)和reduce(key, value)兩個功能。map()會產生中間結果作為輸出,而這正是reduce()的輸入。中間結果經過reduce()產生最終結果。類似以下模型:
map (in_key, in_value) ->
(out_key, intermediate_value) listreduce (out_key, intermediate_value list) ->
out_value list
具體的原理可以參看Google發表的關於MapReduce的論文。從應用開發的角度,本站的MapReduce分類下有一些python示例,可以作為初步入門學習。最簡單的方法就是利用管道來進行代碼測試,例如: 更多 >
反向索引Inverted Index – Map Reduce Program
2011 1月 4th
Inverted Index (反向索引)是搜索引擎需要做的一件經常性工作。在Google提出Map Reduce分布式編程框架中,這是一件很容易完成的事情。下面就是一個python寫的示例。 更多 >
單詞統計Word Count – Map Reduce Program
2011 1月 4th
在學習Map Reduce方法時,Word Count(單詞統計)程序是最基礎的入門訓練。不同的寫法會有不同的執行效率,下面是用python寫的一個示例。 更多 >