“采用 ClickHouse 增强了我们的数据分析能力,高效且经济地支持了内部团队不断增长的需求。”
Frank Chen,Shopee OLAP 专家工程师
作为东南亚领先的电子商务平台,Shopee 每天处理数百万笔交易和海量数据。为了确保流畅的运营和一流的用户体验,了解系统性能并快速诊断问题至关重要。
四年前,Shopee 工程师 Frank Chen 和他的团队认识到他们快速增长的平台所带来的挑战。他们早些时候引入了 ClickHouse 作为 OLAP 数据库管理系统。在 ClickHouse 被广泛采用以满足各种业务需求之后,他们决定使用 ClickHouse 来实现一种称为分布式追踪的技术。从那时起,它已经支持了数百个旨在确保高性能和可靠性的内部项目,从而改变了 Shopee 的数据管理和系统可观测性方法。
Frank 说:“采用 ClickHouse 增强了我们的数据分析能力,高效且经济地支持了内部团队不断增长的需求。”
获得清晰度
在复杂的微服务架构中高效管理数据绝非易事。分布式追踪是一种通过监控和跟踪请求在系统中各个服务之间的传递过程来提供可见性的技术。这种可见性对于快速识别和解决性能瓶颈或错误,并确保流畅的运营至关重要。
对于 Shopee 而言,分布式追踪提供了数据如何在他们的电子商务平台中流动的深入视图。这些实时洞察使数百名内部用户能够精确定位延迟或故障发生的位置,做出明智的决策,并实施修复以增强平台的整体性能和可靠性。
日益增长的挑战
2020 年,Shopee 发展迅速,部分原因是 COVID-19 疫情。随着每日交易量激增,平台工程师面临着越来越多的关于延迟、故障和响应不一致的用户查询——如果不加以解决,这些问题可能会严重扰乱用户体验和运营效率。
数据工程团队认识到,Shopee 现有的数据管理解决方案不足以应对他们面临的挑战的规模和复杂性。了解根本原因需要详细的诊断,能够有效地管理海量数据和异步流程。他们决定开发更强大、可扩展的解决方案,以维持和提高他们的服务质量——该解决方案可以全面洞察系统性能,并帮助 Shopee 的工程师更有效地管理数据。
适合这项工作的工具
在寻找合适的解决方案时,Frank 和他的团队评估了多个数据库管理系统。他们之前依赖于 Druid、Hive 和 Presto 等数据库引擎;但虽然这些系统在某些领域具有优势,但在支持分布式追踪的细微需求方面存在特定的局限性和不足。
在引入 ClickHouse 作为 OLAP DBMS 并体验到它的优势后,他们决定进一步探索其潜力。广泛的测试和比较表明,ClickHouse 在三个关键领域优于 Elasticsearch 等其他解决方案:性能、兼容性和大规模运营的成本效益。
Frank 说:“ClickHouse 非常快,并且擅长处理高基数计算,提供快速的查询响应。与 Elasticsearch 不同,ClickHouse 支持 MySQL 兼容的 SQL 和 JDBC,降低了熟悉这些数据库的用户的学习曲线。并且它具有较低的硬件要求,优化了内存和磁盘消耗。”
ClickHouse 的开源性质也发挥了作用。它不仅符合 Shopee 的工程理念,而且还允许他们的团队修改和改进数据库以适应他们的特定需求。这种灵活性增加了 Shopee 工程师之间的社区意识和共同创新,帮助他们共同解决困难的数据处理问题。
实施 ClickHouse
实施涉及 Shopee 基础设施的多个组件,包括开发多个完全托管的 ClickHouse 服务,以确保 Shopee 工程师能够高效地处理数据和进行系统可观测性分析
-
ClickHouse Manager:简化资源分配和集群部署,确保每个服务都具有所需的计算能力和存储空间。
-
ClickHouse Gateway:充当所有传入查询的入口点,有效地将它们路由到适当的集群以进行精确和快速的处理。
-
ClickHouse Console:提供基于 Web 的界面来管理查询,允许工程师执行即席查询并轻松管理数据。
-
ClickHouse Monitoring:为 ClickHouse 基础设施提供实时监控和警报,包括分布式追踪,以跟踪数据流并快速解决性能问题。
Shopee 的 ClickHouse 基础设施的核心是数十个 ClickHouse 集群,包括针对不同数据处理需求优化的多种集群类型
- K8S 上的 ClickHouse MPP SSD:在 Kubernetes 环境中使用 SSD 存储上的大规模并行处理 (MPP) 来快速处理高优先级任务的数据。
- K8S 上的 ClickHouse MPP HDD:使用 HDD 存储来处理对时间不太敏感的任务,在不牺牲功能的情况下利用成本效益。
- K8S 上计算和存储分离的 ClickHouse:使用 ClickHouse 的零拷贝功能分离计算和存储资源,以实现可扩展、灵活的资源分配。Shopee 使用 Apache OZone 作为 S3 兼容的存储服务,利用其 HDFS 集成来实现高效的数据管理。
- ClickHouse 冷热分离存储:通过将数据分为频繁访问(热)和较少访问(冷)类型来优化存储,从而提高性能并降低成本。
实施 ClickHouse 是一个细致的过程,需要仔细的规划和执行。最终,对于 Shopee 的数百名内部用户来说,这是一个强大的系统,它不仅解决了短期需求,而且为未来的可扩展性奠定了坚实的基础。
分布式追踪的实际应用
Shopee 对 ClickHouse 的实施产生了巨大的影响。借助分布式追踪,工程团队可以实时监控和优化数据流,系统运营的可见性使他们能够快速识别和解决瓶颈。
以下是他们的做法
-
追踪和 Span 管理:Shopee 使用唯一的标识符来有效地监控查询。每个追踪由多个 span 组成,代表查询中不同的工作单元。通过管理这些追踪和 span,工程团队可以跟踪每个请求的生命周期,识别延迟或错误发生的位置和原因。
-
上下文传播:在不同的服务和线程之间维护追踪上下文至关重要。Shopee 确保在请求通过各个微服务时一致地传播追踪上下文。这种连续性可以全面了解整个请求路径,从而更容易查明问题。
-
数据存储和处理:Shopee 使用 ClickHouse 的系统表和物化视图来实现高效的数据处理。系统表存储内部状态和日志,而物化视图提供预先计算的结果以加快查询处理速度。这种设置确保数据不仅得到有效存储,而且可以随时用于实时分析。
Frank 说:“我们现在仅在 ClickHouse 服务器上使用 20 个 CPU 核心即可实现每秒高达 300 万行的摄取量,压缩比为 1:8,无需任何调优。对于存储在 SSD 上的数据,从一个 ClickHouse 实例上超过 300 亿行的数据集中搜索特定追踪 ID 的时间仅需几秒钟。”
真实的成功案例
分布式追踪帮助 Shopee 识别和解决各种挑战,从而显着提高了系统性能和可靠性。
1. 识别瓶颈
在一个实例中,Shopee 发现一个查询的响应时间为 118 秒。使用分布式追踪,他们确定大部分时间都花在了 ClickHouse Gateway 端而不是 ClickHouse 端。进一步调查显示,客户端向 ClickHouse 发送数据的速度非常慢。通过在客户端启用数据压缩,他们能够减小有效负载大小并加快响应时间。
2. 解决网络问题
Shopee 收到了关于查询响应不一致的反馈。在一个示例中,追踪日志帮助他们识别出由于 Kubernetes 中的 DNS 缓存问题,请求被错误路由。修复 DNS 缓存问题确保了查询被正确路由,从而维护了数据处理管道的完整性和准确性。
3. 理解分布式 Join
分布式 Join 的复杂性会给系统资源带来压力。分布式追踪提供了如何执行这些 Join 的清晰可视化。通过调整设置,Shopee 的工程师能够简化此过程,发出更少的子查询并提高整体性能。这种优化使查询更简单、更高效。
4. 诊断查询超时
分布式追踪帮助 Shopee 团队查找并修复了 DDL 超时问题。例如,追踪日志显示,一台数据库服务器处理查询的时间比其他服务器长。进一步调查发现,延迟是由该特定节点上的阻塞 DDL 操作引起的。解决此瓶颈确保了更顺畅、更可靠的数据操作。
5. 排除物化视图故障
用户有时报告说,他们的 INSERT 查询失败,并出现看似与目标表无关的错误。Shopee 的分布式追踪日志显示,这些故障实际上是由物化视图中的问题引起的。通过诊断和修复这些问题,Shopee 使数据插入过程更加可靠和高效。
Frank 说:“ClickHouse 是一个超级快速且功能强大的分析数据库,可以降低用户的硬件成本。它用途广泛,从欺诈检测和用户行为分析到日志和指标存储。在许多情况下,它甚至可以取代 MySQL 等传统数据库或 Elasticsearch 等搜索引擎。”
为扩展而构建
随着 Shopee 继续扩展其电子商务平台,为东南亚近十几个国家和地区的数百万笔交易提供支持,分布式追踪使其工程师能够掌握性能问题并确保流畅的运营。ClickHouse 对于公司的数据管理和整体业务成功至关重要,使 Shopee 能够在不影响质量的情况下处理更多交易。
Frank 说:“四年前,我们选择 ClickHouse 是因为它的速度和性能。从那时起,它已成为我们所有数据应用程序的支柱。”
Shopee 与 ClickHouse 的旅程才刚刚开始。凭借 ClickHouse 的开源数据库作为其数据管理系统的核心,Shopee 完全有能力继续扩展和创新。要了解有关 ClickHouse 如何提升贵公司数据能力的更多信息,下载 ClickHouse 并加入我们不断壮大的开发者社区。
演示文稿的幻灯片可以在此处查看。