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

相关文章

来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2190
来自专栏Golang语言社区

【Golang语言社区】GO1.9 map并发安全测试

var m sync.Map //全局 func maintest() { // 第一个 YongHuomap := make(map[st...

4858
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2232
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

3038
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

32710
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2737
来自专栏C#

DotNet加密方式解析--非对称加密

    新年新气象,也希望新年可以挣大钱。不管今年年底会不会跟去年一样,满怀抱负却又壮志未酬。(不过没事,我已为各位卜上一卦,卦象显示各位都能挣钱...)...

4988
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

4827
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2675

扫码关注云+社区