文章首先分析了MySQL查询时的瓶颈(SQL分析、数据表的打开关闭等),然后介绍了HandlerSocket插件。HandlerSocket插件让MySQL达到了近两倍于memcached的查询性能,灰常的niubi!
approx qps server CPU util MySQL via SQL 105,000 %us 60% %sy 28% memcached 420,000 %us 8% %sy 88% MySQL via HandlerSocket 750,000 %us 45% %sy 53%
MySQL+HandlerSocket的架构如下图(来自原文):
从图中可以看到,HandlerSocket开了9998和9999端口,分别用于读写操作。对于基于主键的CRUD操作,客户端通过HandlerSocket进行,省略了SQL分析、数据表的打开关闭等操作。而其他查询仍然通过MySQL的3306端口进行。
相比常见的memcached+MySQL的架构,MySQL+HandlerSocket架构有两个最明显的优势:
相对于其他NoSQL解决方案,MySQL+HandlerSocket也有优势:
不过,HandlerSocket虽然省掉了一些步骤,但要是内存不足以缓存大部分常用数据。那么HandlerSocket带来的优势就荡然无存了。因此在使用HandlerSocket时,服务器一定要具备足够的内存空间用于InnoDB的Buffer Pool。此外对PHP开发者来说,HandlerSocket目前还没有可用的PHP扩展。
作者说他们已经将HandlerSocket用于了生产环境,取得了很好的效果。作者目前就职于日本最大的社会化游戏平台提供商DeNA。
最后,附上HandelrSocket的仓库地址,这是一个开源项目:http://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL。