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。服务器
后续:网络
效率上还能进一步提高和优化,感谢你们尝试,提出意见。