前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >高性能网站架构方案(一) ——MySQL提升

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

作者头像
用户1327360
发布2018-03-07 15:37:38
1.1K0
发布2018-03-07 15:37:38
举报
文章被收录于专栏:决胜机器学习决胜机器学习

高性能网站架构方案(一)——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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 决胜机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档