当前应用程序开发模式倾向于微服务和微服务架构。虽然这种方法在独立部署和开发速度方面为开发人员团队提供了很大的灵活性,但当您试图在生产中跟踪错误时,缺点就在身边。

整体应用程序位于一个单独的位置,因此您可以自省代码流和应用程序的运行时状态。对于微服务架构来说,这更具挑战性,因为单个业务事务可能跨越部署在单独流程和计算节点中的数十个服务。

您可以依赖传统的方法,如日志记录,您需要在单个位置收集和关联日志,因此您可以尝试重新构造业务事务路径。这是我们可以使用的工具之一,但它仍然很粗糙,不能提供所有必要的上下文。分布式跟踪来这里拯救。

分布式跟踪

分布式跟踪允许服务在执行期间留下足够的信息,以创建业务事务的执行路径,其中包含丰富的上下文数据,如“谁”、“什么”和“哪里”。然后,SRE团队和开发人员可以使用它来浏览记录的执行,并检查执行中的错误或异常,这些错误或异常可能表示部署问题(服务不可用),甚至是bug。

这就是Debezium出现的原因。开云体育官方注册网址数据变化事件,由Debezium从数据库中捕获,并通过Kafka Co开云体育官方注册网址nnect和开云体育电动老虎机Apache Kafka传播到更多的下游消费者,是数据流的一部分,非常有价值的洞察。变更事件从源数据库流向接收系统需要多长时间?开云体育电动老虎机在流水线上花费的时间最多的是什么?是否存在端到端滞后峰值之类的异常?分布式跟踪与Debezium的集成可以帮助回答这些问题。开云体育官方注册网址

OpenTracing

分布式跟踪有多种解决方案,但作为起点,我们决定遵循并使用OpenTracing规范。OpenTracing是一个孵化项目云原生计算基金会这保证了用户将不受任何厂商的限制,因为它遵循一个开放的标准。

OpenTracing项目正在与OpenCensus合并以改进OpenTelemetry标准。开云体育官方注册网址Debezium在这一点上使用OpenTracing是为了与其他项目(例如Quarkus)保持一致,但它将来也会使用和支持OpenTelemetry。

OpenTracing中的分布式跟踪由一组跨度组成。每个跨度表示执行工作的一个逻辑单元。当由一个跨度表示的业务事务的较大部分可以由与主跨度具有父子关系的其他跨度表示的多个任务组合在一起时,这些跨度可以形成树。

OpenTracing只是规范和检测API。要使用它,还需要有一个实现。虽然Debe开云体育官方注册网址zium可以使用任何OpenTracing客户端实现,但我们的示例和文档都是基于Jaeger分布式跟踪平台。

Jaeger由多个负责数据收集和存储的组件以及web应用程序形式的图形用户界面组成。Jaeger的一体化的容器映像将用于简化部署。

开云体育官方注册网址Debezium和OpenTracing

Debe开云体育官方注册网址zium与OpenTracing的集成由三个不同的组件组成:

第一种是通用的。当需要跟踪使用发件箱模式的(基于quarkus的)服务时,后两者必须同时使用。

发件箱分布式跟踪

跟踪集成的最大问题是跨进程边界保持跟踪,以便所有相关的范围都记录在同一个跟踪中,从而支持端到端跟踪。OpenTracing规范提供了一种导出和导入跟踪相关元数据的方法,这样跟踪就可以在不同的进程之间传递。

在发件箱扩展中,我们使用这种方法将元数据导出到发件箱表中的特定列中,以便事件路由器SMT可以导入它们并恢复跟踪。在执行的每个步骤中,会创建一个或多个span:

  • 当事件发生时EventDispatcher新跨度outbox-write被创建。它被创建为当前活动跨度的子跨度(例如,由当前应用程序的REST API调用启动),或者如果没有父跨度可用,则创建为根跨度。

  • 跨度元数据被导出到发件箱事件的不同字段中。

  • 发件箱事件被写入发件箱表。

  • 事件路由器SMT接收事件并从字段导入span元数据

  • 创建了两个新的跨度

    • db-log-write将其开始时间戳设置为数据库写时间戳。开云体育电动老虎机从田野块被添加到span为标签

    • 开云体育官方注册网址debezium-read将其开始时间设置为处理时间戳。信封中的字段被添加到跨度为标签

  • 可选地,如果在Kafka生产者级别启用了OpenTracing集成,Kafka生产者将创建一个新的span,表示将消息写入带有相关元数据的Kafka主题。

演示

发件箱的例子扩展了分布式跟踪支持,以演示功能。这个例子包含两个基本的微服务:一个是订单服务,它公开了一个REST API,用于下订单;另一个是发货服务,它由订单服务使用发件箱模式通知新的采购订单。

本演示使用StrimziKafka Connect的容器映像,因为它已经包含了Kafka生产者级别的OpenTracing集成。

想要自己尝试,你需要:

  • 签出存储库并切换到发件箱目录

  • 构建服务

$ MVN清洁安装
  • 部署应用程序

export 开云体育官方注册网址DEBEZIUM_VERSION=1.4 docker-compose up—build
  • 注册一个Debeziu开云体育官方注册网址m连接器来监听发件箱表

$ http PUT http://localhost:8083/connectors/outbox-connector/config < register-postgres。201创建
  • 执行多个业务请求

$ http POST http://localhost:8080/orders < resources/data/create-order-request。json$ http PUT http://localhost:8080/orders/1/lines/2 < resources/data/cancel-order-line-request.json

以上所有步骤完成后,您应该看到Jaeger UI的介绍屏幕:

Jaeger介绍

过滤order服务作为服务并单击找到痕迹.两个跟踪应该是可用的:

服务跟踪

点击addOrder服务。将打开一个树,显示通过REST API传入的初始请求的情况

  • 由发件箱扩展名写入数据库开云体育电动老虎机

  • 由Debeziu开云体育官方注册网址m读取,由发件箱SMT处理

  • 写一个卡夫卡主题

  • 阅读卡夫卡的主题shipment-service

  • 在不同的地方加工shipment-service业务方法

服务跟踪

点击db-log-write而且开云体育官方注册网址debezium-read跨越。的标签每一个都包含提取的debeium相关元数据,比如开云体育官方注册网址操作字段:

服务跟踪

结论

在这篇博文中,我们讨论了分布式跟踪是什么,以及为什么使用它是有益的。我们已经看到了分布式跟踪集成是如何在Debezium级别上完成的,以支持端到端跟踪,并尝试了一个演示应用程序和Jaeger UI探索。开云体育官方注册网址

虽然这个例子关注的是通过发件箱模式进行微服务数据交换的特定用例,但Debezium与分布式跟踪的集成也独立于这个特定的模式。开云体育官方注册网址通过ActivateTracingSpan在SMT中开云体育官方注册网址,Debezium可以生成表示源数据库本身更改时间的跨度,以及Debezium连接器处理事件的时间。开云体育电动老虎机

支持分布式跟踪是Debezium 1.4中的一个新特性(最初是在Beta1中添加的),并将在后续版本中不开云体育官方注册网址断发展和成熟。非常欢迎您对这个新功能的反馈!

雅罗西克Pechanec

Jiri是Red Hat的软件开发人员(前质量工程师)。他职业生涯的大部分时间都花在Java和系统集成项目和任务上。他住在捷克共和国布尔诺附近。


关于Debe开云体育官方注册网址zium

开云体育官方注册网址Debezium是一个开源的分布式平台,它将现有数据库转换为事件流,因此应用程序几乎可以立即看到并响应数据库中提交的每一个行级更改。开云体育电动老虎机开云体育官方注册网址Debezium是建立在卡夫卡并提供卡夫卡连接监控特定数据库管理系统的兼容连接器。开云体育电动老虎机开云体育官方注册网址Debezium在Kafka日志中记录了数据更改的历史,所以你的应用程序可以在任何时候停止和重新启动,并且可以很容易地使用它没有运行时错过的所有事件,确保所有事件都被正确和完整地处理。开云体育官方注册网址Debezium是开源Apache许可证,版本2.0

参与

我们希望您觉得Debezium有趣开云体育官方注册网址且有用,并愿意尝试一下。在Twitter上关注我们@开云体育官方注册网址debezium在Zulip上和我们聊天,或加入我们的邮件列表与社区对话。所有的代码都是开源的GitHub上,因此在本地构建代码并帮助我们改进现有连接器并添加更多连接器。如果您发现了问题或对我们如何改进Debezium有想法,请告诉我们开云体育官方注册网址记录问题

Baidu
map