向日葵技术总监:国内首例谈MySQL InnoDB memcached plugin实践
在mysql的配置文件my.cnf中通常需要设置以下参数(注意在启动插件后配置,否则mysqld启动报错),主要是配置分配给memcached 的内存大小以及开启写binlog,如果需要指定其他端口,如11212 在loose-daemon_memcached_option参数添加 ' -p11212' 而daemon_memcached_r_batch_size、daemon_memcached_w_batch_size 默认为1,这里也建议设置为1: [mysqld] loose-daemon_memcached_option='-m 15360' daemon_memcached_enable_binlog= 1 innodb_api_enable_binlog=1 daemon_memcached_r_batch_size = 1 daemon_memcached_w_batch_size = 1 MySQL memcached plugin 特点: 1.数据直接读写请求innodb存储引擎,不需要经过SQL层,不需要进行解析编译。 2.由MySQL buffer pool 管理内存缓存数据。 3.可以把数据存入多个表,可进行多列数据合并为一个value。 4.可以通过SQL对数据进行查询、分析、维护。(在过期时间字段添加索引,通过mysql job进行过期数据删除) 5.可以利用MySQL灵活的主从架构。 性能测试对比: 我们采用4核进行测试对比,MySQL memcached plugin 与 ttserver (hash模式)性能相当,QPS可以达到7万/秒。比 ttserver (btree模式)高出3倍以上。 memaslap的测试存在一些缺陷,这里仅供大致参考:[1] 实际上,在网络延迟上,QPS性能将大打折扣,所以要将应用部署在同个内网以降低网络延迟瓶颈,轻松应对每天上亿次的QPS请求,在接近1万/s的QPS并发访问下依旧表现稳定。 以下是其中一个MySQL Memcahced 运行情况: 在我们一个很NB的DBA的设计和操控下,新架构上线还是比较顺利的: 图中的magent: 在这次架构优化中,我们在应用和MySQL memcached中间加了一层magent,这东西大家百度下到处都有介绍,但原版其实是有不少bug的,比如buffer大小问题;加上这东西的好处: 1、通过对magent的改造,实现HA,当ma后端cache某一台down掉后ma可以自动切换;系统管理员晚上终于可以安心的睡觉了。 2、MySQL memcached plugin 不支持multi get/set (在未来的版本中会支持)。通过magent解决。 3、由于mysql memcached plugin 存在一些bug,5.7.18做了一些修复,但不够完善。借助magent便于控制和维护。 此架构优势: 扩展性强。逐步提升应对高并发,采取多主架构,配合magent实现高可用。 我们做的优化: (编辑:萍乡站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |