跳到主要内容

多存储后端配置

介绍

Zipkin是一个分布式追踪系统,用于收集、存储和可视化微服务架构中的请求链路数据。默认情况下,Zipkin使用内存存储(In-Memory Storage),但这种方式仅适用于开发和测试环境。在生产环境中,你需要配置持久化存储后端,如MySQL、Elasticsearch或Cassandra。

本文将介绍如何为Zipkin配置多种存储后端,并讨论它们的优缺点和适用场景。

支持的存储后端

Zipkin支持以下存储后端:

  1. 内存(In-Memory):默认配置,适用于开发和测试。
  2. MySQL:关系型数据库,适合小规模部署。
  3. Elasticsearch:分布式搜索引擎,适合大规模和高性能需求。
  4. Cassandra:分布式NoSQL数据库,适合高可用性和大规模数据。
  5. 其他:如PostgreSQL、AWS DynamoDB等。

配置存储后端

1. 内存存储(默认)

内存存储是Zipkin的默认配置,不需要额外设置。但重启后数据会丢失,仅适用于测试。

bash
java -jar zipkin-server.jar

2. MySQL存储

MySQL是一种关系型数据库,适合小规模生产环境。

配置步骤:

  1. 创建数据库和表:

    sql
    CREATE DATABASE zipkin;
    USE zipkin;
    CREATE TABLE IF NOT EXISTS zipkin_spans (
    `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
    `trace_id` BIGINT NOT NULL,
    `id` BIGINT NOT NULL,
    `name` VARCHAR(255) NOT NULL,
    `parent_id` BIGINT,
    `debug` BIT(1),
    `start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL',
    `duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query'
    ) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;

    (其他表结构请参考Zipkin官方文档

  2. 启动Zipkin时指定MySQL配置:

    bash
    java -jar zipkin-server.jar \
    --STORAGE_TYPE=mysql \
    --MYSQL_HOST=localhost \
    --MYSQL_TCP_PORT=3306 \
    --MYSQL_USER=zipkin \
    --MYSQL_PASS=zipkin \
    --MYSQL_DB=zipkin

3. Elasticsearch存储

Elasticsearch适合大规模和高性能需求的场景。

配置步骤:

  1. 确保Elasticsearch已安装并运行。
  2. 启动Zipkin时指定Elasticsearch配置:
    bash
    java -jar zipkin-server.jar \
    --STORAGE_TYPE=elasticsearch \
    --ES_HOSTS=http://localhost:9200
提示

如果需要配置多个Elasticsearch节点,可以用逗号分隔:

bash
--ES_HOSTS=http://node1:9200,http://node2:9200

4. Cassandra存储

Cassandra适合高可用性和大规模数据场景。

配置步骤:

  1. 确保Cassandra已安装并运行。
  2. 启动Zipkin时指定Cassandra配置:
    bash
    java -jar zipkin-server.jar \
    --STORAGE_TYPE=cassandra3 \
    --CASSANDRA_KEYSPACE=zipkin2 \
    --CASSANDRA_CONTACT_POINTS=localhost

多存储后端配置示例

在某些场景下,你可能需要同时配置多种存储后端(如MySQL和Elasticsearch)。Zipkin支持通过环境变量或配置文件实现。

使用环境变量:

bash
java -jar zipkin-server.jar \
--STORAGE_TYPE=elasticsearch \
--ES_HOSTS=http://localhost:9200 \
--STORAGE_TYPE=mysql \
--MYSQL_HOST=localhost \
--MYSQL_USER=zipkin \
--MYSQL_PASS=zipkin
警告

注意:Zipkin默认不支持同时写入多个存储后端。如果需要此功能,可以通过自定义扩展或使用消息队列(如Kafka)实现。

实际应用场景

场景1:开发环境

  • 存储后端:内存存储。
  • 原因:简单快捷,无需额外依赖。

场景2:中小规模生产环境

  • 存储后端:MySQL。
  • 原因:关系型数据库易于维护,适合数据量较小的场景。

场景3:大规模生产环境

  • 存储后端:Elasticsearch或Cassandra。
  • 原因:高性能、高可用性,适合海量数据。

总结

Zipkin支持多种存储后端,你可以根据实际需求选择适合的方案:

  • 内存存储:开发和测试。
  • MySQL:小规模生产环境。
  • Elasticsearch/Cassandra:大规模生产环境。

附加资源

  1. Zipkin官方文档
  2. Elasticsearch配置指南
  3. Cassandra配置指南

练习

  1. 尝试在本地安装MySQL并配置Zipkin使用MySQL存储。
  2. 比较不同存储后端的性能差异(如插入1000条追踪数据的时间)。
  3. 探索如何通过Kafka实现多存储后端的同步写入。