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

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

  • 一、背景
  • 二、数据存储层技术选型
    • 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.mzph.cn/pingmian/48328.shtml

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

相关文章

大语言模型-Transformer-Attention Is All You Need

一、背景信息&#xff1a; Transformer是一种由谷歌在2017年提出的深度学习模型。 主要用于自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;特别是序列到序列&#xff08;Sequence-to-Sequence&#xff09;的学习问题&#xff0c;如机器翻译、文本生成等。Transfor…

【UE5】可反射的射线检测

目录 效果 步骤 一、准备射线 二、生成第一次反射后的射线 三、多次反射 四、通过循环进行多次反射 效果 步骤 一、准备射线 1. 新建一个工程&#xff0c;添加一个俯视角游戏资源包 2. 双击打开俯视角游戏地图 删除大纲中的后期处理体积使得地图可以正常显示 3. 添加一…

SAP批量报工源码

SAP批量报工源码,适用于工序少的情景。 *&---------------------------------------------------------------------* *& Report ZPPR106 *& *&---------------------------------------------------------------------* *& *& *&--------------…

网络编程中的TCP和UDP

什么是TCP协议 TCP( Transmission control protocol )即传输控制协议&#xff0c;是一种面向连接、可靠的数据传输协议&#xff0c;它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。 面向连接 &#xff1a;数据传输之前客户端和服务器端必须建立连…

Aouth2单点登录

信息来源B站 不改bug早点睡&#xff0c;北冥 时序图 -----------------------------总结描述 总体流程 浏览器 - 系统1 - 系统2 - 认证中心(SSO) 访问系统1 浏览器&#xff0c;访问系统1&#xff0c;询问认证中心是否登录 未登录&#xff0c;重定向一个登录页面返回给浏…

(二)原生js案例之数码时钟计时

原生js实现的数字时间上下切换显示时间的效果&#xff0c;有参考相关设计&#xff0c;思路比较难&#xff0c;代码其实很简单 效果 代码实现 必要的样式 <style>* {padding: 0;margin: 0;}.content{/* text-align: center; */display: flex;align-items: center;justif…

光盘防水嘛 ? DVD+R 刻录光盘泡水实验

首发日期 2024-07-20, 以下为原文内容: 同志们好, 欢迎来到 胖喵穷人实验室 ! 这里专注于 低成本, 低难度, 低风险 的 “三低” 小实验. 胖喵穷人实验室 (PM-PLab-E)正式名称: 紫腹巨蚊 (Toxorhynchites gravelyi) 系列穷人 (Poor people) 实验室风险警告: 低风险并不是零风险…

人工智能与语音识别:技术进步与应用前景

引言 人工智能&#xff08;AI&#xff09;作为当今科技进步的核心驱动力&#xff0c;正在各个领域展现其变革力量。其中&#xff0c;语音识别技术作为人工智能的重要应用之一&#xff0c;已经深入到我们的日常生活和工作中。从智能助手如Siri、Google Assistant&#xff0c;到智…

kubernetes k8s Deployment 控制器配置管理 k8s 红蓝部署 金丝雀发布

目录 1、Deployment控制器&#xff1a;概念、原理解读 1.1 Deployment概述 1.2 Deployment工作原理&#xff1a;如何管理rs和Pod&#xff1f; 2、Deployment资源清单文件编写技巧 3、Deployment使用案例&#xff1a;创建一个web站点 4、Deployment管理pod&#xff1a;扩…

科研绘图系列:R语言雨云图(Raincloud plot)

介绍 雨云图(Raincloud plot)是一种数据可视化工具,它结合了多种数据展示方式,旨在提供对数据集的全面了解。雨云图通常包括以下几个部分: 密度图(Density plot):表示数据的分布情况,密度图的曲线可以展示数据在不同数值区间的密度。箱线图(Box plot):显示数据的中…

模型剪枝入门

一、定义 1.定义 2. 案例1 3. 全局剪枝案例 4. 全局剪枝案例 5. 自定义剪枝 6. 特定网络剪枝 7. 多参数模块剪枝 8. torch.nn.utils.prune 解读 二、实现 定义 接口&#xff1a; import torch.nn.utils.prune as prune案例1 import torch.nn as nn import torch.nn.utils.…

全部由1组成的子矩形的数量

题目描述&#xff1a; 给定一个二维数组matrix&#xff0c;其中的值不是0就是1&#xff0c;返回全部由1组成的子矩阵的数量。 way&#xff1a; 假设我们遍历矩形的每一行&#xff0c;以当前遍历到的行作为地基&#xff0c;去看这一行的直方图&#xff08;直方图介绍 ->直方…

10.3.3 QGIS点类型注释(Annotation)的应用与二次开发实现

文章目录 前言注释(Annotation)图层QGis中的注释(Annotation)图层二次开发实现线段类型注释(Annotation)点类型Item 总结 前言 介绍注释(Annotation)图层在QGis中的使用以及二次开发的实现说明&#xff1a;文章中的示例代码均来自开源项目qgis_cpp_api_apps 注释(Annotation)…

【Unity实战100例】Unity声音可视化多种显示效果

目录 一、技术背景 二、界面搭建 三、 实现 UIAudioVisualizer 基类 四、实现 AudioSampler 类 五、实现 IAudioSample 接口 六、实现MusicAudioVisualizer 七、实现 MicrophoneAudioManager 类 八、实现 MicrophoneAudioVisualizer 类 九、源码下载 Unity声音可视化四…

代码随想录算法训练营第九天 |LeetCode151.翻转字符串里的单词 卡码网:55.右旋转字符串

代码随想录算法训练营 Day 9 代码随想录算法训练营第九天 |LeetCode151.翻转字符串里的单词 卡码网&#xff1a;55.右旋转字符串 目录 代码随想录算法训练营前言LeetCode151.翻转字符串里的单词卡码网&#xff1a;55.右旋转字符串 一、LeetCode151.翻转字符串里的单词1.题目链…

laravel为Model设置全局作用域

如果一个项目中存在这么一个sql条件在任何情况下或大多数情况都会被使用&#xff0c;同时很容易被开发者遗忘&#xff0c;那么就非常适用于今天要提到的这个功能&#xff0c;Eloquent\Model的全局作用域。 首先看一个示例&#xff0c;有个数据表&#xff0c;结构如下&#xff1…

一款国外开发的高质量WordPress下载站模板主题

5play下载站是由国外站长开发的一款WordPress主题&#xff0c;主题简约大方&#xff0c;为v1.8版本&#xff0c; 该主题模板中包含了上千个应用&#xff0c;登录后台以后只需要简单的三个步骤就可以轻松发布apk文章&#xff0c; 我们只需要在WordPress后台中导入该主题就可以…

大模型应用如何点燃?

▎****尽管在中国&#xff0c;关于大模型的商业模式的讨论尚显早期&#xff0c;但智能体&#xff0c;尤其是专业智能体&#xff0c;蕴藏着巨大的潜力。 ChatGPT 还没有颠覆世界。 身处“第三次信息革命”&#xff0c;很多人被浓烈的FOMO&#xff08;Fear of Missing Out&…

昇思25天学习打卡营第12天 | ResNet50图像分类

ResNet50在CIFAR-10数据集上的图像分类实践 在深入学习和实践使用ResNet50进行CIFAR-10数据集上的图像分类后&#xff0c;我对深度学习模型的构建、训练和优化有了更深刻的理解。本次学习经历涵盖了从理论探索到实际应用的全过程&#xff0c;以下是我的主要收获和反思。 1. 理…

(南京观海微电子)——电感的电路原理及应用区别

电感 电感是导线内通过交流电流时&#xff0c;在导线的内部及其周围产生交变磁通&#xff0c;导线的磁通量与生产此磁通的电流之比。 当电感中通过直流电流时&#xff0c;其周围只呈现固定的磁力线&#xff0c;不随时间而变化&#xff1b;可是当在线圈中通过交流电流时&am…