高性能网站架构方案(一) ——MySQL提升

高性能网站架构方案(一)——MySQL提升

原创内容,转载请注明来源,谢谢)

一、Mysql响应速度提升——HandlerSocket

1、概述

HandlerSocket作为Mysql的插件运行,在Mysql体系架构中绕开了SQL解析,让程序直接和InnoDB引擎进行交互。并且其可以通过合并写入、简单协议等手段,提高数据访问性能,在CPU密集型应用中优势明显。

HandlerSocket可以理解为MySql的NoSql插件,其所谓的CPU密集型优势指的是,对于处理复杂sql语句具有优势。

2、工作原理图

1)HandlerSocket

从上图可以看出,HandlerSocket作为mysql客户端和mysql的中间层,取代mysql原生的部分数据、表格处理工作,采用多线程的方式,区分DDL和DML进行操作。这样的目的是保证在复杂处理的情况下,能够高效的进行处理。

2)Memcache

与HandlerSocket相比,Nosql+Mysql的方式,则是将高并发、大量I/O的操作放到memcache或redis等nosql中进行处理,并通过定时任务等方式再将结果转移到mysql中。

3、使用

1)要使用HandlerSocket,则必须先在服务端下载HandlerSocket源码,并进行解压安装。

2)修改mysql的配置,HandlerSocket对数据库的读写分为两个端口,9998是读,9999是写,分别分配16个线程进行处理。

3)修改完配置后,需要在mysql命令行中执行安装。

4)下载PHP-HandlerSocket,并进行安装,接着修改php.ini增加一行扩展此功能。

4、优势

1)HandlerSocket的性能是SQL的四倍左右,而功能上和SQL相差无几,对于绝大部分的SQL语句都可以用此执行,其对处理复杂sql具有巨大优势。

2)可以处理高并发连接,因为其采用epoll() 和worker-thread/thread-pooling架构。

3)数据包比sql小,因而流量使用较少。

4)避免了nosql可能出现的重复缓存现象(nosql和innodb同时缓存了数据)。

5)避免了nosql可能出现的数据不一致问题,省去nosql和mysql数据同步的麻烦。

6)不需要修改mysql,作为插件即插即用。

5、缺点

HandlerSocket最主要的缺点在于I/O性能,其并没有改善mysql的I/O。相比于nosql的内存操作,HandlerSocket的速度则慢了许多。

6、HandlerSocket和NoSQL

通过上述分析,这两者主要的使用场景不同。HandlerSocket主要是用于改善MySQL,优化表格的增删改查以及表格的结构修改等操作,支持密集型CPU操作;而NoSQL作为缓存的功能,支持密集型I/O的操作。

因此,当有需要的时候,可以结合这两者共同工作。

二、MySQL稳定性提升——主从复制

1、概述

主从复制用于切分查询的负荷,通常一主多从,主数据库用于处理增删改的操作,并负责将数据同步给从库;从数据库负责处理读的操作,并且制定一定的分配规则,保证每次读操作均衡分配给不同的从库。

2、原理

主从复制通过3个过程实现:

1)主服务器将用户对数据库的更新(增删改)以二进制格式保存到Binary Log日志文件,再由Binlog Dump线程将Binary Log日志文件传输给从服务器。

2)从服务器通过一个I/O线程将主服务器的BinaryLog日志文件中的更新操作复制到从服务器中的Relay Log中。

3)从服务器通过另一个SQL线程将Relay Log中继日志文件的操作依次在本地执行,从而实现主从同步。

如下图所示:

对于上述涉及到的三个线程如下所示:

1)BinLog Dump线程

该线程运行在主服务器上,负责把Binary Log二进制日志文件数据发送给从服务器。

可以通过SHOW PROCESSLIST语句查看线程是否在执行。

2)I/O线程

从服务器执行STARTSLAVE语句后,创建一个I/O线程。该线程运行在从服务器,与主服务器建立连接,向主服务器发送更新请求,并将主服务器发送的更新操作复制到从服务器本地的Relay Log中。

可以通过SHOWSLAVE STATUS查看I/O线程状态。

3)SQL线程

该线程运行在从服务器,主要是读取Relay Log日志文件中的更新操作,并将这些操作依次执行,从而实现主从同步。

3、主从配置要点

1)每个服务器,无论主从,都要配置一个server-id,且每个服务器的id必须不一样。

2)主从服务器的mysql版本最好一致,因为不一致的版本可能BinLog不一致。最低限度的要求是主服务器mysql版本不高于从服务器。

3)主服务器上要为从服务器设置连接账户,授予REPLICATION SLAVE权限。

4)配置完毕后,从服务器输入命令START SLAVE即可以开启。

5)从服务器通过命令SHOWSLAVE STATUS可以查看从服务器的状态,包括上述的I/O线程、SQL线程等运行状态;主从服务器都可以通过命令SHOW PROCESSLIST查看I/O线程连接情况。

——written by linhxx 2017.08.16

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2017-08-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ImportSource

教你看懂redis配置系列

摘要:最近工作中需要开发redis的一个云管理平台。所以要求要对这些参数了如指掌,特结合网络资料和自己翻译小撸此文。感谢junjie 【 简介】 我们可以在启动...

4329
来自专栏云计算教程系列

快来测一测你的网速吧!

本教程指导如何使用iPerf进行网络吞吐量测试,iPerf是一种命令行工具,通过测量服务器可以处理的最大网络吞吐量来诊断网络速度问题。它在遇到网络速度问题时特别...

1183
来自专栏Laoqi's Linux运维专列

kibana日志管理与配置

1752
来自专栏Android机动车

Android Studio 打包时 Signature Version V1 V2

最近在提交测试的时候,用Android Studio给测试打了个包,如下图,我打包时,没注意选择Signature Versions,结果测试就找来了,说给他的...

732
来自专栏JavaQ

深入Spring Boot (十二):集成JSP

话不多说,直接上代码。依赖管理pom.xml,需要添加servlet和嵌入式tomcat运行jsp需要的jar,详细依赖配置如下:

682
来自专栏云计算教程系列

如何在Ubuntu 14.04上将gzip模块添加到Nginx

网站加载的速度取决于浏览器下载的所有文件的大小。减少要传输的文件的大小不仅可以使网站加载速度更快,而且对那些必须为带宽使用付费的人来说更便宜。

210
来自专栏云计算教程系列

如何在CentOS 7上将gzip模块添加到Nginx

网站加载的速度取决于浏览器必须下载的所有文件的大小。减少要传输的文件的大小可以使网站不仅加载更快,而且带宽费用也更便宜。

561
来自专栏我是攻城师

Logstash与Kafka集成

3485
来自专栏技巅

Glusterfs之nfs模块源码分析(上)之nfs原理和协议

1876
来自专栏芋道源码1024

MongoDB 4.0 正式发布,支持多文档事务

MongoDB 4.0 已正式发布,MongoDB 是一个开源文档数据库,提供高性能、高可用性和自动扩展。

690

扫描关注云+社区