项目收获总结--大数据量存储架构设计方案

news2024/12/23 3:44:46

项目收获总结--大数据量存储架构设计方案

  • 一、背景
  • 二、数据存储层技术选型
    • 2.1 MySQL
    • 2.2 MongoDB
    • 2.3 HBase
    • 2.4 HBase+ElasticSearch
  • 三、HBase+ElasticSearch基本原理
    • 3.1 前置考虑
    • 3.2 HBase+ElasticSearch优点
    • 3.3 HBase+ElasticSearch缺点
  • 四、HBase+ElasticSearch数据一致性架构
    • 4.1 HBase + WAL + ES 实现数据一致性
      • 4.1.1 实现方案
      • 4.1.2 缺陷
    • 4.2 HBase + kafka+ ES 实现数据一致性
  • 五、HBase集群间数据同步replication

一、背景

在这里插入图片描述

公司的业务数据规模庞大,经过多年的业务积累和业务迭代,已经达到百亿级,各个业务线错综复杂,接口调用杂乱无章,而最近的项目是做智能营销推荐系统,需要海量数据计算画像和实时计算做智能产品推荐,但是数据分布和来源非常杂乱,出现A向B要数据,B向C请求接口,C向A需求服务,各个业务线互相依赖的情况。由于项目需要设计一套数据中心来实现资源整合、数据的整合、形成统一的海量数据服务的效率提升方案。

二、数据存储层技术选型

解决大数据量的存储,并能实现大数据量秒级查询, 首先要进行数据存储层技术选型.,考虑四种方案。

2.1 MySQL

Mysql数据量到千万级别时,响应时间提高很多和吞吐量下降很多,需要分库分表或者分片。属于CA,同时满足一致性(C,Consistency)、可用性(A, Availability)。
不推荐MySQL。

2.2 MongoDB

MongoDB用于存储非结构化数据,极其擅长存储json格式的数据或一些很难建索引的文本数据。
MongoDB存储量约10亿级,数据量再大就需要另外分库,否则性能快速下降。
即是:MongoDB更擅长存储需要在线访问的NOSQL文档,并且通过索引,更善于做查询,更像传统的关系型数据库,存储能力弱。MongoDB属于CP,同时满足一致性(C,Consistency)、分区容错性(P,Partition Tolerance)。
而很多公司都不选用MongoDB因为一旦数据量过大,再去改结构很复杂。比如京东架构就把MongoDB用MySQL+Redis替代

2.3 HBase

构建在HDFS之上的分布式、面向列的NOSQL存储系统,可进行实时大规模数据集的读写操作,存储量可达百亿及以上,且对写入效率,hbase由于只维护一个主键,写入效率要比MongoDB这种要维护所有索引的数据库快得多;再考虑服务器的数量上,HBase占用两台机器能完成的事情,MongoDB要占用更多机器。总之现在很多公司都选用HBASE,更偏向非关系型数据库,扩展储存能力强。

但HBase的语法非常固化,擅长rowkey的快速查询,但不擅长模糊匹配查询(前模糊或全模糊),即便在HBase上装载phoneix,在处理复杂查询时,依旧改观不大。

2.4 HBase+ElasticSearch

考虑到若最开始数据存储在HBase上,当业务越来越复杂,数据量越来越大时,使用HBase构建复杂的查询很难实现,甚至导致很多指标无法完成,决定使用ElasticSearch架构在HBase之上。
海量的数据存储使用HBase,数据的即席查询(快速检索)使用ElasticSearch。架构如图:
在这里插入图片描述

三、HBase+ElasticSearch基本原理

将Elasticsearch的DOC ID和Hbase的rowkey相关联。
写数流程:数据接入时,创建统一且全局唯一的ID, 既当Elasticsearch的DOC ID, 也当Hbase的rowkey,数据先写入 HBase,再发送Kafka 消息, 异步写入ES。
取数流程:ES先根据条件查询到分页数据,或者是list里面封装的是那个所有实体类、然后遍历得到id(即拿到rowkey),再去查HBase抽取数据,然后封装Entity,最后返回List。

3.1 前置考虑

一批数据在ElasticSearch中构建索引的时候,针对每一个字段要分析是否存储和是否构建索引。这个需要根据元数据进行考虑和控制

3.2 HBase+ElasticSearch优点

将两个组件各自的优势组合起来:

  • 发挥Elasticsearch全文检索的优势,能快速根据关键字检索出相关度最高的结果;
  • 减少Elasticsearch的存储压力,这种场景下不需要存储检索无关的内容,甚至可以禁用_source,节约一半的存储空间,同时提升最少30%的写入速度;
  • 避免Elasticsearch大数据量下查询返回慢的问题,大数据量下HBase的抽取速度明显优于Elasticsearch;
  • HBase支持动态列,ES也支持动态列,ES可以做HBase的外置索引,整合很融洽。

3.3 HBase+ElasticSearch缺点

(1)组件间存在时效不一致问题

ElasticSearch的入库速度肯相对而言要快于HBase,这需要业务容忍一定的时效性,对业务的要求会比较高。

(2)增加两个组件管理成本

四、HBase+ElasticSearch数据一致性架构

HBase 和 ES 的数据一致性,有两种方案:

HBase + WAL + ES
HBase + Kafka + ES

4.1 HBase + WAL + ES 实现数据一致性

WAL(Write-Ahead Log)预写日志是一个保险机制。在HBase 将数据写入Memstore前就先写入WAL,若发生故障,Memstore内存存储得数据丢失后,也可通过WAL将丢失的数据恢复。

4.1.1 实现方案

设置 HBase 的 WAL 日志位置: 在 HBase 的配置文件 hbase-site.xml 中配置 WAL 日志路径。

<property>
  <name>hbase.regionserver.hlog.dir</name>
  <value>/hbase/wal</value>
</property>

编写 WAL 日志解析服务: 编写一个独立的服务,定期读取 WAL 日志文件,解析其中的写操作,并同步到 Elasticsearch。
同步到 Elasticsearch:在解析服务中,将提取的数据变更信息写入到 Elasticsearch。

4.1.2 缺陷

WAL层不太好控制和监控,
ES消费WAL的存在效率问题

4.2 HBase + kafka+ ES 实现数据一致性

在数据写完HBase之后,即对外响应Success,并异步将数据推至Kafak队列中等待ES去二次消费;写入ES失败则对外抛出异常,要保证写入HBase要么成功,要么失败。
在ES消费层,可以动态指定消费线程数量。当Kafka Lag堆积超过一定阈值(阈值可进行Group级调节和监控),会进行警报,并动态调整消费线程数。只保证数据最终一致性。
当数据写入HBase成功之后,会对写Kafka和写ES进行链路追踪,任何一个环节出现写入失败,就将Failed Key存入Redis,对于失败的数据,开启定时调度线程去扫描这些Key并进行自动回补索引。
回补方式是:到HBase中拿最新的数据再次写入队列中去。
若再次失败,再把这些Key存入Redis,再通过定时调度线程去扫描这些再次失败得数据,若有数据就认为清理。流程图如下:
在这里插入图片描述

五、HBase集群间数据同步replication

正常而言,中小型公司一个HBase应当够用,若HBase需要集群,则有数据同步得需要。
HBase 的复制机制基于 WAL(Write-Ahead Log)。当数据写入到主集群(Master Cluster)时,写操作首先被记录到 WAL 中,然后这些 WAL 日志被传输到从集群(Slave Cluster),从集群再根据这些日志进行数据重放,从而实现数据同步。
HBase中的Replication指的是主备集群间的复制,用于将主集群的写入记录复制到备集群。HBase目前共支持3种Replication:

异步Replication
串行Replication
同步Replication

我采用的是第一种:异步Replication
架构图:
在这里插入图片描述

HBase的replication是以Column Family(列族)为单位的,每个Column Family都可以设置是否进行replication。
一个Master对应3个Slave,Master上每个RegionServer都有一份HLog,在开启Replication的情况下,每个RegionServer都会开启一个线程用于读取该RegionServer上的HLog,并且发送到各个Slave,Zookeeper用于保存当前已经发送的HLog的位置。
Master与Slave之间采用异步通信的方式,保障Master上的性能不会受到Slave的影响。
用Zookeeper保存已经发送HLog的位置,主要考虑在Slave复制过程中如果出现问题后重新建立复制,可以找到上次复制的位置。
在这里插入图片描述
HBase Replication步骤:

1. HBase Client向Master写入数据
2. 对应RegionServer写完HLog后返回Client请求
3. 同时replication线程轮询HLog发现有新的数据,发送给Slave
4. Slave处理完数据后返回给Master
5. Master收到Slave的返回信息,在Zookeeper中标记已经发送到Slave的HLog位置

PS:在进行replication时,Master与Slave的配置并不一定相同,比如Master上可以有3台RegionServer,Slave上并不一定是3台,Slave上的RegionServer数量可以不一样,数据如何分布这个HBase内部会处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1937836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

A Survey on Multimodal Large Language Models综述

论文题目:A Survey on Multimodal Large Language Models 论文地址:https://arxiv.org/pdf/2306.13549 话题:多模态LLMs综述 MLLMs Paper: https://github.com/BradyFU/Awesome-Multimodal-Large-Language-Models 1. 摘要 近期,以GPT-4V为代表的跨模态大型语言模型(MLLM…

vue3前端开发-小兔鲜项目-人气推荐栏目的前端渲染

vue3前端开发-小兔鲜项目-人气推荐栏目的前端渲染&#xff01;今天和大家分享一下&#xff0c;人气推荐栏目的前端页面如何渲染内容。 经历过上一次的&#xff0c;新鲜好物的栏目渲染之后&#xff0c;我们已经熟练了&#xff0c;vue3的接口调用&#xff0c;数据渲染到页面中的整…

Zabbix监控介绍与部署

目 录 一、zabbix介绍和架构 1.1 zabbix介绍 1.2 为什么需要监控 1.3 需要监控什么 二、zabbix使用场景与系统概述 2.1 zabbix的功能 2.2 zabbix架构 2.3 Zabbix术语 三、编译安装zabbix 3.1 安装依赖环境 3.2 建立管理用户 3.3 准备源码包&#xff0c;解压包 3.…

数据结构初阶-单链表

链表的结构非常多样&#xff0c;以下情况组合起来就有8种&#xff08;2 x 2 x 2&#xff09;链表结构&#xff1a; 而我们主要要熟悉的单链表与双向链表的全称分别为&#xff1a;不带头单向不循环链表&#xff0c;带头双向循环链表&#xff0c;当我们对这两种链表熟悉后&#x…

基于python深度学习遥感影像地物分类与目标识别、分割实践技术应用

目录 专题一、深度学习发展与机器学习 专题二、深度卷积网络基本原理 专题三、TensorFlow与Keras介绍与入门 专题四、PyTorch介绍与入门 专题五、卷积神经网络实践与遥感图像场景分类 专题六、深度学习与遥感图像检测 专题七、遥感图像检测案例 专题八、深度学习与遥感…

【教学类-68-01】20240720裙子涂色(女孩篇)

背景需求&#xff1a; 通义万相下载了简笔画裙子&#xff0c;制作成涂色卡给幼儿涂色、剪纸用。 代码展示 裙子简笔画图 6张 星火讯飞、通义万相、阿夏 2024年7月20日import os,time import shutil from docx import Document from docx.shared import Cm from PIL import Ima…

ApolloAndroid 使用笔记

由于业务需求的变化&#xff0c;需要使用 Graphql 作为客户端与服务端的交互查询框架&#xff0c;特此记录使用。 测试代码下载链接 一、导入引用以及规则示例 1、首先需要在我们需要使用的模块下面创建对应的src/main/graphql文件夹 2、将后台对应的服务生成的 xxx.graphql…

1个Xpath定位可以在Web页面查找到多个元素Selenium

1个Xpath定位可以在Web页面查找到多个元素Selenium//input[id\"transactionId\"] 打开Web页面&#xff0c; 点击F12可以看到压面 点击Ctrl F 可以点图如下图的输入框&#xff0c;输入xpath&#xff0c;看右侧可以找到3个对应的元素 点击Ctrl F 点击Ctrl F 点…

【C语言】逗号运算符详解 - 《不起眼的 “逗号”》

目录 C语言逗号运算符详解1. 逗号运算符的定义1.1 基本语法1.2 执行顺序 2. 逗号运算符的用法2.1 用于循环2.1.1 示例 2.2 用于表达式组合2.2.1 示例 3. 逗号运算符的应用场景3.1 宏定义3.1.1 示例 3.2 条件运算符中的应用3.2.1 示例 4. 总结5. 参考文献6. 结束语 C语言逗号运算…

通信网络机房服务器搬迁流程方案

数据中心机房搬迁是一项负责高难度的工程。整个搬迁过程充满挑战&#xff0c;伴随着各种风险。如何顺利的完成服务器的迁移&#xff0c;需要专业的数据中心服务商全程提供保障。友力科技&#xff08;广州&#xff09;有限公司&#xff0c;作为华南地区主流的数据中心服务商&…

Python代码,强化学习,深度学习

python代码编写&#xff0c;Python算法设计&#xff0c;强化学习优化&#xff0c;改进模型&#xff0c;训练模型&#xff0c;测试模型&#xff0c;可视化绘制&#xff0c;代编运行结果&#xff0c;交互多模型改进&#xff0c;预测模型&#xff0c;算法修改&#xff0c;Python包…

docker: No space left on device处理与迁移目录

简介&#xff1a;工作中当遇到Docker容器内部的磁盘空间已满。可能的原因包括日志文件过大、临时文件过多或者是Docker容器的存储卷已满&#xff0c;需要我们及时清理相关文件&#xff0c;并对docker的路径进行迁移。 历史攻略&#xff1a; centos&#xff1a;清理磁盘空间 …

三国杀十周年电脑版PC端模拟器游玩教程

三国杀十周年电脑版PC端模拟器游玩教程 《三国杀十周年》是一款以三国时代丰富的历史背景和独特的玩法手机策略游戏&#xff0c;在游戏中可自由选择扮演一位三国时期著名的人物&#xff0c;吸引了大量的历史爱好者和卡牌游戏玩家。如果大家想要轻松享受端游操作体验&#xff0…

【一刷《剑指Offer》】面试题 32:从 1 到 n 整数中 1 出现的次数

力扣对应题目链接&#xff1a;233. 数字 1 的个数 - 力扣&#xff08;LeetCode&#xff09; 牛客对应题目链接&#xff1a;整数中1出现的次数&#xff08;从1到n整数中1出现的次数&#xff09;_牛客题霸_牛客网 (nowcoder.com) 一、《剑指Offer》对应内容 二、分析题目 先随便…

Go语言之内存分配

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ Go 语言程序所管理的虚拟内存空间会被分为两部分&#xff1a;堆内…

牛客TOP101:单链表的排序

文章目录 1. 题目描述2. 解题思路3. 代码实现 1. 题目描述 2. 解题思路 按我们以往的排序算法来看&#xff0c;针对链表来说都是太不合适&#xff0c;因为很多都会出现指针前移后移&#xff0c;后移还好说&#xff0c;前移对于链表来说就太难了&#xff0c;而且大部分都是某一个…

HiDiff: 用于医学图像分割的混合扩散框架| 文献速递-基于深度学习的多模态数据分析与生存分析

Title 题目 HiDiff: Hybrid Diffusion Framework for Medical Image Segmentation HiDiff: 用于医学图像分割的混合扩散框架 01 文献速递介绍 医学图像分割是将医学图像数据转化为有意义的、空间结构化的信息&#xff0c;如器官和肿瘤。随着深度学习&#xff08;DL&#x…

primeflex教学笔记20240720, FastAPI+Vue3+PrimeVue前后端分离开发

练习 先实现基本的页面结构&#xff1a; 代码如下&#xff1a; <template><div class"flex p-3 bg-gray-100 gap-3"><div class"w-20rem h-12rem bg-indigo-200 flex justify-content-center align-items-center text-white text-5xl">…

RESTful API设计指南:构建高效、可扩展和易用的API

文章目录 引言一、RESTful API概述1.1 什么是RESTful API1.2 RESTful API的重要性 二、RESTful API的基本原则2.1 资源导向设计2.2 HTTP方法的正确使用 三、URL设计3.1 使用名词而非动词3.2 使用复数形式表示资源集合 四、请求和响应设计4.1 HTTP状态码4.2 响应格式4.2.1 响应实…

新能源汽车空调系统的四个工作过程

汽车空调制冷系统组成 1.汽车空调制冷系统组成 以R134a为制冷剂的汽车空调制冷系统主要包括压缩机、电磁离合器、冷凝器、 散热风扇、储液于燥器、膨胀阀、蒸发器、鼓风机、制冷连接管路、高低压检测 连接接头、调节与控制装置等组成。 汽车空调的四个过程 1压缩过程 传统车…