zoukankan      html  css  js  c++  java
  • 跨平台轻量级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-shattercodis

    后续:

    效率上还能进一步提升和优化,感谢大家尝试,提出意见。

  • 相关阅读:
    Django的路由寻址
    Guava Cache 原理分析与最佳实践
    「必知必会」最细致的 ArrayList 原理分析
    「必知必会」最细致的 LinkedList 原理分析
    oracle listagg() 函数
    .net HttpClient 向 WebApi Post 的方法
    MySql 如何让表名支持大小写
    Java的基本数据类型
    CF666E
    spring使用mybatis执行SQL脚本,创建和初始化数据库
  • 原文地址:https://www.cnblogs.com/irons/p/4979812.html
Copyright © 2011-2022 走看看