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