加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 酷站推荐 > 酷站 > 正文

专家分享:京东分布式存储建设之路(JFS)

发布时间:2019-02-20 14:05:59 所属栏目:酷站 来源:谢涛
导读:一拍而合,京东分布式存储起航 在项目中你经常会遇到,有一些图片、视频或者文本需要存储,你希望它不丢失的同时还要能提供高速读写的能力。对于京东来说,这样的需求每天都在发生着,而且要求会更高,因为这些可能是用户的订单数据,你希望即使在写的时候

  京东的图片规格很多,同一副图片可能有10多种不同的规格,因此我们在源站只存一副原图,CDN没有命中的图片回源站进行实时压缩,这样不仅节约了存储空间,也满足了业务不断变化的需求。如下图所示:

专家分享:京东分布式存储建设之路(JFS)

  当然,在解决最核心的图片存储和简单图片处理后,我们也做了一些工作推动了京东图片技术的发展。在缩放效率上,我们和Intel进行了紧密合作,通过代码重构、ICC编译、IPP编译将图片缩放速度提升到最初的3倍以上。在2014年我们创新性的将图片Webp格式引入京东,与无线部门紧密合作,将移动端的图片全部替换成Webp格式。图片整体大小下降了50%,给CDN节约了30%的流量,也给用户节约了巨大的下行流量,让用户访问速度更快,大大提升了用户体验。

  继续前行,JFS大文件存储

  对于大文件来说,单客户端的上传和下载性能同样是一个重要的指标。小文件的复制协议1Primary+2Followers方式已不再是最优的,Primary拿到数据后同时发送给两个从副本,这样,Primary的带宽资源将成为系统的瓶颈。因此,在大文件存储复制协议的选择上,JFS采取了链式复制来最大限度利用系统的带宽资源。链式复制结构如下图所示。而在数据发送和接受上,我们使用了流式处理,大大提高大文件的传输效率。

专家分享:京东分布式存储建设之路(JFS)

  在数据存储上,恰恰与小文件相反,我们将一个大文件分成多个块来存储,这样可以规避局部过热的文件造成了单机磁盘IO过载,同时,分成多块后也更利于整个系统资源的调度。

专家分享:京东分布式存储建设之路(JFS)

  快速发展,京东对象存储

  前面的小文件存储和大文件存储,从可靠性、可用性和稳定性方面,已经满足了大部分的业务需求,但使用起来不是很方便,上传和下载都需要通过SDK,用户排查问题不是那么便捷,且对多语言的支持也不好。接下来我们瞄准了亚马逊的S3产品形态。

  简单对象存储,支持Http协议;支持文本、图片、视频等任何类型数据的存储;支持1个字节到1TB大小的数据存储;支持list操作,用户数据可以有层次结构。这对于业务场景众多、应用复杂的京东来说,太合适了。

  于是,我们决定在JFS上面构建对象存储,提供用户更便捷的访问。

  对象存储包含几个部分,除了前面我们已经提到的大小文件存储,还需要构建Gateway、账户和Bucket管理、日志处理等等,当然还有最复杂的元数据管理。

专家分享:京东分布式存储建设之路(JFS)

  对象存储的元数据管理是一个业内难题。虽然对象存储并无目录的概念,但要支持按前缀进行List操作,即能通过Prefix和Delimiter的结合,实现层次查询。在数据量不大时,类似于Hdfs的NameNode将全部用户Key都存在内存中就能满足需求,但当对象的数量过亿或者十亿时,将会耗尽内存,无法做到横向扩展。很多KV存储能做到随意横向扩展,但不能很好的支持对象存储List请求。

  我们的方案也不是一个完美的解决方案,但已经能满足京东百亿级别元数据管理,这里发出来供大家探讨下。我们采取Mysql+Jimdb(京东自研的高速KV缓存系统),将元数据扁平化持久存储在Mysql中,同时借助于Mysql的B树结构实现元数据的List层次查询。使用Jimdb作为缓存,提供高并发能力。当然,仅仅Mysql并不能做到无限横向扩展,我们在Mysql之上做了一个自动分库分表的系统ET,能在不影响业务的情况下,实现Mysql的分裂和数据在线迁移。如下图所示:

专家分享:京东分布式存储建设之路(JFS)

  正常情况下,Client直接连到对应的Mysql复制组。当某组Mysql记录数目达到一定限度后,Manager触发分裂,启动一个Migrator作为Mysql代理,和Manager紧密配合完成实时数据处理和历史数据迁移。

  对象存储一经推出就受到业务部门的广泛欢迎,目前已经支持了京东1200多个业务数据的存储,双十一最高峰值每秒同时25000个对象实时读写,存储的对象达到百亿级别,数据量超过10PB。

  持续创新,电子签收后台系统

  电子签收小票的存储就是对象存储的一个重要应用。

  京东一天的订单量就有成百上千万,以前每天都要保留几百万张的纸质小票,堆积在仓库里面。出现纠纷时,还需要从上亿张纸质小票中找到用户当时签收的小票,这无疑是一项繁琐、费时费钱、又不环保的工作,且大大提升了京东物流的管理成本。从环保维度和成本维度考量,运营系统青龙研发部创新性的提出了使用电子签收。

  整个电子签收产生的海量签名图片需要高安全性、高稳定性、高持久性的保存。且根据国家的快递管理办法规定,物流的签收保存是一年,再加上签收的金融小票,意味着系统需要能够存储百亿级别的用户签收图片。海量的数据存储也给青龙研发带来了一些困难。

  这无疑是对象存储很好的一个应用场景,但其定制化的加解密、文字转图片、图片合成也给对象存储提出了更高的要求。为了更好的支持业务创新,我们在对象存储的基础上,研发了电子签收后台系统。能够根据传回来的签收信息,按照指定样式生成签收小票图片,并与用户签名图片合成;按照业务高安全性要求,加密存储数据,保护用户数据的绝对安全;对经POS机加密传回来的数据,在用户查看时解密展示给用户。

专家分享:京东分布式存储建设之路(JFS)

  初衷未改,JFS统一存储

  JFS小文件和大文件存储的实现,已经能够解决京东大量应用场景。但离我们的One team,One storage的愿景还很远。接下来我们开始了小文件和大文件存储的整合。同样的三副本强一致性复制,在复制协议上,我们进行了统一,同时兼顾到小文件和大文件性能,采取了链式复制。而在文件存储上,大小文件处理迥异,无法强行统一起来,因此我们将大小文件存储作为可插拔的不同存储引擎,分管集群中不同类型文件的存储。

专家分享:京东分布式存储建设之路(JFS)

  面向未来,京东分布式存储展望

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读