加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

向日葵技术总监:国内首例谈MySQL InnoDB memcached plugin实践

发布时间:2017-09-05 23:09:40 所属栏目:传媒 来源:互联网
导读:张小峰 Oray技术总监 简介 张小峰专注于高性能网络服务架构,15年C++网络应用开发和团队管理经验;在DNS架构、C++网络通信技术、各操作系统API交互、图像处理、加密算法等领域都有着深入的研究;在Oray技术团队中负责所有产品的网络服务及图像底层架构设计

在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]

向日葵技术总监:国内首例谈MySQL InnoDB memcached plugin实践

实际上,在网络延迟上,QPS性能将大打折扣,所以要将应用部署在同个内网以降低网络延迟瓶颈,轻松应对每天上亿次的QPS请求,在接近1万/s的QPS并发访问下依旧表现稳定。

以下是其中一个MySQL Memcahced 运行情况:

向日葵技术总监:国内首例谈MySQL InnoDB memcached plugin实践

在我们一个很NB的DBA的设计和操控下,新架构上线还是比较顺利的:

向日葵技术总监:国内首例谈MySQL InnoDB memcached plugin实践

图中的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实现高可用。

我们做的优化:

MySQL 5.7.17 前的版本,不建议设置 daemon_memcached_r_batch_size 大于1,容易遭遇 bug 导致 MySQL Crashed。同时建议innodb_api_bk_commit_interval设置为稍大一点的值。默认为5。存在get会话的情况下,对 daemon_memcached 插件进行重启,也会导致MySQL Crashed,重启插件时要确保没有其他会话。

禁止flush_all权限操作:

 update cache_policies set flush_policy='disabled';

尾声

其实上面说了那么多细节抑或还不够细节的东西,都是围绕着缓存架构的优化。在这么多年从事软硬开发与架构设计的实际工作中,我深刻的体会到架构的重要性,不管多NB的代码和算法,多NB的硬件,系统架构不好的话你的运行结果一样糟糕。这里的架构不仅仅包含服务器层面以及系统运维上的,架构无处不在,从软件架构到硬件架构,从网站架构到数据库架构,从通信架构到服务整体架构,包括本文提到的缓存架构,甚至细化到C++开发层的class封装与相互调用,都有着架构及其优化的存在。做任何一件部署与实际的开发前,我们都要有做好架构这个潜在意识,去考虑一个好的架构再动手构建,当然我们都不可避免的会踩到坑,不要害怕,持续改进就好。

正是这样的态度下,我们又相继推出无网远控的硬件“向日葵控控”这样创新性的产品。有了这一路走来的经验,不管产品从软件延伸硬件,我们也有自己的一套优化方案,有机会我们继续分享。

向日葵技术总监:国内首例谈MySQL InnoDB memcached plugin实践

[1]添加

如果想了解主播的最新直播动态,还等什么,赶紧扫描下面的二维码、或者点击下载链接安装神兽直播,一键关注全网主播!

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读