12 2012 档案
摘要:使用RabbitMQ半年有余,每天跑的数据量数亿这个量级吧,期间做了些工作,也处理了些问题,稍加总结。我们使用的场景主要是用于模块件的数据中转和分发,客户端以C++为主,php和python为辅。工作:基于rabbitmq-c开发了c/c++客户端,主要实现了连接管理、统一配置管理、负载均衡、QPS限制等功能,同时为支持队列迁移,提供了消息本地缓存功能,通过信号开关;为解决特定场景下内存暴涨的问题,额外提供了thrift形式的访问接口,在thrift层增加了统计、配额管理等功能,同时提供队列抽象层及多队列机制,支持后续不中断服务的扩容;开发了配套的工具脚本,一键创建vhost\exchange
阅读全文
摘要:LevelDB的Put操作,是一个顺序写log,然后插入memtable(数据结构是skiplist)的过程,调用关系如下图所示:LevelDB的Get操作,会优先查找memtable,如果memtable查找不到,逐层在sstable中查找。下图是在memtable不存在,但在sstable中可以找到key的调用关系图:程序代码如下: 1 #include "third_party/leveldb/db.h" 2 3 int main(void) { 4 leveldb::DB* db; 5 leveldb::Options options; 6 7 optio...
阅读全文