数据架构:数据冷热分离实践思考

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 本篇分析了几个冷热分离的实现案例,并整理了一些问题和解决方案。通过mysql 和 Es的两种冷热分离实现,阐述了不同存储方案上冷热分离实现上的共同点和差别。回归本源,设计最终还是依赖于具体业务需求。后续还需要在实践中,通过足够的业务场景和数据量级支撑,来继续验证方案的可行性和潜在问题,不断进行完善升级。

系列文章:

数据架构:概念与冷热分离

一 概述

   上一篇文章数据架构:概念与冷热分离中介绍了数据架构的概念和意义。并抛出了数据冷热分离的问题。事实上,这并不是新的概念,各公司在很早之前就已经开始了落地实践。微软云有冷热blob存储,阿里云有ots,都是为了在云服务层面提供冷热存储的解决方案。尽管有这些工具,如果很好地实现冷热分离,仍然是值得仔细思考和玩味的。

二 冷热分离核心问题与案例

2.1 关键问题

   回归话题,无论我们怎样选择冷热存储方案,首先,都还是需要一种存储介质。哪怕是云上的存储方案。冷热分离的具体实现,也会与存储介质的选择直接相关。举个栗子,数据从热存储到冷存储的迁移,最简单的来看,需要实现2个步骤:1、数据写入冷存储;2、热存储数据删除;而删除动作就与数据库的选择有很大关系。

2.1.1 大数据删除

   大量的数据插入和数据删除,尤其是在有索引的大表上,这样的操作会很大程度地影响数据库读写性能;而且删除后,未必会立即释放旧数据所占的空间,在某些db下,甚至可能需要做一次数据整理才能真正释放。这会导致一个很严重的问题,如果不做整理操作,那么相当于这些旧数据物理上还占据着空间,最终必然也会导致磁盘空间不足。

2.1.2 查询包含热数据也有冷数据

   这点可以理解为中间层路由的实现。什么时候查询热数据,什么时候查询冷数据,需要有一个规则层来控制。理想的情况,冷热数据都是分别查询,而且冷数据查询的频率(在整体查询中的比例)低一个或多个数量级,这样的分离说明是比较合理的。

2.2 几个案例

   接下来,我们通过可以搜索到的几个文章中的案例,来了解不同存储方案下的冷热分离实现,并试图分析其中合理和不合理的地方。

2.2.1 mysql

2.2.1.1 案例概述

[数据库]-----记一次mysql分库的操作(冷热分离)

   案例中是采用数据分库的方式实现。也就是说,建立了生产库 和 历史库两个数据库,生产库存放热数据,历史库放冷数据。文中描述的架构如下图所示:

2.2.1.2 数据迁移

   通常,迁移我们会采用定时任务的方式实现。也就是说,对于冷热数据的分割,会倾向于使用“天”的粒度。当然,根据实际的业务需求也可以进一步细分。

   为了不影响常规业务,就需要在业务低谷时期执行这些非核心业务动作,所以会在每天凌晨执行迁移动作,在新的业务请求高峰到来之前完成迁移,降低影响。在任务的具体实现上,还需要特别注意,某些任务可能会依赖数据迁移的完成,这样就意味着存在任务之间的依赖关系,以及失败重试等等。并且为了确保数据的完整性和一致性,最好对迁移数据进行一致性校验,避免数据丢失和错误数据的产生。

2.2.1.3 多数据源的查询

   这里的多数据源,就是指既有热数据,也有冷数据的查询。当然前面我们有过描述,理想情况下不应该有这样的情况存在,但在真实业务中很可能是不可避免的。这就要求:1)系统提供跨热、冷数据库的查询支持;2)冷数据查询性能明显低于热数据库的情况下,尽可能减小查询耗时。如果可能,最好能实现降低长尾耗时查询的比例。为了达到这个效果,就需要结合缓存策略或在功能上限制查询模式和查询范围,并在具体业务中做好引导和取舍。

2.2.2 Elasticsearch

Elasticsearch冷热分离原理和实践

2.2.2.1 节点异构

   与mysql的冷热部署类似,这里的es也采用双集群模式,但强调出了节点异构。(其实这是必要环节和前提,简单来说,热库侧重实时业务读写能力,要求保障性能,空间足以存储热数据即可;而冷库则需要保障数据存储量级和一致,能够接受牺牲一定程度的读写性能,因为要存储大量历史数据,所以相比热裤,空间需要大很多。)

   “部分是高性能的节点用于存储热点数据,部分是性能相对差些的大容量节点用于存储冷数据,却可以一方面保证热数据的性能,另一方面保证冷数据的存储,降低存储成本,这也是Elasticsearch冷热分离架构的基本思想”。

2.2.2.2 节点指定冷热属性

   在elasticsearch.yml文件中增加配置的方式,为节点打上标签。

node.attr.{attribute}: {value}

其中attribute为用户自定义的任意标签名,value为该节点对应的该标签的值,例如对于冷热分离,可以使用如下设置

node.attr.temperature: hot //热节点
node.attr.temperature: warm //冷节点

2.2.2.3 冷热索引设置

    冷热数据做了分离,前面也提到二者适用于不同场景,那么在数据的索引上,也可以针对使用场景进行曲分设计,不必保持一致。

   注意冷热数据与数据库主从的区别,冷热数据库会要求表/集合的结构一致,但索引可以有所区别。

2.2.2.4 索引生命周期

   Elasticsearch从6.6版本开始提供索引生命周期管理功能,索引生命周期管理可以通过API或者kibana界面配置。这一特性使得我们可以使用索引生命周期管理结合冷热分离架构实现索引数据的动态管理。

这里引述Elasticsearch冷热分离原理和实践中的描述:

索引的生命周期被分为:Hot phrase,Warm phase, Cold phase,Delete phrase四个阶段

  • Hot phrase: 该阶段可以根据索引的文档数,大小,时长决定是否调用rollover API来滚动索引,详情可以参考[indices-rollover-index],因与本文关系不大不再详细赘述。
  • Warm phrase: 当一个索引在Hot phrase被roll over后便会进入Warm phrase,进入该阶段的索引会被设置为read-only, 用户可以为这个索引设置要使用的attribute, 如对于冷热分离策略,这里可以选择temperature: warm属性。另外还可以对索引进行forceMerge, shrink等操作,这两个操作具体可以参考官方文档。

  • Cold phrase: 可以设置当索引rollover一段时间后进入cold阶段,这个阶段也可以设置一个属性。从冷热分离架构可以看出冷热属性是具备扩展性的,不仅可以指定hot, warm, 也可以扩展增加hot, warm, cold, freeze等多个冷热属性。如果想使用三层的冷热分离的话这里可以指定为temperature: cold, 此处还支持对索引的freeze操作,详情参考官方文档。
  • Delete phrase: 可以设置索引rollover一段时间后进入delete阶段,进入该阶段的索引会自动被删除。

总结

   本篇分析了几个冷热分离的实现案例,并整理了一些问题和解决方案。通过mysql 和 Es的两种冷热分离实现,阐述了不同存储方案上冷热分离实现上的共同点和差别。回归本源,设计最终还是依赖于具体业务需求。后续还需要在实践中,通过足够的业务场景和数据量级支撑,来继续验证方案的可行性和潜在问题,不断进行完善升级。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
11天前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
60 16
|
12天前
|
存储 消息中间件 小程序
转转平台IM系统架构设计与实践(一):整体架构设计
本文描述了转转IM为整个平台提供的支撑能力,给出了系统的整体架构设计,分析了系统架构的特性。
55 10
|
1月前
|
弹性计算 Java 关系型数据库
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
|
19天前
|
负载均衡 Serverless 持续交付
云端问道9期实践教学-省心省钱的云上Serverless高可用架构
详细介绍了云上Serverless高可用架构的一键部署流程
46 10
|
19天前
|
存储 人工智能 运维
面向AI的服务器计算软硬件架构实践和创新
阿里云在新一代通用计算服务器设计中,针对处理器核心数迅速增长(2024年超100核)、超多核心带来的业务和硬件挑战、网络IO与CPU性能增速不匹配、服务器物理机型复杂等问题,推出了磐久F系列通用计算服务器。该系列服务器采用单路设计减少爆炸半径,优化散热支持600瓦TDP,并实现CIPU节点比例灵活配比及部件模块化可插拔设计,提升运维效率和客户响应速度。此外,还介绍了面向AI的服务器架构挑战与软硬件结合创新,包括内存墙问题、板级工程能力挑战以及AI Infra 2.0服务器的开放架构特点。最后,探讨了大模型高效推理中的显存优化和量化压缩技术,旨在降低部署成本并提高系统效率。
|
21天前
|
运维 监控 安全
天财商龙:云上卓越架构治理实践
天财商龙成立于1998年,专注于为餐饮企业提供信息化解决方案,涵盖点餐、收银、供应链和会员系统等。自2013年起逐步实现业务上云,与阿里云合作至今已十年。通过采用阿里云的WA体系,公司在账号管理、安全保障、监控体系和成本管控等方面进行了全面优化,提升了业务稳定性与安全性,并实现了显著的成本节约。未来,公司将持续探索智能化和全球化发展,进一步提升餐饮行业的数字化水平。
|
21天前
|
运维 安全 架构师
架构师工具箱:Well-Architected云治理提效实践
本次分享基于阿里云Well-Architected Framework的最佳实践案例,涵盖企业从上云到优化的全过程。安畅作为国内领先的云管理服务提供商(Cloud MSP),拥有800多名员工,其中70%为技术工程师,为企业提供架构安全、数据智能等技术服务。内容包括Landing Zone与Well-Architected的关系、企业云治理现状及需求分析,重点探讨了安全合规、成本优化、资源稳定性和效率提升等方面的最佳实践,并通过具体客户案例展示了如何通过自动化工具和定制化解决方案帮助企业提升云上业务价值。
|
1月前
|
消息中间件 运维 安全
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
50 1
|
1月前
|
消息中间件 运维 API
后端开发中的微服务架构实践####
本文深入探讨了微服务架构在后端开发中的应用,从其定义、优势到实际案例分析,全面解析了如何有效实施微服务以提升系统的可维护性、扩展性和灵活性。不同于传统摘要的概述性质,本摘要旨在激发读者对微服务架构深度探索的兴趣,通过提出问题而非直接给出答案的方式,引导读者深入
49 1
|
1月前
|
Cloud Native API 持续交付
云原生架构下的微服务治理策略与实践####
本文旨在探讨云原生环境下微服务架构的治理策略,通过分析当前面临的挑战,提出一系列实用的解决方案。我们将深入讨论如何利用容器化、服务网格(Service Mesh)等先进技术手段,提升微服务系统的可管理性、可扩展性和容错能力。此外,还将分享一些来自一线项目的经验教训,帮助读者更好地理解和应用这些理论到实际工作中去。 ####
53 0

热门文章

最新文章