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

相关文章

来自专栏静下来

Linux CentOS常用命令记录

我自己很少参与服务器管理,所以偶尔用下,老是忘记一些常用的命令。 人老了,啥事都记不住,各种密码也是,经常靠找回密码登录一些网站。 一:解压压缩 我比较常用ta...

3158
来自专栏文渊之博

xtrabackup部署以及使用

  备份mysql数据库一直是一个比较恶心的工作,主要就是备份的数据库比较大实在是慢。最近开始使用xtrabackup来备份数据库,速度上快了很多,尤其还原速度...

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

负载均衡、集群、高可用解决方案

9094
来自专栏Java技术交流群809340374

分布式锁的3种实现(数据库、缓存、Zookeeper)

目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。

1630
来自专栏Java技术交流群809340374

分布式锁的3种实现(数据库、缓存、Zookeeper)

目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。

2110
来自专栏决胜机器学习

《高性能MySQL》读书笔记(一) ——MySQL架构及重要属性概述

《高性能MySQL》读书笔记(一)——MySQL架构及重要属性概述 (原创内容,转载请注明来源,谢谢) 一、MySQL逻辑架构 1、三层架构 ...

4539
来自专栏GreenLeaves

Oracle 客户端管理软件安装

1、首先,先说明下为什么要安装Oracle客户端管理工具? 因为Oracle服务端过大,而且消耗的资源过多,大部分公司会把服务端装在公司的服务器上,而不会装在员...

2085
来自专栏小狼的世界

利用AWStat+JAWStat进行Apache访问日志分析

Apache的访问日志中会记录服务器所处理的所有请求,对apache的访问日志进行分析是一种比较传统的形式。虽然现在很多第三方的统计分析工具提供了嵌入到页面中的...

1322
来自专栏架构师之路

数据库中间件mysql-proxy细节【mysql官方的中间件】

一、mysql-proxy简介 mysql-proxy是mysql官方提供的mysql中间件服务,上游可接入若干个mysql-client,后端可连接若干个my...

6914
来自专栏Play & Scala 技术分享

Play 2.1 - Evolution插件使用指南

3878

扫码关注云+社区

领取腾讯云代金券