1. 程式人生 > >Twemproxy原始碼解讀分析

Twemproxy原始碼解讀分析

        Twemproxy原始碼淺析

Twemproxy(又稱為nutcracker)是一個支援RedisMemcached協議的快速輕量級的代理伺服器。它是由Twitter開源出來的快取伺服器叢集管理工具,主要用來彌補RedisMemcached對叢集管理的不足。

對於我這樣一個C語言的初學者來說, Twemproxy既沒有Nginx,linux核心等因為深入效能細節的晦澀編碼方式,但又具備了一個高效能的系統級應用專案的程式設計方式,從中可以學習良好C語言專案的程式設計風格、正規化,學習類Unix下的系統程式設計,還有對於一個常駐服務的健壯性考慮等等,是一個非常好的專案。接下來我將把自己這一段時間來對twemproxy的調研,學習,使用和測試和自己的一些思考和大家一起分享,交流。

程式碼分析,如下圖所示twemproxy可以劃分成如下模組:                                                                                                         

 

主函式流程(main):處理daemon, pidfile, args, config等;

系統相關模組(os utils:主要是conf,core, log, signal, stats等;

資料結構相關模組(ds utils:主要array,queue,string,rbtree等;

協議相關(proto):主要是redis和memcache協議的實現;

雜湊演算法(hash): 主要包含crc, fnv, ketama, Jenkins, murmur等多種hash演算法實現;

還有最核心的兩個模組:

Event機制和請求處理實現;

Twemproxy作為一個開源專案,不到2W行程式碼包含了一個健壯的伺服器端軟體的必需,架構非常清晰, 尤其讓我印象深刻的是它對日誌的合理佈局和多層次分級,以及詳細的錯誤處理,能夠讓使用者受益無窮。也可以看出大公司開源出來的程式碼,非常重視日誌和錯誤處理。


相關推薦

Twemproxy原始碼解讀分析

        Twemproxy原始碼淺析 Twemproxy(又稱為nutcracker)是一個支援Redis和Memcached協議的快速輕量級的代理伺服器。它是由Twitter開源出來的快取伺服器叢集管理工具,主要用來彌補Redis和Memcached對叢集管理的

RxJava 原始碼解讀分析 observeOn

Observable.observeOn()方法有點繞,我們一點一點看。 從上圖中,我們可以看出,observeOn主要作的工作是: 1,通過指定的scheduler來切換執行緒,用來emit資料,這個資料就是onNext(data)方法的引數。 2,emit出來的資料,

以太坊原始碼解讀(5)BlockChain類的解析及NewBlockChain()分析

一、blockchain的資料結構 type BlockChain struct { chainConfig *params.ChainConfig // 初始化配置 cacheConfig *CacheConfig // 快取配置 db ethdb.Databas

以太坊原始碼解讀(6)blockchain區塊插入和校驗分析

以太坊blockchain的管理事務: 1、blockchain模組初始化 2、blockchain模組插入校驗分析 3、blockchain模組區塊鏈分叉處理 4、blockchian模組規範鏈更新 上一節分析了blockchain的初始化,這一節來分析blockchain區塊的插入和校驗

twemproxy原始碼分析之四:處理流程

很讚的註釋: * nc_connection.[ch] * Connection (struct conn) * + + + * |

訊號在android原始碼/external/dnsmasq 原始碼專案中的應用解讀分析

直接上原始碼,這裡面的signal比較簡單,主要學會sigaction的用法 struct sigaction sigact;   sigact.sa_handler = sig_handler;   sigact.sa_flags = 0;   sigemptyset(

原始碼解讀】Handler訊息機制流程分析

之前看《藝術探索》大致瞭解了Android訊息機制的原理,也總結了筆記,但總感覺理解的不夠徹底,之後把原始碼和之前的筆記又看了一遍,算是基本通了,將基本邏輯記錄在此,重在分析流程,不分析具體細節原理。 這裡以主執行緒為例,Handler訊息機制的完整過程如下:

yolo v2 損失函式原始碼解讀

前提說明:     1, 關於 yolo 和 yolo v2 的詳細解釋請移步至如下兩個連結,或者直接看論文(我自己有想寫 yolo 的教程,但思前想後下面兩個連結中的文章質量實在是太好了_(:з」∠)_)         yo

【React原始碼解讀】- 元件的實現

前言 react使用也有一段時間了,大家對這個框架褒獎有加,但是它究竟好在哪裡呢? 讓我們結合它的原始碼,探究一二!(當前原始碼為react16,讀者要對react有一定的瞭解) 回到最初 根據react官網上的例子,快速構建react專案 npx create-react-app

【1】pytorch torchvision原始碼解讀之Alexnet

最近開始學習一個新的深度學習框架PyTorch。 框架中有一個非常重要且好用的包:torchvision,顧名思義這個包主要是關於計算機視覺cv的。這個包主要由3個子包組成,分別是:torchvision.datasets、torchvision.models、torchvision.trans

Set介面_HashSet常用方法_JDK原始碼解讀

Set 介面繼承自 Collection ,Set 沒有新增方法,方法和 Collection 保持一致, Set 容器的特點:無序,不可重複,無序指Set 中的元素沒有索引,我們只能遍歷查詢,不重複指不允許加入重複的元素,更確切的說,新元素如果和Set 中某個元素通過 equals() 方

vux之x-input使用以及原始碼解讀

前言 近期專案中使用的vux中的input,以及使用自定義校驗規則和動態匹配錯誤提示,有時間記錄下自己的使用經歷和原始碼分析。希望大家多多指正,留言區發表自己寶貴的建議。 詳解 列舉官方文件中常用的幾個屬性的使用方法,程式碼如下 <group ref="group">

react-redux connect原始碼解讀

今天看了下react-redux的原始碼,主要來看下connect的方法 首先找到connect的入口檔案。在src/index.js下找到。對應connect資料夾下的connect.js檔案。 大致說下原始碼connect流程 connect.js對外暴露是通過ex

共享個人整理的Python問題,有原始碼分析過程,解決方案,還有時間戳做間隔

  2018.10 #2018-10-23 15:48:47 October Tuesday the 43 week, the 296 day SZ 報錯 File "/Users/apple/Documents/ST/python/Python_test.py", li

java原始碼解讀之HashMap

1:首先下載openjdk(http://pan.baidu.com/s/1dFMZXg1),把原始碼匯入eclipse,以便看到jdk原始碼            Windows-Prefe

以太坊原始碼解讀(4)Block類及其儲存

一、Block類 type Block struct { /******header*******/ header *Header /******header*******/ /******body*********/ uncle

Hystrix之@EnableCircuitBreaker原始碼解讀

Hystrix是一個供分散式系統使用,提供延遲和容錯功能,保證複雜的分佈系統在面臨不可避免的失敗時,仍能有其彈性。 比如系統中有很多服務,當某些服務不穩定的時候,使用這些服務的使用者執行緒將會阻塞,如果沒有隔離機制,系統隨時就有可能會掛掉,從而帶來很大的風險。 SpringCloud使用Hy

String的valueOf方法原始碼解讀

valueOf 中的祕密 String中的valueOf方法大致可以分為三種: String.valueOf(Object)、String.valueOf(char[])、String.valueOf(基本資料型別) 案例: Integer arg = null; St

動態代理:如何深入理解和分析,不如手寫一個(原始碼分析、樓主親測)

如何分類Java語言? Java是靜態的強型別語言,但是因為提供了類似反射等機制,也具備了部分動態語言的能力。 一、動態代理的簡單描述 動態代理是一種方便執行時動態構建代理、動態處理代理方法呼叫的機制,很多場景都是利用類似的機制做到的,比如用來包裝RPC呼叫、面向切面的程式設

nodejs---require() 原始碼解讀

2009年,Node.js 專案誕生,所有模組一律為 CommonJS 格式。 時至今日,Node.js 的模組倉庫 npmjs.com ,已經存放了15萬個模組,其中絕大部分都是 CommonJS 格式。 這種格式的核心就是 require