dbproxy 是我業餘採用C++11編寫的跨平臺代理服務器(並使用lua和本身的網絡庫),以擴展系統負載,同時使用多個後端數據庫,後端數據庫支持redis和ssdb。linux
須要由用戶本身編寫lua腳本控制sharding。測試效率比codis略高,且佔用更少的CPU和內存。git
下面是github上的readme,我直接拷貝下來:github
dbproxy是一個採用C++11編寫的代理服務器,支持redis和 ssdb數據庫。 其主要用於擴容和提升系統負載。使用lua控制sharding,把不一樣的key-value映射到不一樣的後端redis或ssdb服務器。redis
dbproxy支持windwos和linux。數據庫
cd 3rdparty/luasrc/src/
命令進入lua src目錄,而後執行 make generic
構建liblua.so
cp 3rdparty/luasrc/src/liblua.so .
將liblua.so
拷貝到當前目錄。make server
構建 dbserver
便可。dbproxy的配置文件是Config.lua 其ProxyConfig
的backends
key配置後端服務器列表,其中的sharding_function
指示sharding函數。 做爲示例,test_sharding
就是被指定的sharding函數,其根據key參數,返回對應的服務器號,這裏返回0,意思是將key映射到127.0.0.1
: 6379
這個服務器。windows
redis或ssdb使用代理服務器跟使用redis 或ssdb幾乎沒有區別,使用任意的redis或ssdb客戶端都可,代碼沒必要作調整,只須要把ip和port指向代理服務器的地址便可。後端
目前dbproxy只做爲代理映射,不包含讀寫分離以及額外緩存,也不解決分佈式等問題。 固然其服務器C++代碼主體並不涉及任何sharding方案,必須由用戶本身在Config.lua裏本身實現sharding函數 (固然,也能夠從網上找現成的,譬如lua版的一致性hash lua-consistent-hash)緩存
必定程度上借鑑了redis-shatter和codis。服務器
後續:網絡
效率上還能進一步提高和優化,感謝你們嘗試,提出意見。