pinpoint-php-aop 介绍

为啥写这篇文章?

有人反映资料太少,学习成本太高。 GitHub 地址:https://github.com/pinpoint-apm/pinpoint-php-aop

什么是 Aspect Oriented Programming (AOP)

wikipedia 详细介绍

每个人看待这个世界的角度不一样,如果我们站在某个人的角度看这个世界,它的视野,就这他的面。

现在“某个人”,就是网站的性能。
ps: 性能是个很复杂,很广泛的话题,pinpoint 也只解决了部分问题。

言归正传,为啥要用这个库,它到底解决了哪些问题?

  1. 主动埋点,工作量大,升级迭代不方便。
  2. 历史代码,谁也不准改的问题。

pinpoint-php-aop 怎么解决这个问题?

在回答这个问题之前,先弄明白php语言里面,为啥这是个问题。

php 语言实现层面并没有简单且易用的AOP实现方案。因为它的优雅,简洁。边解析,边执行。

最终,还是有人找到了一个折衷方案: goaop

你会问,为啥不用goaop,要自己开发*?

因为它不能满足监控内置函数的需求。

现在开始介绍pinpoint-php-aop 这个*怎样支持pinpoint监控php语言,并且解决上面的两个问题。

怎样使用?

  1. 加入到项目依赖 composer.json
  2. 引入到项目入口。比如index.php

GitHub: https://github.com/pinpoint-apm/pinpoint-php-aop
读完项目的readme, 你应该会大致知道怎么编写插件和引入到现有的项目中。
这里有个完整的 例子

当上面步骤完成后,define(‘AOP_CACHE_DIR‘,__DIR__.‘/../Cache/‘) 对应目录会生成新的类文件,里面是生成后的类文件。完成了类替换,命名空间替换。如果你感兴趣具体的替换规则,请参考 pinpoint-php-aop test case

经过上面几步的搭建,部署流程你会开始慢慢明白里面的工作流程。

我们在回到开始的问题:

  1. 主动埋点,工作量大,升级迭代不方便。
  2. 历史代码,谁也不准改的问题。

主动埋点问题

编写对应功能(模块)的插件,实现埋点。由pinpoint-aop-php 自动生成埋点代码框架,在插件里面实现逻辑处理。这也是我们为啥会单独发布插件:用户可以自己非常方便定制化插件中的处理逻辑,添加自己感兴趣的操作。

针对 php中内置函数,比如PDO 。 提供了主动修改的策略: setting.ini。 尽量重复利用已有的插件。也让插件的开发变得更加灵活,比如 监控 easyswoole 框架

历史代码问题

当第一个问题解决了,这个问题就简单了。
业务无侵入,pinpoint-aop-php 自动生成代码,屏蔽业务上的处理细节。

目前已知的问题

  • 必须使用composer类加载。虽然大部分框架都composer,但是仍然有很多项目不适用它。比如wordpress

ps: 我们在php 实现上面并没有做到零侵入
至少你需要修改你的入口文件。that‘ all

如果你还有其他疑问,欢迎 issues

感谢你宝贵的时间。

pinpoint-php-aop 介绍

上一篇:Netty解决粘包和拆包问题的四种方案


下一篇:JS 导出表格