生产环境应该使用哪个 ClickHouse 版本?
简介
首先,让我们讨论一下为什么人们首先会问这个问题。
主要有两个原因
- ClickHouse 的开发速度非常快,通常每年有 10 多个稳定版本发布。这使得有广泛的版本可供选择,这不是一个简单的选择。
- 有些用户希望避免花费时间弄清楚哪个版本最适合他们的用例,而只是遵循别人的建议。
第二个原因更根本,所以我们将从这个原因开始,然后再回到浏览各种 ClickHouse 版本。
您推荐哪个 ClickHouse 版本?
聘请顾问或信任一些知名专家来摆脱对生产环境的责任是很诱人的。您安装了其他人推荐的特定 ClickHouse 版本;如果出现问题 - 这不是您的错,而是别人的错。这种推理方式是一个很大的陷阱。没有人比您更了解您公司生产环境中发生的事情。
那么,您如何正确选择要升级到的 ClickHouse 版本?或者您如何选择您的第一个 ClickHouse 版本?首先,您需要投入精力来建立一个真实的预生产环境。在理想的世界中,它可以是一个完全相同的影子副本,但这通常很昂贵。
以下是一些关键点,可以在不高成本的情况下获得预生产环境的合理保真度
- 预生产环境需要运行与您计划在生产环境中运行的查询尽可能接近的集合
- 不要使其成为只读的,并带有一些冻结数据。
- 不要使其成为只写的,只复制数据而不构建一些典型的报告。
- 不要在应用模式迁移时将其清除。
- 使用真实生产数据和查询的样本。尝试选择仍然具有代表性的样本,并使
SELECT
查询返回合理的结果。如果您的数据敏感且内部策略不允许其离开生产环境,请使用混淆处理。 - 确保您的监控和警报软件覆盖预生产环境的方式与生产环境相同。
- 如果您的生产环境跨越多个数据中心或区域,请使您的预生产环境也这样做。
- 如果您的生产环境使用复制、分布式表和级联物化视图等复杂功能,请确保它们在预生产环境中配置相似。
- 在预生产环境中使用大致相同数量的服务器或 VM 但尺寸较小,或者使用更少的服务器或 VM 但尺寸相同之间存在权衡。第一种选择可能会捕获额外的网络相关问题,而后者更易于管理。
第二个需要投入的领域是 自动化测试基础设施。不要假设某种查询成功执行一次,它就会永远继续这样做。有一些单元测试模拟 ClickHouse 是可以的,但请确保您的产品有一套合理的自动化测试,这些测试针对真实的 ClickHouse 运行,并检查所有重要的用例是否仍然按预期工作。
更进一步的做法可能是将这些自动化测试贡献给 ClickHouse 的开源测试基础设施,这些基础设施在其日常开发中持续使用。当然,学习 如何运行它,然后如何使您的测试适应此框架肯定会花费一些额外的时间和精力,但通过确保 ClickHouse 版本在宣布稳定时已经针对它们进行了测试,而不是在事后反复浪费时间报告问题,然后等待错误修复被实现、反向移植和发布,这将是值得的。一些公司甚至将这种对基础设施的测试贡献作为其内部政策(在 Google 被称为 Beyonce's Rule)。
当您拥有预生产环境和测试基础设施后,选择最佳版本就很简单了
- 例行针对新的 ClickHouse 版本运行您的自动化测试。您甚至可以对标记为
testing
的 ClickHouse 版本执行此操作,但不建议继续进行后续步骤。 - 将通过测试的 ClickHouse 版本部署到预生产环境,并检查所有进程是否按预期运行。
- 将您发现的任何问题报告给 ClickHouse GitHub Issues。
- 如果没有重大问题,那么开始将 ClickHouse 版本部署到您的生产环境应该是安全的。投资于逐步发布自动化,实施类似于 金丝雀发布 或 蓝绿部署 的方法可能会进一步降低生产环境中出现问题的风险。
正如您可能已经注意到的,上述方法中没有任何特定于 ClickHouse 的内容 - 如果人们认真对待他们的生产环境,他们会对他们依赖的任何基础设施都这样做。
如何在 ClickHouse 版本之间选择?
如果您查看 ClickHouse 包仓库的内容,您会看到两种类型的包
stable
lts
(长期支持)
以下是如何在它们之间进行选择的一些指导
stable
是我们默认推荐的包类型。它们大约每月发布一次(因此以合理的延迟提供新功能),并且最新的三个稳定版本在诊断和错误修复的反向移植方面得到支持。lts
每年发布两次,并在首次发布后的一年内获得支持。在以下情况下,您可能更喜欢它们而不是stable
- 您的公司有一些内部政策,不允许频繁升级或使用非 LTS 软件。
- 您在一些辅助产品中使用 ClickHouse,这些产品要么不需要任何复杂的 ClickHouse 功能,要么没有足够的资源来保持更新。
许多最初认为 lts
是正确选择的团队,由于某些对其产品很重要的最新功能,最终还是切换到 stable
。
升级 ClickHouse 时要记住的另一件事:我们始终关注跨版本的兼容性,但有时保持兼容性是不合理的,并且一些细微的细节可能会发生变化。因此,请务必在升级前查看更新日志,以查看是否有关于向后不兼容更改的任何说明。