MST

星途 面试题库

面试题:设计一套适用于特定业务场景的微服务调用链追踪方案

假设我们正在开发一个电商系统,涉及商品展示、下单、支付、物流等多个微服务模块。不同模块对调用链追踪的要求有所差异,例如支付模块需要更精确的时间戳记录以排查交易问题。请你设计一套完整的服务调用链追踪方案,涵盖数据采集、传输、存储和展示各个环节,并且说明如何满足不同模块的特殊需求。
12.3万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

服务调用链追踪方案

数据采集

  1. 选择合适的追踪框架:例如 OpenTelemetry,它支持多种语言,可在各微服务模块方便集成。
  2. 在各微服务中植入采集代码
    • 商品展示模块:在处理商品查询、展示逻辑的关键函数入口和出口添加追踪代码,记录操作开始和结束时间,采集商品相关元数据,如商品 ID、类别等。
    • 下单模块:在订单创建、校验等核心流程处采集数据,包括用户 ID、订单明细、下单时间等。
    • 支付模块:除了基本的调用开始和结束时间,精确记录每一步支付操作时间戳,如发起支付、支付确认、支付回调等时间点,同时采集支付金额、支付渠道等关键信息。
    • 物流模块:在物流信息更新、查询等接口处采集数据,记录物流单号、物流状态变化时间、当前位置等。

数据传输

  1. 使用消息队列:如 Kafka,将采集到的追踪数据发送到消息队列。各微服务将追踪数据封装成规定格式的消息发送到 Kafka 主题中。
  2. 保证数据传输可靠性:配置 Kafka 副本机制,确保数据不丢失,同时设置合理的分区数和消息留存时间。

数据存储

  1. 选择存储系统:对于追踪数据的存储,可采用 Elasticsearch。它具有高可扩展性,能快速存储和检索大量的追踪数据。
  2. 数据索引设计:根据不同微服务模块和数据类型设计索引,如按服务名、时间范围、操作类型等进行索引,方便后续查询。例如,为支付模块的数据单独创建索引,以便快速定位支付相关问题。

数据展示

  1. 搭建可视化平台:使用 Grafana 与 Elasticsearch 集成,实现调用链数据的可视化展示。
  2. 定制展示面板
    • 通用面板:展示整体的服务调用拓扑图,显示各微服务之间的调用关系和调用次数。提供按时间维度的调用量趋势图,方便了解系统整体运行状况。
    • 针对支付模块特殊需求:创建专门的支付追踪面板,以时间轴形式精确展示支付流程各步骤的时间戳,方便排查交易问题。同时展示支付成功率、失败原因分布等统计信息。
    • 针对其他模块:如商品展示模块展示热门商品查询响应时间分布;下单模块展示订单创建成功率、不同时段下单量等;物流模块展示物流状态变化频率、各地区物流配送时长等。

满足不同模块特殊需求

  1. 配置化采集:通过配置文件或配置中心,为不同微服务模块设置不同的数据采集粒度和特殊字段采集要求。例如支付模块配置更精细的时间戳采集策略。
  2. 独立存储与索引:为对数据要求特殊的模块(如支付模块)设置独立的存储索引,便于高效查询和分析。在可视化展示时,针对不同模块定制特定的展示面板,突出其关键指标和特殊数据。