当前位置:首页 > 科技  > 软件

PHP 服务实现性能剖析、跟踪和可观察性14444444444444】=102102102102102102102102102102102102102102102102实践

来源: 责编: 时间:2024-06-11 17:52:20 328观看
导读简介链路追踪Tracing Analysis为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等工具,可以帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效

简介

链路追踪Tracing Analysis为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等工具,可以帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。l8h28资讯网——每日最新资讯28at.com

官方地址:https://github.com/openzipkin/zipkinl8h28资讯网——每日最新资讯28at.com

Zipkin运行架构

图片图片l8h28资讯网——每日最新资讯28at.com

产品架构(链路追踪)

图片图片l8h28资讯网——每日最新资讯28at.com

链路追踪的主要工作流程如下

  1. 客户侧的应用程序通过集成链路追踪的多语言客户端SDK上报服务调用数据。链路追踪支持多种开源社区的SDK,且支持OpenTracing标准。
  2. 数据上报至链路追踪控制台后,链路追踪组件进行实时聚合计算和持久化,形成链路明细、性能总览、实时拓扑等监控数据。您可以据此进行问题排查与诊断。
  3. 调用链数据可对接下游阿里云产品,例如LogSearch、CloudMonitor、MaxCompute等,用于离线分析、报警等场景。

业务场景

随着业务越来越复杂,系统也随之进行各种拆分,特别是随着微服务架构和容器技术的兴起,看似简单的一个应用,后台可能有几十个甚至几百个服务在支撑;一个前端的请求可能需要多次的服务调用最后才能完成;当请求变慢或者不可用时,我们无法得知是哪个后台服务引起的,这时就需要解决如何快速定位服务故障点,zipkin分布式跟踪系统就能很好的解决这样的问题。l8h28资讯网——每日最新资讯28at.com

图片图片l8h28资讯网——每日最新资讯28at.com

请求&响应

微服务架构下,一次请求后端会经历多个服务调用(所有请求链有相同的traceId和不同的spanId),都会沿着traceText带到每一个服务中。l8h28资讯网——每日最新资讯28at.com

数据是如何上报的?

直接上报数据

图片图片l8h28资讯网——每日最新资讯28at.com

l8h28资讯网——每日最新资讯28at.com

不通过Agent而直接上报数据的原理(传统框架。PHP-FPM + Nginx模式)l8h28资讯网——每日最新资讯28at.com

  • ThinkPHP6.0
  • Laravel
  • Yii2.0

通过Agent上报数据

图片图片l8h28资讯网——每日最新资讯28at.com

通过Agent上报数据的原理(现代化框架。命令行模式)。l8h28资讯网——每日最新资讯28at.com

  • webman
  • Swoole

安装

通过composer安装:l8h28资讯网——每日最新资讯28at.com

composer require openzipkin/zipkin

使用

创建Tracer

Tracer对象可以用来创建Span对象(记录分布式操作时间)。Tracer对象还配置了上报数据的网关地址、本机IP、采样频率等数据,您可以通过调整采样率来减少因上报数据产生的开销。l8h28资讯网——每日最新资讯28at.com

function create_tracing($endpointName, $ipv4){    $endpoint = Endpoint::create($endpointName, $ipv4, null, 2555);    /* Do not copy this logger into production.     * Read https://github.com/Seldaek/monolog/blob/master/doc/01-usage.md#log-levels     */    $logger = new /Monolog/Logger('log');    $logger->pushHandler(new /Monolog/Handler/ErrorLogHandler());    $reporter = new Zipkin/Reporters/Http(/Zipkin/Reporters/Http/CurlFactory::create());    $sampler = BinarySampler::createAsAlwaysSample();    $tracing = TracingBuilder::create()        ->havingLocalEndpoint($endpoint)        ->havingSampler($sampler)        ->havingReporter($reporter)        ->build();    return $tracing;}

记录请求数据

$rootSpan = $tracer->newTrace();$rootSpan->setName('encode');$rootSpan->start();try {  doSomethingExpensive();} finally {  $rootSpan->finish();}

以上代码用于记录请求的根操作,如果需要记录请求的上一步和下一步操作,则需要传入上下文。示例:l8h28资讯网——每日最新资讯28at.com

$span = $tracer->newChild($parentSpan->getContext());$span->setName('encode');$span->start();try {  doSomethingExpensive();} finally {  $span->finish();}

总体流程如下

Client Span                                                Server Span┌──────────────────┐                                       ┌──────────────────┐│                  │                                       │                  ││   TraceContext   │           Http Request Headers        │   TraceContext   ││ ┌──────────────┐ │          ┌───────────────────┐        │ ┌──────────────┐ ││ │ TraceId      │ │          │ X-B3-TraceId      │        │ │ TraceId      │ ││ │              │ │          │                   │        │ │              │ ││ │ ParentSpanId │ │ Inject   │ X-B3-ParentSpanId │Extract │ │ ParentSpanId │ ││ │              ├─┼─────────>│                   ├────────┼>│              │ ││ │ SpanId       │ │          │ X-B3-SpanId       │        │ │ SpanId       │ ││ │              │ │          │                   │        │ │              │ ││ │ Sampled      │ │          │ X-B3-Sampled      │        │ │ Sampled      │ ││ └──────────────┘ │          └───────────────────┘        │ └──────────────┘ ││                  │                                       │                  │└──────────────────┘                                       └──────────────────┘

webman应用

1. 开通ARMS

开通ARMS地址 https://arms.console.aliyun.com/ (一般有15天试用)l8h28资讯网——每日最新资讯28at.com

2. 获得数据上报接入点url

进入 https://tracing.console.aliyun.com/#/globalSetting/cn-hangzhou/process 按照图示获得接入点url地址。l8h28资讯网——每日最新资讯28at.com

图片图片l8h28资讯网——每日最新资讯28at.com

如果你的服务器在阿里云上可以用阿里云vpc网络接入点,本示例用的是阿里云公网接入点。l8h28资讯网——每日最新资讯28at.com

安装

通过composer安装:l8h28资讯网——每日最新资讯28at.com

composer require openzipkin/zipkin

使用

1. 编写中间件

链路监控中间件 app/middleware/ArmsMiddleware.phpl8h28资讯网——每日最新资讯28at.com

<?php/** * @desc 全链路监控中间件 * @author Tinywan(ShaoBo Wan) * @date 2021/12/6 14:06 */declare(strict_types=1);namespace app/middleware;use Monolog/Handler/ErrorLogHandler;use Monolog/Logger;use support/Log;use think/facade/Db;use Webman/MiddlewareInterface;use Webman/Http/Response;use Webman/Http/Request;use Zipkin/Reporters/Http;use Zipkin/TracingBuilder;use Zipkin/Samplers/BinarySampler;use Zipkin/Endpoint;use Workerman/Timer;use const Zipkin/Tags/SQL_QUERY;class ArmsMiddleware implements MiddlewareInterface{    /**     * @desc: 方法描述     * @param Request $request     * @param callable $next     * @return Response     * @author Tinywan(ShaoBo Wan)     */    public function process(Request $request, callable $next) : Response    {        static $tracing = null, $tracer = null;        if (!$tracing) {            $endpoint = Endpoint::create('开源技术小栈', $request->getRealIp(), null, 2555);            $logger = new Logger('log');            $logger->pushHandler(new ErrorLogHandler());            $reporter = new Http(['endpoint_url' => config('security')['endpoint_url']]);            $sampler = BinarySampler::createAsAlwaysSample();            $tracing = TracingBuilder::create()                ->havingLocalEndpoint($endpoint)                ->havingSampler($sampler)                ->havingReporter($reporter)                ->build();            $tracer = $tracing->getTracer();            // 55秒上报一次,尽量将上报对业务的影响减少到最低            Timer::add(55, function () use ($tracer) {                $tracer->flush();            });            register_shutdown_function(function () use ($tracer) {                $tracer->flush();            });        }        $rootSpan = $tracer->newTrace();        $rootSpan->setName($request->controller."::".$request->action);        $rootSpan->start();        $request->rootSpan = $rootSpan;        $request->tracer = $tracer;        $result = $next($request);        // 统计sql(日志在内存)        if (class_exists(Db::class)) {            $logs = Db::getDbLog(true);            if (!empty($logs['sql'])) {                foreach ($logs['sql'] as $sql) {                    $sqlSpan = $tracer->newChild($rootSpan->getContext());                    $sqlSpan->setName(SQL_QUERY);                    $sqlSpan->start();                    $sqlSpan->tag('db.statement', $sql);                    $sqlSpan->finish();                }            }        }        $rootSpan->finish();        return $result;    }}

2. 配置中间件

在 config/middleware.php 中添加全局中间件如下:l8h28资讯网——每日最新资讯28at.com

return [    '' => [        /app/middleware/ArmsMiddleware::class,    ],    ...];

3. 查看监控

访问地址 https://tracing.console.aliyun.com/ ,效果类似如下:l8h28资讯网——每日最新资讯28at.com

图片图片l8h28资讯网——每日最新资讯28at.com

接口监控

图片图片l8h28资讯网——每日最新资讯28at.com

数据库监控

图片 图片 l8h28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-93091-0.htmlPHP 服务实现性能剖析、跟踪和可观察性14444444444444】=102102102102102102102102102102102102102102102102实践

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 震惊!用 Suspense 解决请求依赖的复杂场景居然这么简单!

下一篇: 严重!Spring AOP Bug导致切面重复执行

标签:
  • 热门焦点
  • 小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为&ldquo;纯欲天花板&rdquo;的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    据此前官方宣布,OPPO将于7月25日也就是今天下午14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖
  • Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    2023年6月30日,全球行业分析机构Counterpoint Research发布的《中国智能手机高端市场白皮书》显示,中国智能手机品牌正在寻求高质量发展,中国高端智能
  • DRAM存储器10月价格下跌,NAND闪存本月价格与上月持平

    10月30日,据韩国媒体消息,自今年年初以来一直在上涨的 DRAM 存储器的交易价格仅在本月就下跌了近 10%,此次是全年首次降价,而NAND 闪存本月价格与上月持平。市
Top