用户在京东商城购物时浏览的图片、晒单信息及网页资源都是存在京东云存储上的。现在京东云存储支撑京东集团物流、商城、金融、搜索、广告、大数据等业务部数据存储的需求,随着公有云业务的发展,京东基于私有云面向公有云逐渐拓展对象存储产品。
接下来京东云公有云存储研发总监张斯聪将为大家介绍京东云存储的开放之路:
京东公有云存储研发总监张斯聪
以下是斯聪大大的采访记录:
大家好,我在京东云负责的主要产品是京东云云存储,首先先简单介绍一下对象存储的成长之路。大家都知道京东其实本身自有的非结构化数据和结构化数据都是海量的,用户在京东商城购物时浏览的图片、晒单信息及网页资源都是存在京东云存储上的。现在京东云存储支撑京东集团物流、商城、金融、搜索、广告、大数据等业务部数据存储的需求,随着公有云的业务逐渐发展,我们基于私有云面向公有云来拓展对象存储。2016年4月,京东云厚积薄发重装上阵,到现在一直处于高速发展的阶段。
2017年12月,京东云全新上线了“华东-上海”区域(Region)节点,客户服务等级实现了再次提升,上线后京东云将以“华北-北京、华东-上海、华东-宿迁、华南-广州”四节点服务国内公有云客户,同时,京东云“华北-北京”第二可用区(Availability Zone)也已开通,标志着京东云为客户提供跨可用区的高可用服务保障和同城容灾能力的大幅提升,可满足客户不同场景下的需求。
作为存储产品,我们公有云的存储最重视的产品性能有两个:可靠可用性和易用性。
我们首先来谈可靠可用性。京东云存储是如何做到高可靠和高可用呢?我们分成三个方向:
服务分级部署
从服务部署上来说,京东的公有云体系分成三个层级,第一级是区域,中间是可用区,第三级是数据中心,一个可用区可以由多个在满足一定条件的数据中心组成,一个区域可以由多个可用区来组成,整个公有云的产品也就在这三级上实现物理和软件的容灾。
在分级部署这方面,整个对象服务在可用区内对外提供完整的服务单位,在区域里面分成左右两块,比如说两个可用区,分成左右两块的可用区进行部署,在一个可用区挂掉不可提供服务的时候,我们还有剩下一个可用区可以对外提供的服务,同时在一个可用区内部我们会同时部署多套子集群来保证在一个可用区内部部分不可用的时候,整个服务还是可用的,同时在一个子集群内部,因为他肯定有中心做决策的,以及数据存储的,我们弱化了中心节点对整个服务的关键性的位置,我们把数据节点对主节点的依赖性做了弱化,保证中心节点,中心节点毕竟相对于整个数据的节点是少的,我们保证在中心节点不可靠的时候整个服务还是可用的。
数据多副本分布
在服务部署之外,我们在数据的分布上也是做了高可靠高可用比较完备的考虑的。首先整个对象存储的服务还是在可用区以及数据机房这几档上分布,整个数据我们每一份数据,我们至少保证三副本,最多按客户的需求我们可以支持到几十上百个副本的个数需求,满足它不同的性能要求。在三个副本方面,最低三个副本的时候,我们保证所有的副本是强一致的,所有的副本我们会跨多个故障域去分布,因为我们服务是对可用区提供统一的服务,可用区底下有不同的对区域提供服务的,一个区域底下有多个可用区,我们会尽量把数据打散在不同的机房里面来给客户做多级别的故障率的容灾。
在读取这方面,他有内网的网端也有外面公网的访端,在内网方面我们保证内网的企业,请求方的读和多数读是一样的,让它在读的时候效率更高一点。在公网企业这方面,因为不知道用户更倾向于哪个方面,我会保障他均匀分布在所有的可用数据中心内。在内网读这方面,我们为了让客户得到更好的读取和响应的时间,我们保证读在优先读公网的数据。
数据损害的自愈
从数据部署的资源来看,坦率讲服务不管再怎么可靠,再怎么分区域,分故障区部署,总会发生硬盘损坏,一些逻辑数字的反转这方面的区域导致持久化的存储是不可用的,怎么做数据损害的自愈?我们要从发现和修复两方面来谈。
a.发现
首先我们要发现这个数据有问题,怎么发现呢?从持久化存储的数据这方面,我们金融云这边在整个底层的存储上分成了两块,一块是存在校验的数据,另外一部分是用户实际的数据,我们在数据破损的发现上分成两个方式,一个方式是在同步的发现,我们会有异步的数据破损发现服务,来定期的扫全量的数据,不断的把持续持久化的数据和我们存下来的校验码做比较,来发现用户持久下来的数据是不是有破损有损坏或者有丢失。
b.修复
在发现破损之后,我们必须要开始修复数据,因为对用户的数据我们提供了至少11个可靠性和至少4个可用性的保证,在破损之后,首先要把副本进行修复,比如说二号副本发现数据持久化有问题,首先我们要把这三个副本标记的图标记成只读状态,让他不可以对用户修改,如果用户修改则会新建另外一个副本让用户做修改操作。同时,上报中心结点,告诉中心结点这一份数据有问题,在用户读的时候也会跳过用户数据图。关于破损的数据,比如说用户希望扩容副本提高访问要求,这时候因为已经发现这个数据库了,我们就不会把破损的数据作为数据源来使用,或者说去做迁移处理,他会选择开始触发一个异步修复的策略,修复策略我们首先把本机房的数据源优先,本机房的一份副本坏了,我们在修复的时候首先从好的副本做溯源,同时复制组我们必须保证多份副本是一致的我们才认为这次修复是一致的,如果多份副本全都破损我们这时候的修复结构也不可靠,这时候我们会触发另外一种更复杂的修复方式。
在硬件损坏的时候我们会迁移到其他物理机器上,同时在可靠性和可用性保证之后,我们希望用户更方便,更易用的来用我们的存储服务。
在易用性这方面,因为本来公有云的服务就是从京东商城私有云的业务上产生出来的,在私有云业务我们研发的时候,它其实更倾向于内部系统的一些需求,它主要区别一些功能方面的,另外一些是在成本上面的考虑,我们首先要保证可靠性,所以在存储的时候是基本上不太计成本的,优先保证数据的安全。在整个系统上,京东内部是分两套存储系统,一套是针对图片高访问的存储系统,另外是针对对象存储系统。
公有云我们主要是考虑把业务系统做了整合,希望用户只要用京东云一款产品就能满足各方面对存储这方面的使用需求,在底层上我们也因为考虑到成本,研发了高可靠普通存储的系统和一套低成本的访问系统,同时在可靠性、可用性方面,我们希望用户来更安全、更可靠、更方便地使用我们的产品,我们相对于私有云京东商城内部提供了更高的可靠性和可用性,同时满足用户基本使用需求之上,我们做了更多的成本合理性考量。
先简单介绍一下商城的存储系统,基本上就是左边的图片存储系统和右边的对象存储系统,在图象存储系统它是纯为图片处理优化的小文件存储系统,在对象存储系统上面他以存储为核心的简单对象存储系统。这个系统其实对内是可以满足京东商城内部基本的存储方面的需求,但是对外就不OK了,在对外这方面我们整个一个方面是整合了这两套系统为一个统一的对象存储系统,第二个我们横向扩大了基于存储的周边服务和丰富用户的使用和接入,在用户的接入方式上我们现在可以让用户从控制盘、SDK、API以及各种第三方工具上使用存储,就像XSKY一样我们也使用第三方的接入协议,同时我们也有自己的接入协议。
在网络传输上,我们京东云存储系统可以作为原站让用户直接使用,也可以让用户接到第三方任何一个节点上提供服务,同时我们京东也有自建的CPN,要的话可能会有打包的成本更低的考虑。
提供完整的对象存储的产品形态,在产品内部我们会有一些基本的文件、权限、用户体系,这方面基本上以存储产品为中心的服务,同时附加的还有一些图片处理,视频处理,主要是视频点播为主的媒体这方面的处理,以及还有人脸检测识别这方面的大数据的处理,同时京东有自己的直播系统,我们对直播系统的录制、持久化也会有内部优化的接入方面的考虑。
底层存储分为高可靠存储以及低频访问两套存储系统,低频访问存储系统是业界比较常见的,内部的我们会有一些,比如说源数据管理、帐单管理,图片的日志处理以及比如说域名解析,访问控制安全策略这方面的考虑,来做一些内部底层支撑的系统。
基于这些完备的业务体系和系统架构,京东云的对象存储可以比较方便的给用户提供整个数据上云备份的需求以及一些热点数据加速分发的数据,还有一些云端的多媒体数据处理的需求,以及最后可以保证数据高可用性以及灾备的需求,基本上用户现在各种常见的和不常见的存储需求我们京东云都是可以满足的。
最后欢迎大家来使用我们京东云的存储服务!