原创 淘寶分佈式配置管理服務Diamond

在一個分佈式環境中,同類型的服務往往會部署很多實例。這些實例使用了一些配置,爲了更好地維護這些配置就產生了配置管理服務。通過這個服務可以輕鬆地管理這些應用服務的配置問題。應用場景可概括爲: zookeeper的一種應用就是分佈式配置管

原创 基於protobuf的RPC實現

可以對照使用google protobuf RPC實現echo service一文看,細節本文不再描述。 google protobuf只負責消息的打包和解包,並不包含RPC的實現,但其包含了RPC的定義。假設有下面的RPC定義: se

原创 淺析glibc中thread tls的一處bug

最早的時候是在程序初始化過程中開啓了一個timer(timer_create),這個timer第一次觸發的時間較短時就會引起程序core掉,core的位置也是不定的。使用valgrind可以發現有錯誤的內存寫入: ==31676== I

原创 zookeeper節點數與watch的性能測試

zookeeper中節點數量理論上僅受限於內存,但一個節點下的子節點數量受限於request/response 1M數據 (size of data / number of znodes) zookeeper的watch機制用於數據變

原创 基於servlet實現一個web框架

servlet作爲一個web規範,其本身就算做一個web開發框架,但是其web action (響應某個URI的實現)的實現都是基於類的,不是很方便,並且3.0之前的版本還必須通過web.xml配置來增加新的action。servlet

原创 淺析靜態庫鏈接原理

靜態庫的鏈接基本上同鏈接目標文件.obj/.o相同,但也有些不同的地方。本文簡要描述linux下靜態庫在鏈接過程中的一些細節。 靜態庫文件格式 靜態庫遠遠不同於動態庫,不涉及到符號重定位之類的問題。靜態庫本質上只是將一堆目標文件進行打包

原创 使用RCU技術實現讀寫線程無鎖

在一個系統中有一個寫線程和若干個讀線程,讀寫線程通過一個指針共用了一個數據結構,寫線程改寫這個結構,讀線程讀取該結構。在寫線程改寫這個數據結構的過程中,加鎖情況下讀線程由於等待鎖耗時會增加。 可以利用RCU (Read Copy Upd

原创 無鎖有序鏈表的實現

無鎖有序鏈表可以保證元素的唯一性,使其可用於哈希表的桶,甚至直接作爲一個效率不那麼高的map。普通鏈表的無鎖實現相對簡單點,因爲插入元素可以在表頭插,而有序鏈表的插入則是任意位置。 本文主要基於論文High Performance Dy

原创 寫了一個分佈式名字服務JCM

之前在公司裏維護了一個名字服務,這個名字服務日常管理了近4000臺機器,有4000個左右的客戶端連接上來獲取機器信息,由於其基本是一個單點服務,所以某些模塊接近瓶頸。後來倒是有重構計劃,詳細設計做了,代碼都寫了一部分,結果由於某些原因重構

原创 並行編程中的內存回收Hazard Pointer

接上篇使用RCU技術實現讀寫線程無鎖,在沒有GC機制的語言中,要實現Lock free的算法,就免不了要自己處理內存回收的問題。 Hazard Pointer是另一種處理這個問題的算法,而且相比起來不但簡單,功能也很強大。鎖無關的數據結