@
zhouquanbest 先说最简单的方法, 使用OpenResty lua 编写数据库落地接口
tornado 优化一个能够长连接的http client 或者直接使用自带的异步client 发送请求 如
req: /query?op=user.find_by_user&uid=1222
res : {"uid" : 1222, "name", ...... }
req /execute?op=user.save&data=<User.as_json>
req: 200 0k
这类架构 数据库使用openresty 作为dbproxy
上面的例子中使用的http协议,数据可是用json或者google protobuf(这个比较高效)
效率在 3k-4k req/s
### 使用长连接
如果绝对http协议不够高效,那么使用tcp自行封装一个简单长连接的协议。 不过这样dbproxy serverlength需要使用c++之类的做个异步server了。协议可以选高效的二进制协议 protobuf只是一个选择。
如
req: {"op": "user.find_by_uid", "data": {"uid": 12}}\r\n
使用这类行协议
回复如下:
7200 ok
23{"uid" : 1222, "name", ...... }
回复消息定义首4位标识消息状态长度 上面是状态200 msg为 ok 之间是空格分隔
然后紧接着32位标识数据长度,后面自定义解析的raw数据,觉得要省事可以使用protobuf。
这类优化后到 5-6k req/s问题不大。但这时,妈蛋去多关心你的数据库压力,然后去优化吧。