Skip to content

Commit

Permalink
feat:change img
Browse files Browse the repository at this point in the history
  • Loading branch information
gongna-au committed Nov 7, 2023
1 parent 15a79f0 commit 13b7ecd
Show file tree
Hide file tree
Showing 8 changed files with 92 additions and 59 deletions.
75 changes: 38 additions & 37 deletions _posts/2023-10-18-test-markdown.md

Large diffs are not rendered by default.

70 changes: 50 additions & 20 deletions _posts/2023-10-19-test-markdown.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
---
layout: post
title: Jaeger 分布式追踪
title: OpenTelemetry和Jaeger进行分布式追踪
subtitle:
tags: [Jaeger]
tags: [OpenTelemetry]
comments: true
---


> 请谈谈对OpenTelemetry和Jaeger的看法。它们如何协同工作
> OpenTelemetry和Jaeger如何协同工作
OpenTelemetry:

Expand Down Expand Up @@ -45,7 +45,7 @@ OpenTelemetry为应用程序提供了追踪和度量的能力。当使用OpenTel
在Jaeger中,可以查询、分析和可视化这些追踪数据,以获得系统的深入视图和性能洞察。
总的来说,OpenTelemetry和Jaeger是分布式追踪领域的强大组合。OpenTelemetry提供了数据收集的标准化和自动化,而Jaeger提供了数据的存储、查询和可视化。这两者的结合为微服务和分布式系统提供了强大的监控和诊断能力。

> Jaeger的基础存储
> Jaeger的基础存储
可插拔存储后端:Jaeger支持多种存储后端,包括Elasticsearch、Cassandra、Kafka和Badger等。这种可插拔的设计意味着可以选择最适合的环境和需求的存储后端。虽然 Jaeger 本身的存储可能足够用于开发和测试环境,但在生产环境中,一个健壮的外部存储后端几乎总是必需的。

Expand All @@ -61,7 +61,7 @@ OpenTelemetry为应用程序提供了追踪和度量的能力。当使用OpenTel

总的来说,Jaeger的存储是其架构中的一个关键组件,负责持久化追踪数据。通过与多种存储后端的集成,Jaeger为用户提供了灵活性,使他们可以选择最适合他们需求的存储解决方案。

> Jaeger的内存存储
> Jaeger的内存存储

内存存储:Jaeger的一个简单配置是使用内存存储,这意味着所有的追踪数据都保存在内存中,不持久化到磁盘。这种配置适用于开发和测试环境,但不适用于生产环境,因为重启Jaeger实例会导致数据丢失。
Expand All @@ -70,7 +70,7 @@ Badger存储:Badger是一个嵌入式的键/值存储,可以在本地文件

外部存储后端:虽然Jaeger支持Elasticsearch、Cassandra和Kafka作为存储后端,但这并不意味着它们在默认配置中都被使用。需要明确地配置Jaeger以使用这些后端,并确保相应的存储系统已经设置并运行。

> Jaeger 请求处理的过程
> Jaeger 请求处理的过程
代理和收集器:当发送追踪数据到Jaeger时,通常首先发送到Jaeger代理,然后代理将数据转发到Jaeger收集器。收集器负责将数据写入配置的存储后端。

Expand All @@ -93,7 +93,7 @@ Jaeger UI:当用户想要查看追踪数据时,他们会使用Jaeger UI。
总结:一个请求的追踪数据从应用程序开始,通过Jaeger客户端库、Jaeger代理、Jaeger收集器,最后存储在配置的存储后端中。当需要查看这些数据时,可以通过Jaeger UI进行查询和可视化。


> jaeger-agent 和 jaeger-collector 通过gRPC 通信
> jaeger-agent 和 jaeger-collector 如何通过gRPC 通信
在 Jaeger 的架构中,jaeger-agent 和 jaeger-collector 之间的通信通常是由 Jaeger 项目本身管理的,通常不需要手动编写 gRPC 代码来实现这一点。Jaeger 的各个组件已经内置了这些通信机制。

Expand All @@ -111,7 +111,7 @@ jaeger-agent --reporter.grpc.host-port=jaeger-collector.example.com:14250
```
这样,jaeger-agent 就会使用 gRPC 协议将数据发送到 jaeger-collector。

> Jaeger分布式部署
> Jaeger如何进行分布式部署?
选择存储后端:

Expand Down Expand Up @@ -151,7 +151,7 @@ jaeger-agent --reporter.grpc.host-port=jaeger-collector.example.com:14250
如果需要,配置身份验证和授权。
通过以上步骤,可以在分布式环境中部署Jaeger,从而实现高可用性、扩展性和故障隔离。这种部署方式特别适合大型或复杂的微服务和分布式系统。

> 使用Docker模拟部署分布式Jaeger的步骤
> 使用Docker模拟部署分布式Jaeger的步骤
使用Docker部署分布式Jaeger是一个很好的选择,因为Docker提供了一个轻量级、隔离的环境,可以轻松地模拟分布式部署。以下是使用Docker模拟部署分布式Jaeger的步骤:

Expand Down Expand Up @@ -200,26 +200,33 @@ docker run --name jaeger-query -d -p 16686:16686 -e SPAN_STORAGE_TYPE=elasticsea
选择合适的采样策略可以确保捕获到有代表性的追踪数据,同时不会对系统产生过大的负担。

追踪数据的传输:

Jaeger客户端库通常会在内存中缓存追踪数据,并批量发送到Jaeger后端,以减少网络调用的次数和延迟。
考虑使用异步传输,这样即使追踪后端服务不可用或延迟也不会影响到应用的主要功能。

存储后端的性能:

Jaeger支持多种存储后端,如Elasticsearch、Cassandra和Kafka。每种存储后端都有其性能特点和最佳实践。
根据数据量、查询需求和存储策略选择合适的存储后端,并进行适当的优化。

追踪数据的生命周期:

考虑设置追踪数据的保留策略,以自动删除旧的追踪数据,防止存储资源被耗尽。

服务间通信的开销:

在微服务之间传递追踪上下文(如Span ID和Trace ID)会增加通信的开销。虽然这些开销通常很小,但在高吞吐量的系统中可能会变得显著。

查询性能:

当使用Jaeger UI进行查询时,需要确保存储后端可以快速响应,特别是在大量的追踪数据下。
考虑为存储后端启用索引和优化查询性能。

监控和告警:

监控Jaeger的性能和健康状况,确保它不会成为系统的瓶颈。
设置告警,以便在出现性能问题或故障时立即通知。

资源分配:

根据追踪数据的量和查询需求为Jaeger分配足够的计算和存储资源。
Expand Down Expand Up @@ -277,6 +284,7 @@ func main() {

如果使用的是Jaeger代理,可以使用命令行参数或环境变量来配置采样策略。例如,使用以下命令行参数启动Jaeger代理并设置概率采样率为20%:


```go
docker run -d -p 5775:5775/udp -p 6831:6831/udp -p 6832:6832/udp -p 5778:5778/tcp jaegertracing/jaeger-agent --sampler.type=probabilistic --sampler.param=0.2
```
Expand Down Expand Up @@ -333,42 +341,52 @@ Span:
详细解释: 在分布式追踪中,Span通常包含一个开始时间、一个结束时间、一个描述性的名称(例如函数名或API端点)以及其他可选的元数据(例如日志、标签或事件)。Span还有一个唯一的ID和一个关联的Trace ID。

Trace:

定义: Trace是由多个Span组成的,代表一个完整的事务或工作流程,如用户请求的处理。
详细解释: 在微服务架构中,一个用户请求可能需要多个服务协同工作来完成。每个服务的工作可以被表示为一个Span,而整个用户请求的处理则被表示为一个Trace。所有相关的Span共享一个Trace ID,这样我们就可以将它们组合在一起,形成一个完整的视图。

Baggage:

定义: Baggage是与Trace相关的键值对数据,它在Trace的所有Span之间传播。
详细解释: Baggage允许在整个Trace的生命周期中携带数据。例如,可能想在Trace的开始时设置一个“用户ID”或“实验变种”,然后在后续的Span中访问这些数据。Baggage可以帮助实现跨服务的上下文传播。

Context:

定义: Context是一个抽象概念,用于在不同的操作和函数调用之间传递元数据,如Span和Baggage。
详细解释: 在分布式追踪中,Context确保在处理一个请求时,所有相关的信息(如当前的Span、Baggage等)都能被正确地传递和访问。例如,在OpenTelemetry中,Context是一个核心概念,用于在API调用和库之间传递追踪和度量信息。

> Jaeger与其他追踪系统(如Zipkin)相比有什么优势或特点?
原生支持OpenTracing:

Jaeger是作为OpenTracing项目的一部分而创建的,因此它从一开始就原生支持OpenTracing API。这意味着对于那些已经采用OpenTracing标准的应用程序,集成Jaeger会更加直接。
虽然Zipkin现在也支持OpenTracing,但它最初并不是为此而设计的。

灵活的存储后端:

Jaeger支持多种存储后端,如Elasticsearch、Cassandra和Kafka。这为用户提供了更多的选择,以满足其特定的需求和偏好。
Zipkin也支持多种存储后端,但Jaeger在某些方面提供了更多的灵活性。

适应性:

Jaeger的设计允许它轻松地适应大规模和高流量的环境。例如,它支持收集器和代理的分离部署,这有助于在大型系统中分散负载。

高级UI和过滤功能:

Jaeger的UI提供了一些高级的过滤和查找功能,使用户能够更容易地找到和分析特定的追踪。
虽然Zipkin也有一个功能强大的UI,但Jaeger在某些方面提供了更多的功能,如追踪比较和性能优化。

性能优化:

Jaeger提供了一些高级的性能优化功能,如自适应采样,这有助于在高流量环境中减少系统开销。

生态系统和集成:

由于Jaeger是CNCF(云原生计算基金会)的项目,它与其他CNCF项目(如Prometheus、Kubernetes等)有很好的集成。
虽然Zipkin也有一个强大的生态系统,但Jaeger在与其他云原生工具的集成方面可能有优势。

扩展性:

Jaeger的架构设计为模块化,这使得它更容易扩展和自定义。例如,可以轻松地添加新的存储后端或采样策略。
总的来说,虽然Jaeger和Zipkin都是优秀的分布式追踪系统,但它们在设计、特性和生态系统方面有所不同。选择哪一个取决于的具体需求、偏好和现有的技术栈。

Expand Down Expand Up @@ -402,28 +420,40 @@ Jaeger的架构设计为模块化,这使得它更容易扩展和自定义。

> 如何传递追踪信息?
HTTP Headers:在基于HTTP的微服务架构中,追踪信息(如trace ID和span ID)通常作为HTTP headers传递。例如,使用B3 Propagation headers(由Zipkin定义)。
HTTP Headers:

消息队列:在基于消息的系统中,追踪信息可以作为消息的元数据或属性传递
在基于HTTP的微服务架构中,追踪信息(如trace ID和span ID)通常作为HTTP headers传递。例如,使用B3 Propagation headers(由Zipkin定义)

gRPC Metadata:对于使用gRPC的系统,追踪信息可以通过gRPC的metadata传递。
消息队列:

Context Propagation:在同一进程内的不同组件之间,可以使用编程语言提供的上下文(如Go的context.Context)来传递追踪信息
在基于消息的系统中,追踪信息可以作为消息的元数据或属性传递

谁来生成ID:
边缘服务:第一个接收到请求的服务(通常是API网关或边缘服务)负责生成trace ID。这确保了整个请求链中的所有spans都共享相同的trace ID。
gRPC Metadata:

每个服务:每个服务在开始处理请求时都会生成一个新的span ID。这标识了该服务处理的操作或任务
对于使用gRPC的系统,追踪信息可以通过gRPC的metadata传递

什么算法:
随机生成:使用强随机数生成器生成随机ID。例如,使用UUID(通常是UUID v4)。
Context Propagation:

雪花算法(Snowflake):这是Twitter开发的一个算法,用于生成唯一的ID。它结合了时间戳、机器ID和序列号来确保在分布式系统中生成的ID是唯一的。
在同一进程内的不同组件之间,可以使用编程语言提供的上下文(如Go的context.Context)来传递追踪信息。

> 谁来生成ID?
边缘服务:

第一个接收到请求的服务(通常是API网关或边缘服务)负责生成trace ID。这确保了整个请求链中的所有spans都共享相同的trace ID。

每个服务:

每个服务在开始处理请求时都会生成一个新的span ID。这标识了该服务处理的操作或任务。

> 什么算法?
随机生成:使用强随机数生成器生成随机ID。例如,使用UUID(通常是UUID v4)。
雪花算法(Snowflake):这是Twitter开发的一个算法,用于生成唯一的ID。它结合了时间戳、机器ID和序列号来确保在分布式系统中生成的ID是唯一的。
增量或原子计数器:对于单一服务,可以简单地使用一个原子计数器来生成span IDs。但是,这种方法在分布式系统中可能不是很实用,除非它与其他信息(如机器ID)结合使用。


> 链路追踪
> 链路追踪?
链路追踪:
链路追踪通常使用一个称为“span”的概念来代表一个工作单元或一个操作,例如一个函数调用或一个数据库查询。每个span都有一个唯一的ID,以及其他关于该操作的元数据,如开始和结束时间。
Expand Down
1 change: 1 addition & 0 deletions _posts/2023-10-23-test-markdown.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ tags: [go]
comments: true
---

简单的例子:
```go
package main

Expand Down
2 changes: 1 addition & 1 deletion _posts/2023-11-4-test-markdown.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ Grafana可以从Prometheus服务器读取指标,并以图表的形式进行展
总的来说,通过使用Prometheus和Grafana,我们可以有效地收集和展示Arana的运行指标,从而更好地监控其性能和健康状况。



**提案标题:云原生数据库 Arana 监控方案**

**1. 项目背景:**
Expand Down Expand Up @@ -102,6 +101,7 @@ Jaeger 是一个开源的分布式追踪系统,可以用来追踪 Arana 数据
- 通过数据驱动,优化和改进 Arana 数据库的性能。


### Vitess

Vitess 提供了大量的性能和诊断指标,下面列举了其中一部分主要的指标:

Expand Down
1 change: 1 addition & 0 deletions aboutme.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
layout: page
title: About me
subtitle: Why you'd want to go on a date with me
cover-img: ["/assets/img/backend5.jpg":]
---

I have the following qualities:
Expand Down
Binary file added assets/img/backend3.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/img/backend5.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
layout: home
title: GopherGong
subtitle: Most of the time, What you lack is not knowledge but enthusiasm!
cover-img: ["/assets/img/backend2.jpg":]
cover-img: ["/assets/img/backend3.jpg":]
---

0 comments on commit 13b7ecd

Please sign in to comment.