程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 跨平台輕量級redis、ssdb代理服務器(C++ 11編寫),

跨平台輕量級redis、ssdb代理服務器(C++ 11編寫),

編輯:C++入門知識

跨平台輕量級redis、ssdb代理服務器(C++ 11編寫),


dbproxy 是我業余采用C++11編寫的跨平台代理服務器(並使用lua和自己的網絡庫),以擴展系統負載,同時使用多個後端數據庫,後端數據庫支持redis和ssdb。

需要由用戶自己編寫lua腳本控制sharding。測試效率比codis略高,且占用更少的CPU和內存。

 

下面是github上的readme,我直接拷貝下來:

介紹

dbproxy是一個采用C++11編寫的代理服務器,支持redis和 ssdb數據庫。 其主要用於擴容和提高系統負載。使用lua控制sharding,把不同的key-value映射到不同的後端redis或ssdb服務器。

構建

dbproxy支持windwos和linux。

  • windows:打開根目錄的DBProxy.sln編譯即可。
  • linux:
    • 1 : 在項目根目錄執行 cd 3rdparty/luasrc/src/ 命令進入lua src目錄,然後執行 make generic 構建liblua.so
    • 2 : 回到項目根目錄執行 cp 3rdparty/luasrc/src/liblua.so . 將liblua.so拷貝到當前目錄。
    • 3 : 繼續在根目錄下執行 make server 構建 dbserver 即可。
    • 4 :直接運行 ./dbserver 即啟動代理服務器。

配置文件

dbproxy的配置文件是Config.lua 其ProxyConfigbackendskey配置後端服務器列表,其中的sharding_function指示sharding函數。 作為示例,test_sharding就是被指定的sharding函數,其根據key參數,返回對應的服務器號,這裡返回0,意思是將key映射到127.0.0.1 : 6379這個服務器。

 

redis或ssdb使用代理服務器跟使用redis 或ssdb幾乎沒有區別,使用任意的redis或ssdb客戶端均可,代碼不必做調整,只需要把ip和port指向代理服務器的地址即可。

補充

目前dbproxy只作為代理映射,不包含讀寫分離以及額外緩存,也不解決分布式等問題。 當然其服務器C++代碼主體並不涉及任何sharding方案,必須由用戶自己在Config.lua裡自己實現sharding函數 (當然,也可以從網上找現成的,譬如lua版的一致性hash lua-consistent-hash)

感謝

一定程度上借鑒了redis-shatter和codis。

 

後續:

效率上還能進一步提升和優化,感謝大家嘗試,提出意見。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved