快手广告如何在保障跨IDC容灾能力的前提下,还能降低50%存储成本?

发布时间:2023-06-13 22:15:21 作者:巨宣网络 来源:juxuan.net 浏览量(147)

如何在保障跨IDC容灾能力的前提下,还能降低50%存储成本?

快手经历了10年的高速发展,存储了大量的视频数据,存储成本非常高,需要对对象数据进行治理,在保障跨IDC容灾的前提下,降低50%存储成本。本文主要从三个层面,介绍整个项目的设计与落地过程:快手对象存储架构;快手对象存储跨IDC EC架构设计阶段;快手对象存储跨IDC EC架构落地阶段。

一、快手广告推广对象存储架构

快手投放代理商怎么找?

如图所示,整个架构的核心思想是:通过HBase存放对象索引,多个对象数据合并后,以大文件的形式存放在HDFS上,同时使用MemoryCache作为缓存层,缓存热点对象数据,避免直接对底层存储的冲击。除此之外,整个架构是通过双AZ四副本的形式,实现跨AZ容灾;读取时,通过AZ亲和性策略,优先选择本AZ集群进行数据读取,Miss或者失败后,再回落到远端AZ集群读取。快手经历了10年高速发展,目前已经拥有几EB存量数据,几PB日增量数据,对象存储的成本非常高,需要对对象存储进行数据治理,在保障跨IDC容灾的能力下,降低50%存储成本。接下来的篇幅,重点介绍下,为了实现这个目标,我们都做了哪些事情。

二、快手广告投放整体方案选择

降低存储成本的方法有很多,综合考虑后,以下三大类方法比较match场景:删除无用对象数据;降低对象数据副本冗余度;采用低成本存储介质存放对象数据。由于目前整个架构是通过双AZ四副本实现的跨AZ容灾,所以准备采用数据EC处理,来降低对象数据副本冗余度。也就是,我们准备采用数据EC技术和归档存储的方式,在Hot存储层的基础上,引入低成本存储层,进一步完善整个对象存储架构。通过数据“热 -> 温 -> 冷”的逐级流转,实现降低对象存储成本的效果。

经过对数据的热度分析后,发现:数据冷热周期分明;历史数据存在被随机访问的场景;历史数据访问时延有一定要求。所以我们决定第一阶段的主要工作,集中在:实现一套功能完备的EC Warm低成本存储层。通过数据“热 -> 温”的自动流转,实现保持跨AZ/IDC容灾的前提下降低50%存储成本的大目标。

三、快手对象存储 跨IDC EC架构设计阶段

先来看下,在架构设计阶段,我们需要做哪些抉择。

1.EC算法选择

在算法选择时,由于是对象存储,对数据重构代价要求比较高;同时又需要具备跨AZ/IDC容灾能力,对容灾能力要求也比较高。综合考虑后,我们决定采用LRC算法,作为整个EC Warm架构的主算法。但是LRC算法的参数应该如何设置呢?

快手广告推广电话

2.LRC算法参数确定

LRC算法的容灾能力和RS算法一样,所以我们主要通过RS(n + m)来推到下LRC算法的具体参数:假设:最少有 X 个IDC实现容灾;每个IDC内均匀散列Block。要求:任何一个IDC故障,数据都可修复;RS数据重构成本尽可能低;任意一个IDC故障后,还可以容忍其余IDC各自坏掉一个Block;副本冗余度 <= 200%。中间推导:每个IDC内存放 (n + m)/x 个Block;每个IDC最多存放m个Block。

经过推导后,我们发现,下面两种算法,比较满足场景要求。LRC(6 + 3 + 3);LRC(6 + 2 + 4)。通过局部修复数据压测,以及结合目前IDC个数现状,所以,我们准备采用LRC(6 + 3 + 3)算法,即:6个source block,产生3个全局校验(Global Parity)块和3个局部校验块(Local Parity),支持跨IDC容灾,且能降低50%副本冗余度。

3.EC块布局方式选择

数据EC块布局方式选择,直接影响整个项目落地的风险和难度,所以也是至关重要的。结合现状:温数据 + HDFS大文件 + IOPS要求偏高 + CDH HDFS版本,所以我们决定采用连续块布局方式。也就是整个的EC Warm架构,采用LRC(6 + 3 + 3)算法,在稳定的HDFS内核版本基础之上,封装一层功能完备的数据EC和数据重构流程,在实现大目标的同时,尽可能的降低风险。

4.EC Warm架构层面跨IDC容灾能力

通过上面EC算法和块布局方式的抉择后,我们只需要将ZK、Journal、DN、Active NN、Standby NN散列在不同的IDC内,就可以实现EC Warm架构层面的跨IDC容灾能力,在某个IDC故障后,整个架构可以自愈。除此之外,整个架构:通过Router + ObserverNN组合,提升架构主节点读吞吐功能。

四、快手对象存储 跨IDC EC架构落地阶段

确定大方向后,我们再来看下,为了实现一套功能完备的EC Warm低成本存储层,我们还需要解决哪些问题。

1.数据EC流程

首先我们需要一套智能的数据“热 -> 温”转换流程,如图所示,在整个流程中,有几点相对比较重要:将LRC算法调度到文件所在Hot集群上,可以避免读取Source时产生跨IDC流量;添加统一跨IDC流量控制模块,严格控制数据转换流程中对跨IDC带宽的影响;LRC算法同时输出Source和Parity,严格保障一个Stripe 12个Block的块放置策略;Global Parity 和 Local Parity按照固定次序,存放在同一个Parity文件中,并且通过文件前缀与Source文件进行匹配,简化索引信息。同时,我们调整了一个Stripe 12个Block的布局方式,为了在满足跨IDC容灾的前提下,尽可能均衡IDC间的流量,如图所示:

2.数据Fixer流程

其次,我们还需要一套智能的数据重构流程,重点介绍下LRC算法的重构实现。LRC(6 + 3 + 3)算法在进行数据重构时,按照先局部、再全局、再局部的思想,将12个块分成7层。优先使用局部修复;局部无法修复时,再进行全局修复;当全局修复完成后,再进行一轮局部修复。为了最小化LRC数据重构成本,Stripe数据重构时,最好能在第一轮局部修复就完成。所以,期望在IDC内,任何一层设备出现故障时,只出现一个块丢失,从而保障局部可修复。

3.数据块放置策略

一个Stripe 12个Block除了跨IDC散列之外,IDC内部四个Block也要散列到不同的Domain、Tor、Rack、DN、Disk上,从而实现IDC内任何一层设备出现故障时,只出现一个MissingBlock,都可局部修复。为了严格保障这样的块放置策略,需要完成以下几个功能:NN需要支持逻辑UpgradeDomain概念,从而加速Decommission和Balance速度;NN需要支持LRC BlockPlacement Policy,将12个块按照四个为一组分成4组。分配DN时,组间跨IDC、组内散列在不同的Domain;数据EC时,一次性向NN申请一个Stripe 的 Block,然后按照对应关系,将EC后数据,写到对应的DN上;数据Fixer时,按照当前DN的情况,向NN申请满足放置条件的DN,将Fixer后的数据,写到对应的DN上。通过每个数据变更环节,强保障Stripe块的放置策略,从而可以最小化Stripe 数据重构代价。

4.数据正确性保障

接下来,我们再来看一个问题:如何保障转换前后,数据正确性问题?在数据转换过程中,可能存在诸如:磁盘故障、内存故障、网络异常、程序BUG、未知异常等各种异常,导致数据转换后,数据异常。所以保障数据转换前后正确性,是至关重要的。

为了保障数据正确性,我们做了以下几件事情。数据EC阶段:LRC算法EC时,将产出的中间临时数据,并发的写到HDFS上;LRC算法完成后,通过HDFS Concat操作,将HDFS 临时文件合并成最终的Source文件和Parity文件;按照Block粒度,计算Source文件和Parity文件的对应Block的CRC,并记录到HBase中,供Fixer数据重构时使用。为了保障数据EC后,HBase内Block对应CRC的正确性,尤其是Parity Block CRC的正确性,在EC完成后,又添加了完备的Checker流程,通过模拟局部修复、全局修复流程,强保障Local Parity和Global Parity的正确性,从而保障HBase内Block对应CRC的正确性。数据Fixer阶段:LRC算法进行数据重构时,中间临时数据直接写到HDFS上;通过类Transfer的流程,将HDFS中文件数据,端到端的写到对应DN;Transfer最后阶段,完成CRC校验后,再Finalize Block。通过以上各阶段的工作,从而保障变更前后,数据的正确性。

5.索引一致性

由于EC Warn集群中,Parity文件和Source文件,通过文件前缀的方式进行索引匹配的,所以就有可能存在两个文件信息一致性问题,比如:高级用户误删除Parity文件、用户仅改变Source文件属性等。为了解决Parity文件和Source文件索引一致性问题,我们做了以下几件事情:回收Parity文件的目录权限为admin权限;NN端捆绑Source文件和Parity文件操作,比如:rename、delete、settime等;Source文件append时,自动提升Source副本数,并删除对应Parity文件;除了上面各个阶段保障:数据高容错性、数据变更前后正确性、索引一致性等,还需要一个兜底服务,定期的扫描全量EC文件,确保各个状态的正确性,以便能够及时发现、并解决任何导致数据丢失的隐患,严格保障数据的可靠性。

五、快手信息流推广业务IO流程变化

最后,整个对象存储架构,引入了EC Warm低成本存储层,通过数据“热 -> 温”动态流转,实现保持跨AZ/IDC 容灾的前提下,降低50%存储成本的效果。在取得明显受益后,我们再从业务的视角看下,整个架构的变更,对业务侧的影响:数据“热 -> 温”转换后,更新HBase中文件的索引信息,对业务透明;业务读取时,自动从warm集群读取数据;读取Warm集群数据时,如果出现数据丢失异常,不仅会实时同步修复,还会异步周知数据重构服务,进行异步修复。

六、结尾

目前整个架构已经上线大半年时间,取得几百PB数据空间节省的收益,同时,未出现任何数据可靠性问题。当然,整个架构还需要承载更多的数据,还需要进一步扩大,现在不代表未来,我们团队会不忘初心,怀着敬畏之心,继续匠心前行。


在快手投放广告,能在短时间内聚集人气,实现商品流量变现,提升品牌认可度,形成一个完整的营销闭环,想投放快手广告为您推荐巨宣网络,我们有丰富的推广运营的和推广实战经验,有需要的广告主请咨询在线客服哦!!

公司优势

提供80+媒体资源

我司提供互联网广告营销服务超10年,拥有专业的人才储备

行业头部客户运营经验

拥有单账户日消耗百万运营经验,广告账户总量超1万!

专业建站/美工/拍摄团队

账户开通后,提供专业的建站运营服务,百名运营服务!

较高政策优惠

如无需我司进行代运营,可提供较高返点政策,靠谱!

注意事项

首次开通账户注意哪些?
不论您是想投放那个媒体,都需要提前确定开户资质,避免因为资质不全无法上线,资质齐全才能上线广告,不论任何广告平台,资质齐全是广告上线最重要的第一步!
开通广告账户需要多少钱?
每个广告账户开户价格都有所差距,业内基础开户价格基本为5000元起充值,如低于该费用,需再三核实对方信息,避免上当受骗!
一般开通广告账户需要多长时间?
如果您的资质齐全,开户时间基本当天就可以下户,如行业较为特殊,开户时间基本不超过3个工作日。
开户后你们能做哪些服务?
开通广告账户后,我司可以协助广告主搭建落地页、上传广告素材、制作广告素材、效果优化等服务,我司拥有运营人员上百人!
可以帮助我们拍摄视频吗?
我司不提供免费视频拍摄,因目前各平台对于素材审核较为严格,视频素材如需我司提供需与我司客服沟通拍摄要求,视频拍摄价格从300元-3000元不等,根据广告主需求确定价格。

巨宣网络

专注信息流广告/直播广告/搜索广告/短视频广告开户服务!