QConf保证数据的正确性新方法 - Qihoo360/QConf GitHub Wiki
新value验证方法
因为QConf读写共享内存时不对内存加锁,所以要采用数值验证方法来保证数据正确性,旧版采用md5保证数据正确性。由于计算md5开销比较大,所以最新实现方法对于将要放入共享内存的数据,如果小于某一值(当前设置为1500)就将数据本身复制一份作为验证码,如果大于设定值还是采用md5。
- 存入共享内存的数据格式
-----------------------------------------
| value len | value | verification code |
-----------------------------------------
- value len:value的长度(uint16_t)
- verification code:
- value的MD5
- 原value值
性能测试
测试策略
- 测试次数 : 循环取2000000次key值。
- 测试数据 : 存在1000个不同key对应的值,80%的key对应的value的大小是10
100B,15%为1001KB,剩下的为1600~1700B。 - 测试方式 : 多进程测试,多个进程同时循环取1000个key,然后取所有进程结果平均值。
- 测试机器 : Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz, 24核;157G memory
- 测试语言 : c++
测试结果
使用新value验证方法的版本比使用md5验证的版本性能提升了约1.34倍。
测试数据
注意事项
master分支最新提交即为新版实现,默认没有将新的value验证方法功能开启。如需开启,将base/qconf_shm.cc:24行的// #define USE_MIXED_VERIFY注释去掉,重新编译,同时必须删除之前QConf的共享内存。