xhprof的实现探讨

最近感兴趣看了下xhprof的内部实现,本文将针对xhprof的各个功能点进行分析。

关键数据结构


xhprof主要只使用了如下两个数据结构:


Read more...

2016-05-02 性能分析

MySQL MHA主库高可用方案学习

环境


  • VMWare 3台虚拟机,CentOS 7
  • MySQL 5.7.12
  • MHA 0.56

安装


MySQL采用RPM包直接装,初始密码为grep 'temporary password' /var/log/mysqld.log。如果需要的话,可以清空/var/lib/mysql目录,然后执行mysqld --initialize重新初始化数据库目录。

MHA源码安装,RPM安装会出问题:Can't locate MHA/NodeConst.pm in @INC。另外需要安装一些perl的依赖:yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager cpan


Read more...

2016-05-02 高可用

ELK入门实践

ELK主要由Elasticsearch、Logstash、Kibana三个软件组成,用于日志的快速搜索和分析。官网地址:elastic

  • Logstash: 将log进行处理后存入Elasticsearch中
  • Elasticsearch: 存储log,建立索引,提供搜素(过滤、聚合),支持横向扩展、高可用
  • Kibana: 将Elasticsearch中存储的log以图表的方式展示出来

由于Kibana现在还没有联合查询的功能,所以本文采用Kibi(Kibana的一个fork增强版本)。

对于ELK的快速入门书籍可查看:ELKstack 中文指南,详细了解的话请参考官方文档。

本文主要讲述了使用ELK进行日志分析的实践,以分析我们开发组开发环境的nginx access log为例子。


Read more...

2016-04-18

swoole_server SWOOLE_PROCESS模式执行探讨

swoole_server的SWOOLE_PROCESS模式是一个比较复杂的运行模式,因为存在了大量的进程间通信,复杂的连接管理等。

其工作模式大致如下图,这里省略掉Manager、Task进程:


Read more...

2016-04-16 swoole

swoole框架中swoole_client的实现

swoole_client的实现源码主要在swoole-src/swoole_client.c中。

swoole_client有同步和异步两种使用方式,如下:

同步方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$client = new swoole_client(SWOOLE_SOCK_TCP);
if (!$client->connect('127.0.0.1', 9501, 0.5))
{
    die("connect failed.");
}

if (!$client->send("hello world"))
{
    die("send failed.");
}

$data = $client->recv();
if (!$data)
{
    die("recv failed.");
}

$client->close();

Read more...

2016-04-13 swoole

PHP Generator的实现

对于Generator的实现,关键的数据结构是_zend_execute_data,已在这篇文章:PHP内核的一点探索——execute_data 介绍了。本文只是粗略的说明了Generator的实现~

Generator的创建


Generator的实现代码在Zend/zend_generators.c中,我们无法直接new一个Generator对象,如果直接new的话会报如下错误:

PHP Catchable fatal error: The "Generator" class is reserved for internal use and cannot be manually instantiated

在源码中可看到原因:

1
2
3
4
5
6
7
static zend_function *zend_generator_get_constructor(zval *object TSRMLS_DC) /* {{{ */
{
    zend_error(E_RECOVERABLE_ERROR, "The \"Generator\" class is reserved for internal use and cannot be manually instantiated");
    
    return NULL;
}
/* }}} */

Read more...

2016-04-12

PHP execute_data

这阵子想研究下PHP Generator的实现,发现对于Generator很重要的一个数据结构为_zend_execute_data,在PHP源码中通常是一个execute_data变量,与该变量相关的宏是#define EX(element) execute_data.element

查看了下opcode的执行,发现_zend_execute_data对于PHP代码的执行也是关键的数据结构。所以本文主要围绕该数据结构展开来讲~


Read more...

2016-03-24