Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >个推基于Zipkin的分布式链路追踪实践 顶

个推基于Zipkin的分布式链路追踪实践 顶

作者头像
个推君
发布于 2019-06-04 06:19:46
发布于 2019-06-04 06:19:46
6480
举报
文章被收录于专栏:原创原创

作者:个推应用平台基础架构高级研发工程师 阿飞

01业务背景

随着微服务架构的流行,系统变得越来越复杂,单体的系统被拆成很多个模块,各个模块通过轻量级的通信协议进行通讯,相互协作,共同实现系统功能。

单体架构时,一个请求的调用链路很清晰,一般由负载均衡器将用户请求转发到后端服务,由后端服务进行业务处理,需要的数据从外部的存储中获取,处理完请求后,再经由负载均衡器返回给用户。

而在微服务架构中,一个请求往往需要多个模块共同协作处理,不同模块可能还依赖于不同的外部存储,各个模块的实现技术还不尽相同,一个请求是如何在整个系统不同模块间进行流转,整个调用链上的各个模块之间的调用关系如何,每个微服务处理的时间长短,处理的结果是否正确,很难去进行追踪,而这些信息对于整个系统运维、性能分析、故障追踪都特别有帮助,也正因为此,才有了各种分布式链路追踪的技术。

02分布式链路追踪现状

分布式链路追踪的技术有很多,有开源的也有闭源的。开源的有Jaeger、PinPoint、Zipkin、SkyWalking、CAT等,闭源的有Google Dapper、淘宝的鹰眼Tracing、新浪的Watchman、美团的MTrace等。CNCF(Cloud Native Computing Foundation)为了解决业界分布式追踪系统跨平台兼容性问题,设计了trace的标准,提出了分布式跟踪系统产品的统一范式-OpenTracing,Zipkin也部分支持OpenTracing标准。

03选择Zipkin的原因

在实践的过程中,基于以下原因选择了Zipkin来进行链路追踪:

• 开源,社区活跃

• 支持多种语言,Nodejs,Lua,Java都有开源实现,而我们的服务主要是这三种语言实现的

• 提供查询API,方便二次开发

04Zipkin的架构介绍

Zipkin的整体架构如下图所示:

Zipkin的整体架构

(引用自Zipkin官网:https://zipkin.io/pages/architecture.html)

其中:

•  Instrumented client和Instrumented server需要集成在分布式系统的具体服务中,采集跟踪信息,调用Transport,把跟踪信息发送给Zipkin的Server。

• Transport是Zipkin对外提供的接口,支持HTTP、Kafka、Scribe等通信方式。

•  Zipkin即Zipkin server,主要包括四个模块:

  • Collector: 用于接收各个应用服务传输的追踪信息;
  • Storage:Zipkin的后端存储,支持In-Memory、MySql、Elasticsearch和Cassandra
  • API:提供对外的查询接口;
  • UI:提供对外的Web界面。

Http Tracing的时序图

(引用自Zipkin官网:https://zipkin.io/pages/architecture.html)

以上是Http Tracing的时序图,用户的请求/foo首先被Trace Instrumentationlan拦截,记录下Tags,时间戳,同时在Header里增加Trace信息,然后再流转到后端服务进行处理,处理完成后,正常响应,Trace Instrumentationlan拦截响应,记录处理延时后,将Response正常返回给调用方,同时异步地将Trace的Span发送给Zipkin Server。Span中的traceId是在整个调用链路上唯一的ID,用于唯一标识一条调用链。

05个推的Zipkin实践

个推的微服务是基于Kubernetes和Docker进行部署的,每个微服务对应于Kubernetes中的一组Pod。

在整个微服务体系中,API网关是基于Openresty开发的,主要使用Lua进行开发;后端服务主要使用Node.js和Java进行开发实现。在对接Zipkin时,不同的微服务采用不同的方式进行实现。

API网关主要通过增加网关插件(主要参考了Kong的Zipkin插件实现)来实现与Zipkin的对接;Node.js实现的服务主要使用了中间件实现与Zipkin的对接;Java服务使用了spring-cloud-sleuth来与Zipkin对接。 整体的架构如下图所示:

个推基于Zipkin的分布式链路追踪系统的整体架构

其中,Zipkin也容器化部署在Kubernetes集群中,简化了Zipkin的搭建和部署。如下图所示,通过Zipkin可以很方便地追踪请求的调用链路,整个调用链上各个服务的处理耗时,响应状态,服务间的调用关系都可以方便地在Zipkin中进行查询。Zipkin对于分析整个系统的性能瓶颈,定位故障也都有很大的帮助。

Zipkin的Web界面

06总结

Zipkin作为一个分布式链路追踪系统,有着应用侵入较小、社区活跃度较高、支持多种语言等优势,一般基于开源的实现稍做修改就可以实现与Zipkin的对接。因此个推在微服务架构中也引入了Zipkin,用Zipkin来追踪微服务的调用关系,对微服务进行性能分析和故障诊断。未来,个推会基于Zipkin做二次开发,提供更为友好的界面。

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【机器学习 | Adaboost原理&实现】
可以发现,指数损失函数在【正确\错误】分类的样本的值【小于\大于】1,正好符合Adaboost加法模型的实现思路,<u>在加入新的弱学习器中【提高\降低】分类【错误\正确】样本的权值</u>,所以第$m$个弱分类器,第$i$个样本的权值更新可以设计为:
九年义务漏网鲨鱼
2025/06/27
730
高斯混合模型:GMM和期望最大化算法的理论和代码实现
高斯混合模型(gmm)是将数据表示为高斯(正态)分布的混合的统计模型。这些模型可用于识别数据集中的组,并捕获数据分布的复杂、多模态结构。
deephub
2023/12/04
6910
高斯混合模型:GMM和期望最大化算法的理论和代码实现
14种异常检测方法汇总(附代码)!
今天给大家分享一篇关于异常检测的文章,重点介绍了14种公开网络上一些常见的异常检测方法(附资料来源和代码)。
小白学视觉
2022/12/27
3K0
14种异常检测方法汇总(附代码)!
python实现10种概率分布(附代码)
在概率论和统计学中,均匀分布也被称为矩形分布。这种分布可以通过两个参数a和b来定义,它们分别是数轴上的最小值和最大值,因此通常表示为U(a, b)。
皮大大
2024/08/07
1K0
深度学习应用篇-元学习[14]:基于优化的元学习-MAML模型、LEO模型、Reptile模型
Model-Agnostic Meta-Learning (MAML): 与模型无关的元学习,可兼容于任何一种采用梯度下降算法的模型。 MAML 通过少量的数据寻找一个合适的初始值范围,从而改变梯度下降的方向, 找到对任务更加敏感的初始参数, 使得模型能够在有限的数据集上快速拟合,并获得一个不错的效果。 该方法可以用于回归、分类以及强化学习。
汀丶人工智能
2023/10/11
1.8K0
深度学习应用篇-元学习[14]:基于优化的元学习-MAML模型、LEO模型、Reptile模型
逻辑回归
y=\sigma(f(\boldsymbol{x}))=\sigma\left(\boldsymbol{w}^{T} \boldsymbol{x}\right)=\frac{1}{1+e^{-\boldsymbol{w}^{T} \boldsymbol{x}}}
故事尾音
2019/12/18
6690
逻辑回归
多项式朴素贝叶斯分类器
在这篇文章中,我们介绍多项式朴素贝叶斯分类器是如何工作的,然后使用scikit-learn作为实际工作的示例来介绍如何使用。
deephub
2024/03/20
2880
多项式朴素贝叶斯分类器
直方图与核密度估计
直方图是一种经常被用于统计的图形表达形式,简单来说它的功能就是用一系列的样本数据,去分析样本的分布规律。而直方图跟核密度估计(Kernel Density Estimation,KDE)方法的主要差别在于,直方图得到的是一个离散化的统计分布,而KDE方法得到的是一个连续的概率分布函数。如果将得到的分布重新用于采样,两者都可以结合蒙特卡洛方法实现这样的功能,但是KDE的优点在于它得到的结果是可微分的,那么就可以应用于有偏估计的分子动力学模拟中,如元动力学(Meta Dynamics)方法。这里主要用Python实现一个简单的KDE函数的功能,也顺带介绍一下Numpy和Matplotlib中关于直方图的使用方法。
DechinPhy
2024/04/18
2900
直方图与核密度估计
不愧商汤,一面巨深入。。
Softmax函数主要用于多类别分类问题中,它通过对原始的类别分数进行转换,将它们转化为概率分布。这个过程使得模型的输出更容易解释为各个类别的概率。
Python编程爱好者
2024/01/11
2470
不愧商汤,一面巨深入。。
Python实现量子态采样
在前面一篇量子系统模拟的博客中,我们介绍了使用python去模拟一个量子系统演化的过程。当我们尝试理解量子态和量子门操作时,可以通过其矩阵形式的运算来描述量子态演化的过程:
DechinPhy
2021/05/21
9000
稀疏Softmax(Sparse Softmax)
本文源自于SPACES:“抽取-生成”式长文本摘要(法研杯总结),原文其实是对一个比赛的总结,里面提到了很多Trick,其中有一个叫做稀疏Softmax(Sparse Softmax)的东西吸引了我的注意,查阅了很多资料以后,汇总在此
mathor
2021/07/19
1.9K0
理论+实践!14 种异常检测方法总结!
Z-score为标准分数,测量数据点和平均值的距离,若A与平均值相差2个标准差,Z-score为2。当把Z-score=3作为阈值去剔除异常点时,便相当于3sigma。
Python编程爱好者
2024/03/19
8270
理论+实践!14 种异常检测方法总结!
简单易学的机器学习算法——受限玻尔兹曼机RBM
受限玻尔兹曼机(Restricted Boltzmann Machine, RBM)是一种基于能量模型的神经网络模型,在Hinton提出针对其的训练算法(对比分歧算法)后,RBM得到了更多的关注,利用RBM的堆叠可以构造出深层的神经网络模型——深度信念网(Deep Belief Net, DBN)。下面简单介绍二值型RBM的主要内容。
felixzhao
2019/01/31
1.1K0
简单易学的机器学习算法——受限玻尔兹曼机RBM
概率和分布
概率空间:sample space,events space和probability function
esse LL
2024/08/07
1360
Python NumPy自定义随机分布生成器
随机数生成是数据分析、模拟和机器学习中的重要组成部分。NumPy 提供了强大的随机数生成工具,涵盖了多种常见分布(如正态分布、均匀分布等)。在实际应用中,经常需要根据特定需求创建自定义的随机分布生成器。
sergiojune
2025/01/15
2300
Python NumPy自定义随机分布生成器
TF-char7-反向传播法
向量\left(\frac{\partial \mathcal{L}}{\partial \theta_{1}}, \frac{\partial \mathcal{L}}{\partial \theta_{2}}, \frac{\partial \mathcal{L}}{\partial \theta_{3}}, \ldots \frac{\partial \mathcal{L}}{\partial \theta_{n}}\right)叫做函数的梯度
皮大大
2021/03/01
3190
TF-char7-反向传播法
深入理解与实践:Softmax函数在机器学习中的应用
今日推荐:前端小白使用Docsify+Markdown+‌Vercel,无服务器部署个人知识库原创
小说男主
2024/12/01
6180
深入理解与实践:Softmax函数在机器学习中的应用
从零开始学Pytorch(十三)之梯度下降
梯度下降 %matplotlib inline import numpy as np import torch import time from torch import nn, optim import math import sys sys.path.append('/home/input') import d2lzh1981 as d2l 一维梯度下降 证明:沿梯度反方向移动自变量可以减小函数值 泰勒展开: 代入沿梯度方向的移动量 \eta f^{\prime}(x) : f\left(x
墨明棋妙27
2022/09/23
3650
线性平稳时间序列
王燕老师的书上的符号和我们老师讲课的符号有一些出入,虽然在写的过程中有意识地去使用赵老师上课用的符号但难免会有所疏漏,这里将两本书上符号的对应关系列一下:
爱编程的小明
2022/10/31
1K0
线性平稳时间序列
numpy的random模块
For random samples from N(\mu, \sigma^2), use:
hankleo
2020/09/16
3970
相关推荐
【机器学习 | Adaboost原理&实现】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档