向facebook学习,通过协程实现mysql查询的异步化
前言 最近学习了赵海平的演讲,了解到facebook的mysql查询可以进行异步化,从而提高性能。由于facebook实现的比较早,他们不得不对php进行hack才得以实现。现在的php5.5,已经无需hack就可以实现了。 对于一个web网站的性能来说,瓶颈多半是来自于数据库。一般数据库查询会在某个请求的整体耗时中占很大比例。如果能提 ...
前言 最近学习了赵海平的演讲,了解到facebook的mysql查询可以进行异步化,从而提高性能。由于facebook实现的比较早,他们不得不对php进行hack才得以实现。现在的php5.5,已经无需hack就可以实现了。 对于一个web网站的性能来说,瓶颈多半是来自于数据库。一般数据库查询会在某个请求的整体耗时中占很大比例。如果能提 ...
问题 通常一个web应用的性能瓶颈在数据库。因为,通常情况下php中mysql查询是串行的。也就是说,如果指定两条sql语句时,第二条sql语句会等到第一条sql语句执行完毕再去执行。这个时候,如果执行2条sql语句,每条执行时间为50ms,全部执行完毕可能需要100ms。既然,主要原因是sql的串行执行导致。那我们是不是可以改变 ...
简介 kvproxy中集群分为三种。默认集群,读集群和备份集群。读集群和备份集群都是可选项。如果没有设置读集群,将会从默认集群读取数据。如果没有设置备份集群,将不会做数据同步操作。更多kvproxy的信息请查看 集群设置 以下是集群设置中需要注意的几个因素。 1、集群名可以自己制定 2、每个集群中的数字id不能重复。 ...
简介 kvproxy的一个很重要的特性是能实现主从集群间的数据同步。有点类似于mysql和redis的主从数据同步。之所以实现这个功能,是因为在使用memcached的时候,有些时候需要两个集群间保持数据一致。而memcached又没有提供类似的功能。如果想了解更多的kvproxy的一些特性,请查看博文。 应用场景 一般需要搭建主从两个数 ...
location表达式类型 ~ 表示执行一个正则匹配,区分大小写 ~* 表示执行一个正则匹配,不区分大小写 ^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location。 = 进行普通字符精确匹配。也就是完全匹配。 @ "@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_f ...
现象 mysqlnd的超时时间设置为2s后,出现了一个诡异的现象。在php的error log中出现了一些错误信息。如下: [20-Dec-2014 21:20:17] WARNING: [pool www] child 31401 said into stderr: "NOTICE: PHP message: PHP Warning: PDO::__construct(): MySQL server has gone away in ./abstract.class.php on line 26" 第 ...
现象 上线后习惯性的观察数据库的变化。发现数据库的tps有很大的飙升。不过幸好在双十一的时候在数据库方面做了一些完善,虽然主库的tps有飙升,但是总体load还不是很高。但是问题既然出现了,还是要解决的。 排查过程 确定是insert update 还是 delete操作导致tps高? 既然是tps高,那就说明数据库修改的操作多了。到 ...
前言 wireshark是一个网络数据包捕捉和分析工具。本篇文章只介绍过滤器的一些应用实例。关于wireshark的介绍和常见使用方法可以查看博文,《调试利器之wireshark》 wireshark是一个网络数据包捕捉和分析工具。本篇文章只介绍过滤器的一些应用实例。关于wireshark的介绍和常见使用方法可以查看博文,《调试利器之wiresha ...
简介 PHPDBG是一个PHP的SAPI模块,可以在不用修改代码和不影响性能的情况下控制PHP的运行环境。 PHPDBG的目标是成为一个轻量级、强大、易用的PHP调试平台。可以在PHP5.4和之上版本中使用。在php5.6和之上版本将内部集成。 主要功能: - 单步调试 - 灵活的下断点方式(类方法、函数、文件:行、内存地址、opcode) - 可直 ...
简介 valgrind是开源的性能分析利器。 根据它的文档,可以用它来检查内存泄漏等问题,还可以用来生成函数的调用图,就这两个功能就足够有吸引力了。 本文主要是介绍如何使用valgrind的callgrind工具进行性能分析。 分析过程 使用callgrind工具生成性能分析数据 命令格式如下: valgrind --tool=callgrind ./exproxy ...
简介 GDB(GNU debugger)是GNU开源组织发布的一个强大的UNIX下的程序调试工具。可以使用它通过命令行的方式调试程序。它使你能在程序运行时观察程序的内部结构和内存的使用情况。你也可以使用它分析程序崩溃前的发生了什么,从而找出程序崩溃的原因。相对于windows下的图形界面的VC等调试工具,它提供了更强大的功能。 ...
简介 Wireshark(前称Ethereal)是一个网络数据包分析软件。网络数据包分析软件的功能是截取网络数据包,并尽可能显示出最为详细的网络数据包数据。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。 网络管理员使用Wireshark来检测网络问题,网络安全工程师使用Wireshark来检查资讯安全相关问题,开发者使 ...