高性能网站架构方案(一) ——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 条评论
登录 后参与评论

相关文章

来自专栏文渊之博

数据库副本的自动种子设定(自增长)

背景 在 SQL Server 2012 和 2014 中,初始化 SQL Server Always On 可用性组中的次要副本的唯一方法是使用备份、复制和还...

26611
来自专栏IT大咖说

如何利用开源DevOps工具完成云上的自动运维

内容概况 云计算的特点是开箱即用,可以随时的扩缩容,不用考虑硬件的损坏问题,也有丰富的云服务和云平台供我们选择。在本次演讲中,黎山通过实际应用场景为我们讲述了基...

3707
来自专栏沃趣科技

semi-sync原主库加入集群阻塞问题分析

前段时间支持客户处理问题的时候,发现一个semi-sync复制主从切换原master加入集群时,复制同步阻塞,无法继续同步数据的问题,非常有参考意义,整理一下,...

35010
来自专栏杨建荣的学习笔记

MySQL备份恢复第二篇(r5笔记第6天)

MySQL中的数据恢复功能相比Oracle来说还是要单薄一些,而Oracle中的数据恢复相对来说自动化的程度要高一些。不过Mysql的二进制日志提供的信息很丰富...

3375
来自专栏北京马哥教育

MongoDB复制集及数据分片详解(二)

数据分片 分片缘由 分片(sharding)是MongoDB用来将大型集合分割到不同服务器(集群)上所采用的方法。当单台服务器CPU,Memory,IO等无法满...

3689
来自专栏数据和云

备份策略 - 单表备份的隐患与应对方案

作者介绍: 刘鹏松,任职云和恩墨北区交付部,负责山东部分客户业务交付。 在通过mysqldump进行MySQL数据库(InnoDB引擎)逻辑备份的时候经常使用的...

3437
来自专栏IT技术精选文摘

深入浅出MongoDB复制

个人介绍 赵景波,3年专职DBA经验,2017 DTCC 讲师,目前主要负责新浪NoSQL服务的运维及研发工作。热衷于开源DB内部原理探究。 综述 笔者最近在生...

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

如何在Ubuntu 16.04上的三节点集群上部署CockroachDB

CockroachDB是一个开源的分布式SQL数据库,提供一致性、可伸缩性和生存性。

812
来自专栏乐沙弥的世界

RMAN 备份详解

RMAN使用服务器会话来完成备份操作,从RMAN客户端连接到服务器将产生一个服务器会话

802
来自专栏Rgc

redis管道技术

由于redis通信是通过tcp协议基础,并且是堵塞的处理方式,在第一个请求没有执行并返回前,无法处理第二个请求。所以事件浪费在了网络传输和堵塞请求中。

913

扫码关注云+社区