当前位置: 首页 > 科技观察

架构和算法创新让分布式存储焕然一新!

时间:2023-03-17 17:00:08 科技观察

分布式存储在数据存储行业的占比越来越大。得益于分布式Scale-out的高扩展性和高速网络技术的发展,分布式存储逐渐成为主流,解决海量跨源、跨域、跨协议的非结构化数据“存储”、“井-托管”和高效的互操作性。企业用户希望从分布式存储中获得哪些能力可以概括为五点:高性能、低成本、高可靠、易管理、易扩展。针对这些核心诉求,鲲鹏BoostKit分布式存储使能套件打造了全局缓存特性,本质上是一个分布式存储使能中间件,即中间软件层。这里将全局缓存支持或规划的特性简单归纳为资源管理、系统加速、高级企业特性三大类,用于解决合作伙伴和企业对数据存储的核心需求。以高性能需求为例,我们结合读写缓存,缩短读写访问路径,提供低延迟访问,结合数据聚合,将随机写转换为顺序写,大大降低磁盘寻道和旋转的影响延迟硬盘功能。发挥障碍,并结合新设计的元数据管理引擎,实现变长数据的自适应管理。全局缓存实现了高性能、低成本、高可靠、易管理、易扩展,得益于其架构和算法的创新。接下来,我们将分享其背后的设计思路。全局缓存的软件架构设计:遵循清晰、合适、易演进的原则(图:全局缓存技术栈),提供掉电保护,无单点故障。整体架构设计遵循清晰、简单、适当、易于演进的原则,让系统设计足够简单,因为我们知道分布式存储可以算是分布式系统的集大成者,它不仅包括各种常规的功能场景,比如我们前面提到的资源管理、系统加速、企业功能等,也包含了很多异常流程。这些正常进程和异常进程正交之后,我们系统的复杂度就很容易扩展了。虽然任何一个分布式系统都有正常和异常的流程,但实际上是有区别的,因为分布式存储承载的是用户的核心数据,数据丢失或不一致是不允许的。业务恢复不仅要考虑RTO,还要考虑RPO。增加一个维度会带来更多的复杂性。加倍,但增加维度,本质上是一个正交过程。基于此,整个架构设计过程致力于降低系统复杂度。第一步是完全解耦。从图中可以看出,全局缓存在逻辑和部署上与计算集群和存储集群进行了解耦,相当于一层缓存加速中间件实现了自我管理,独立部署,独立运行,无入侵融入Ceph等开源软件,让应用程序无感知加速。解耦之后,全局缓存借鉴了微服务的思想,通过客户端适配层、服务端适配层、存储代理层抽象出外部接口依赖,相当于一个API网关,屏蔽了系统的复杂性外部和最小化场景、协议和软件升级带来的适配成本。对于全局缓存的软件架构,整体上可以看做是一个微内核架构。除了管理工具和ZK的独立进程部署,为了避免数据平面和控制平面的耦合和相互影响,我们还将数据平面和控制平面拆分成独立的进程,这样相互耦合可以避免故障场景等场景的影响。但我们知道,服务并没有尽可能细地拆分。为了实现高性能和低延迟,将全局缓存数据平面服务作为一个整体部署为一个独立的进程,避免了复杂的接口框架、消息通信带来的延迟和调用栈的开销;单看数据面,内部采用模块化解耦设计,包括多个子系统,如多级读写Cache、元数据索引、数据聚合、数据持久化等子系统,这些子系统通过内部接口连接。调用交互不需要消息通信,调用链路短,延迟低,模块化设计可以让协同开发和迭代高效并行。在模块化设计之上,全局缓存也遵循solid等设计原则,如读写缓存、元数据DB等依赖持久层的数据持久化服务,它们之间的交互遵循接口原则隔离和依赖倒置,实现充分的解耦,从而将复杂度从N*M降低到N+M。缓存架构创新:读写分离,前后端分离对于缓存架构,首先,全局缓存采用读写分离设计,实现进程、资源、介质、冗余的解耦策略。进程解耦,比如避免writecacheflushing和readcacheelimination的交互,资源解耦比如读写cache的独立配额控制,介质解耦比如支持RAM/SCM/SSD等不同介质加速,冗余策略解耦等等作为支持不同复制策略的读写缓存,这提高了缓存命中率和资源利用率。其次,全局缓存采用前后端分离的设计模式,将请求处理路径分为前台和后台两部分。前台部分保证了对应用程序读写请求的最快响应。极低的应用程序访问延迟。在实现读写分离和前后台分离缓存架构的基础上,可以编排缓存的执行流程。全局缓存的架构及其执行流程可以屏蔽或缓解缓存原有的一致性问题以及雪崩、Breakdown、穿透等问题。比如对于一致性问题,数据状态维护在分布式缓存池中,客户端是无状态的,没有源状态同步开销;全对称分布式架构,结合去中心化路由算法,实现数据精准路由,数据精准定位主节点;结合协商好的执行流程安排,保证segment逐级命中最新数据。比如先命中写缓存中的脏数据,然后L1读缓存,L2读缓存,最后后端存储,命中立即返回。设计保证不会读取旧数据。高性能、低成本的核心算法设计在全局缓存特性中,我们应用了大规模的降本增效算法。这些算法汇集了华为国内外研究院、高校教师的全球智慧,也是实现领先性能的全球缓存,成本领先的核心技术保证。高性能算法主要包括读路径加速和写路径加速两类。对于写路径加速,我们知道HDD磁盘的寻道和旋转延迟是访问延迟的主要部分。HDD对IO数量和放大倍数非常敏感。8K数据为例,如果是随机写入,一般可以做到单盘100IOPS,而顺序写入主流硬盘可以达到3W+IOPS。所以,上述缓存分离架构的前提是配合高效的算法,否则很快就会因为后端来不及刷盘而导致缓存满写透。为此,通过IO聚合算法实现全周期Append-only模式下的磁盘友好写入,将IO聚合过程转化为带约束的组合优化问题,并结合启发式方法实现最小空间浪费;数据聚合后,需要结合自研的TeraDBKV数据库,实现从小对象到聚合对象的映射管理。之所以命名为TeraDB,是因为每台服务器管理的元数据量上限约为700GB,接近1TB。对于元数据管理,全局缓存采用LSM结构。LSM对小块的频繁更新比较友好,但是由于层次结构,对读取并不友好。为了解决这个问题,全局缓存设计了一个自适应的Bloomfilter来批量检测key的存在,提高读性能。另外,由于非结构化数据本身的大小可变,我们还设计了变长粒度的树来实现大小对象的自适应管理,既提高了查询效率,又避免了资源浪费,大大节省了元数据开销。那么,实现IO聚合和映射就够了吗?不是这样的,因为数据的更新和删除仍然是在聚合之前的粒度上进行的,那么在数据更新或删除之后,我们需要进行垃圾回收来释放空间,而垃圾回收会引入写放大,这是我们需要的开销paytocontrolwriteAmplification成为我们能否实现性能提升的关键因素。对于读取路径,我们结合了丰富的模式识别和挖掘算法,比如结合时间序列预测挖掘流式模型,多模态特征聚类挖掘热点模型,频繁模式挖掘得到关联模型,广泛冷热识别获得工作集关联模型,基于这些模式挖掘算法,辅以全局负反馈调整,可以实现精确的模式挖掘和预取阈值、预取长度等参数的自适应调优,在多线程中实现70%以上的缓存-source特征不明显的混合场景命中率,常规负载下可以达到接近100%的缓存命中率。算法创新思路之一:理论为基石,探索算法的极限。给出了两个例子。第一个就是如何实现刚才说的理论上最优的写放大。对于垃圾回收写放大的问题,业界普遍认为最优回收算法,或者写放大最小的回收算法是贪心算法,所以优化写放大的过程中没有算法设计,只有数据结构设计,例如通过层次链或优先级队列管理回收对象。但这种情况并非如此。针对这一问题,全球缓存研发团队结合学术论文分析,实现了基于逻辑时钟驱动的垃圾回收建模推导,通过主动分区实现了理论上最优的写放大算法和数据结构设计。推导发现,在均一工作负载下,贪心算法确实是最优的,因为它在均一工作负载下没有后遗症;但是在非均匀工作负载下,贪心算法并不是最优的,我们知道真正的业务负载基本上是非均匀工作负载的具体推导过程是我们将每次数据更新作为一个逻辑时钟来驱动状态系统的变化。状态主要是每个聚合对象中垃圾的数量,然后应用Lambert方程对时空特征进行建模,将垃圾生成模型转化为优化问题,得到数值解,实现主动分区OP产能过剩;这样,在不均匀的工作负载下,结合activepartitioning实现最优OP配额控制,得到了理论上的最优解,从右图可以看出写放大收益可以达到30%以上,效果优于CB等复杂算法。算法创新思路二:算法与架构协同,最大化算法效果以读路径加速算法为例,我们不单独讲算法原理,换个角度。利用上述算法,例如智能预取和数据消除。在预取架构方面,GlobalCache创新性地提出了一种智能预取架构,将客户端推荐引擎与服务端执行引擎分离。与业界流行的分布式缓存预取模式相比,具有单机推荐的效率和准确性,缓存池的资源利用率高。(1)作为对比,相对于标签1,在服务器端本地推荐使用该模型。既然我们的数据没有被源头打散,推荐引擎自然就有了全局的traceview,这样才能做出全局的精准推荐。同时,由于推荐引擎部署在客户端,在共享卷等场景下,不会出现多源干扰,能够精准匹配用户工作量。(2)与标签2的服务端集中推荐相比,这种模式可以做到无单点故障,也可以减少数据推送和执行策略拉取的两跳网络开销,如图中黄色箭头所示图中,这样可以避免缓存误命中。所谓误命中,是指已经发出了预取请求,由于推荐和执行环节太长,导致请求到达时预取数据还没有加载到缓存中。针对成本目标,BoostKit全局缓存采用ECTurbo、数据压缩、数据压缩等创新算法,提升分布式存储的有效容量,帮助用户降低成本。ECTurbo支持4+2~22+2大规模EC,用户可用容量提升2~2.75倍;自主研发的GLZ数据压缩算法,结合原理级、结构级、指令级三级优化,实现与LZ4、gZip等业界流行算法相比压缩率高30%,系统性能也可以提升30%,从而达到成本和性能的双重效益;数据压缩算法配合压缩算法使用,减少压缩后数据对齐造成的零填充空间浪费,实现更紧凑的数据存储,压缩率可继续提升30%。综上所述,鲲鹏BoostKit全局缓存结合ECTurbo、数据压缩、datacompaction等算法突破,相比开源方案可实现3倍以上的用户可用容量,大大节省TCO;后期将推出全局重复数据删除功能,进一步提升数据减少率,覆盖备份存储等场景。目前,鲲鹏BoostKit全局缓存已与大型运营商进行联合创新。使用三台X86服务器和三台鲲鹏服务器组成两个服务集群,其他硬件不变,然后进行缓存命中极限性能测试。测试数据显示,全局缓存端到端性能达到14WIOPS/node,稳定延迟1ms;相对来说,X86硬件+开源BCache+开源Ceph,是1.2WIOPS/node,延迟只能达到26ms,全局缓存达到10倍的性能优势。如果您想了解更多全局缓存相关的部署方式和学习资源,请登录鲲鹏社区BoostKit专区hikunpeng.com获取详细信息。