0

0

PHP分布式跟踪心得分享

小云云

小云云

发布时间:2018-01-25 14:10:14

|

1654人浏览过

|

来源于php中文网

原创

本文我们主要和大家分享php分布式跟踪的一些心得,希望能帮助到大家。

自从实现微服务化后,我们碰到了很多问题。其中最大的问题就是如何排查故障,服务化后的接口通常会依赖多个服务,依赖接口的缓慢会直接影响接口的服务质量。

这种依赖导致的缓慢情况在线上很常见,但是并不好排查,究其原因是线上都是通过日志进行跟踪的大量的日志开发人员并不是很直观,且有的公司开发人员是看不到线上具体执行情况。一般来说线上这些小概率故障代表着系统的隐患,当流量增大后这些隐患会被放大甚至直接导致线上大规模故障,为了避免类似的事情我们需要做很多事情,最直观的就是用分布式跟踪系统去统计分析。

讯飞听见会议
讯飞听见会议

科大讯飞推出的AI智能会议系统

下载


我们常见到大牛在讲线上性能怎么优化,怎么提高性能,其实有个重要的还环节他们并没有提及,他们是如何发现低概率故障?分布式跟踪系统在大型互联网公司是很常见,但是中小型公司是没有技术实力去实现这个系统的。而从我们角度来看即使流量很小但是对于公司仍旧很重要的系统是我们需要强化的,能够发现问题才能解决问题这是我一直贯彻的宗旨。


分布式跟踪系统具体的实现是有一定技术难度的,要实现性能的捕捉、日志写入、日志收集整理、日志传输、日志存储、日志索引、日志实时分析、最后合并展示,要求系统能够应对大流量系统的冲击。如每次请求每个接口产生1k的日志,那么QPS 2000 的服务器就会产生2M的日志,如果是一次请求依赖5个接口那么就是每秒10M的日志,当线上业务更复杂流量更大的时候,这个数值还会增加。


大型互联网公司有很多分布式跟踪系统,能够承受几十亿流量,但是对于小公司来说这种架构负担很大,其中很多环节如依赖分布式消息系统、分布式存储、分布式计算,光这几个至少会使用6台以上服务器,对于一般小型公司性价比不高。


这次我们开源的分布式跟踪是有两款,一款是给中小型互联网公司使用的单机版他可以支撑PV 2000w的业务系统(如支付系统)。另外还有一款支持分布式几十亿PV的分布式跟踪系统。目前刚刚开放Fiery单机版(https://github.com/weiboad/fiery)这个版本是针对中小型企业使用而设计的,整个项目就是一个Jar包开箱即用,只要有Java8 runtime即可直接使用,当然系统需要简单的做一个埋点工作。而C++分布式版本依赖东西较多对运维人员有一定能力要求,后续看单机版情况后续放出。这些完全开源内部有敏感数据的核心交易系统也完全可以使用。


目前市面上是存在着多个方式的分布式跟踪,有的是公司自己内部使用,有的是小规模免费大规模付费的服务。常见的分布式跟踪是通过统计方式去记录每一个Block的性能情况。目前我们提供的方式和市面的方式并不完全一样,我们通过不断的实验做了大量的简化,只保留我们认为真正实用的功能,我们将系统设计为关键系统分布式监控。如支付系统、交易系统。


我们记录了每个请求的具体情况、返回值、具体的性能等信息,通过表格分析可以快速的发现线上依赖接口性能(第三方或者未埋点的接口性能统计)、做埋点的接口也独立做了性能排行分析。通过查看分析表格后我们可以快速的找到最慢的接口请求回放,以此分析线上性能缓慢的原因。通过实践我们发现很多情况下都是PHP依赖的数据资源缓慢导致了PHP接口性能不佳。所以埋点的重点都是在依赖资源上。其他信息用户可以根据自己需要增加,这样可以减少大量无用日志,可以更节俭一些。


这次开源的Fiery主要有三个部分、PHP侵入式埋点库、精简的日志监控推送模块、服务端。这三个就实现了一个PV2000w以下的网站分布式跟踪。


埋点库会在入口产生Traceid(UUID)这个Traceid内隐藏着入口服务器的IP地址,请求时间,所有后续产生的日志都会用这个UUID作为标示。在日志收集后所有相关日志都会按这个UUID进行存储。埋点库会在运行时负责接收其他请求发来的Traceid和发送产生维护RPCID,RPCID是一个有层级的计数器,通过它我们可以将调用关系次序及层级直接进行还原展示给开发人员。另外在PHP运行过程中如果产生Exception也会被埋点库捕获记录下来,供服务端进行去重统计。最后会将这些日志落地到服务器本地磁盘,由于一些原因多个PHP进程同时写一个文件的时候偶尔会出现乱序情况,我们现在是按进程ID加上项目名称作为文件名进行落地的。


Fiery日志抓取传输我们实现了一个简单的版本,这么做是为了简化使用运维人员的工作,目前确实有很多开源提供类似的功能、但是需要依赖其他环境,这对于运维来说有一定负担。我们还有个实验性的PHP的日志抓取传输服务,但是还是实验的功能,预计会有一定的缺陷各位用户可以参与调试改进。


Fiery的服务端我们做了很多工作,内置了Lucene和Rocksdb,分别对请求进行索引和存储。并且做了一些内存统计的工作,目前我们的统计维度是固定的,只针对本地接口,依赖接口,Mysql、Curl的响应情况进行统计、另外提供调用关系回放、错误日志警报去重统计。通过这些功能可以快速的发现线上关键点的性能故障,系统异常。目前只是单机版,后续需要我可以将它进一步扩展成更简单的分布式方式。


以上这些服务并不仅仅服务于线上,目前我们内部还用他做了很多有意思的尝试,如QA测试的环境接入一套,测试完毕后把故障接口产生的Traceid直接发给开发,开发能够通过Traceid找到此次请求所有调用经过、参数、返回情况、性能都可以直观看到方便分析.上线之前的单元测试也可以这么做。前段时间我发微博推广Fiery的时候有人还提到可以用它做蜜罐,查看黑客入侵的过程,具体细节。后续功能还待大家继续发掘和改进,这个系统就是为了填补PHP生态空缺而做的。

相关推荐:

PHP分布式中Redis实现Session的方法

PHP分布式及大量数据处理有关问题

PHP分布式内存储器共享(Memcache)

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
excel制作动态图表教程
excel制作动态图表教程

本专题整合了excel制作动态图表相关教程,阅读专题下面的文章了解更多详细教程。

20

2025.12.29

freeok看剧入口合集
freeok看剧入口合集

本专题整合了freeok看剧入口网址,阅读下面的文章了解更多网址。

65

2025.12.29

俄罗斯搜索引擎Yandex最新官方入口网址
俄罗斯搜索引擎Yandex最新官方入口网址

Yandex官方入口网址是https://yandex.com;用户可通过网页端直连或移动端浏览器直接访问,无需登录即可使用搜索、图片、新闻、地图等全部基础功能,并支持多语种检索与静态资源精准筛选。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

197

2025.12.29

python中def的用法大全
python中def的用法大全

def关键字用于在Python中定义函数。其基本语法包括函数名、参数列表、文档字符串和返回值。使用def可以定义无参数、单参数、多参数、默认参数和可变参数的函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

16

2025.12.29

python改成中文版教程大全
python改成中文版教程大全

Python界面可通过以下方法改为中文版:修改系统语言环境:更改系统语言为“中文(简体)”。使用 IDE 修改:在 PyCharm 等 IDE 中更改语言设置为“中文”。使用 IDLE 修改:在 IDLE 中修改语言为“Chinese”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

16

2025.12.29

C++的Top K问题怎么解决
C++的Top K问题怎么解决

TopK问题可通过优先队列、partial_sort和nth_element解决:优先队列维护大小为K的堆,适合流式数据;partial_sort对前K个元素排序,适用于需有序结果且K较小的场景;nth_element基于快速选择,平均时间复杂度O(n),效率最高但不保证前K内部有序。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

12

2025.12.29

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

134

2025.12.29

抖音网页版入口在哪(最新版)
抖音网页版入口在哪(最新版)

抖音网页版可通过官网https://www.douyin.com进入,打开浏览器输入网址后,可选择扫码或账号登录,登录后同步移动端数据,未登录仅可浏览部分推荐内容。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

63

2025.12.29

快手直播回放在哪看教程
快手直播回放在哪看教程

快手直播回放需主播开启功能才可观看,主要通过三种路径查看:一是从“我”主页进入“关注”标签再进主播主页的“直播”分类;二是通过“历史记录”中的“直播”标签页找回;三是进入“个人信息查阅与下载”里的“直播回放”选项。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

18

2025.12.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 4.1万人学习

Git 教程
Git 教程

共21课时 | 2.3万人学习

Excel 教程
Excel 教程

共162课时 | 10.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号