云妹导读:
2020 年的京东 618 大促期间,京东智联云对象存储容量新增同比增长 400%,流量同比上涨 200%,对象存储服务稳定,完美完成了大促重保任务,为此次京东 618 大促累计下单金额超 2692 亿元的新纪录提供了坚实的保障。
“我的系统现在运行的挺好的,迁移到云上需要花费一定的人力还会带来一定的风险,我为什么要迁移到云上面呢?”
这是京东在推动集团各个业务“上云”时总会被问到的一个问题。相信,这也是很多企业在选择业务迁移“上云”时不断问自己的一个问题。
经过 17 年的发展,京东 618 不断跨上一个个新的台阶,而海量用户的浏览和海量订单的产生和交付,对后端的支撑系统提出了极高的要求。京东智联云作为作为支撑京东 618 的重要技术中台,要面临数百亿访问流量、每秒数百万次的高并发请求,以及数十亿的实时消息推送,保证全天核心服务不降级、无重大事故,这一切都对京东智联云带来了极大的挑战。
对象存储作为京东智联云重要的产品之一,在这次 618 中也起到了及其重要的作用。作为在线服务,京东智联云对象存储不仅为视频、直播等重要数据等存储和下载提供服务支持,同时也为离线计算平台提供存储支持,可以说是京东 618 大促的核心依赖,对象存储的稳定性极大的影响了顾客 618“买买买”的体验,必须保证万无一失。
01 资源弹性伸缩
弹性伸缩的核心需求是在资源池里面有足够的资源来满足业务的增长,在传统 IDC 时代,客户都会规划好业务的最大增量,留下足够的 buffer 资源来应对它,三倍的业务增长至少需要预留 200% 的 buffer。
云上的对象存储是一个多租户系统,弹性伸缩本质上做的事情就是把多个用户的 buffer 统一的管理起来,然后按需分配给需要的客户。
在传统的 IDC 时代,京东视频存储在内部的分布式存储系统中,每次大促都需要提前两个多月开始备战。
下面是一个使用传统 IDC 时代 618 前夕准备的 Checklist:
但在使用对象存储之后,基于对象存储弹性扩展到特性,整个备战过程变得非常简单:
02 成本降低
很多企业在把本地到存储迁移到云上之后,都会感叹一件事情,在排除运维相关的人力成本之外,使用云还是比自己维护一套存储系统成本更低。接下来我们来看看为什么使用云上对象存储时客户的成本会降低?
架构优化提高资源利用率
首先,在使用云对象存储系统之前,很多用户使用类似 Ceph 之类的系统来存储自己的数据,这类系统有一个问题就是,如果整体使用率超过了 80% 可能会导致部分的写入失败或者写入性能降低,在实际维护的过程中,需要维护较低的水位线。
云对象存储系统基于自研存储系统,在整体使用率接近 95% 的时候还能保证写入的可用性和性能。
更合理的机型降低物理存储成本
在传统的 IDC 时代,业务自己维护自己的存储系统,由于本身存储需求相对不大,存储成本在整体成本中占比较小,一般不大会有太大的动力去优化存储的成本,以下几个情况会非常常见:
- 使用低密度服务器,由于存储规模不足,为了保证可靠性,必须使用更多的节点,这样每个节点的存储量就会很低
- 使用老旧的服务器,同样由于规模的原因,很长时间都没有扩容的需求,也就无需采购新的服务器,导致整体物理成本偏高
- 由于规模的原因,没有动力去使用新技术 / 新硬件
和私有的存储不同,对象存储是一个快速发展的,大规模的存储系统,5% 的成本降低就能带来非常可观的收益,因此我们做了很多工作来降低成本。比如采用更合理的存储机类型,根据客户自己业务的特点,定制更合理的机型。
较低的闲置率
在使用云对象存储系统之前,为了应对一些日常的促销等,私有的存储系统必须要维持足够的 Buffer,要应对一倍的流量突增必须维护一倍的 Buffer,这决定了整个集群的空闲率超过 50%。
云上的对象存储是一个多租户的系统,多个租户会共用一个资源池子,由于多个租户涉及到不同的行业,业务高峰冲突的概率较小,对象存储系统不需要为每个用户留足够的 Buffer,假设最多 10% 的业务在同一时间流量业务增长一倍,对象存储系统只需要维护 10% 的 buffer 就可以满足需求,较大的降低了闲置率。
IO 资源复用
IO 资源更细的划分的话,会包括存储 /IOPS/ 带宽三个维度,每块磁盘的存储 /IOPS/ 带宽都是相对确定的,但是单个业务很难说同时把三种资源全部用掉。
对象存储是一个多租户的系统,通过后台的调度,把不同类型的业务的混合的调度到磁盘上,保证这三个维度的 IO 资源能尽量的被使用。
京东有一个大数据分析的系统,本身只有数百 TB 的数据,但是在峰值会产生数百 Gb 的读写带宽,在迁移到对象存储之前,需要大量的机器来抗着数百 Gb 的峰值带宽,导致存储资源被大量浪费。在迁移到对象存储后,由于对象存储上有大量的相对较冷的数据,通过合理的调度,大数据分析系统复用了这些数据所对应的带宽,节省了大量的成本。
运维成本降低
存储系统本身是一个很复杂的系统,需要专业的运维人员来维护,而使用云对象存储之后,运维人员主要精力集中在业务上,可以极大的降低运维的人力
03 高可用性保证
尽管在过去两年多里面,京东零售和京东智联云有过多次成功的合作经验,但是在商场视频把本地数据删除使用云作为唯一的数据之前,还是有一定的担心,对象存储现在是足够高可用么?对象存储在未来一直是高可用的么?接下来让我们一起来探讨下对象存储在可用性保障上走的一些工作。
对象存储架构图
整体来说,对象存储包括业务层 (绿色部分),数据存储(黄色部分),元数据存储(蓝色部分) 三个部分组成,其中业务层是多节点无状态服务,保证高可用。
数据存储和元数据存储都是有状态服务,其中数据存储存储对象数据的切片,元数据存储存储对象名字到数据切片 ID 之间的映射。
对象存储高可用核心思路如下:
- 基于 Raft 构建高可用的数据存储和元数据存储集群,部署上都跨多个 AZ 部署
- 基于多个高可用数据 / 元数据集群构建更高可用的 Data/Meta 服务,集群级别故障对用户影响可控
- 数据和元数据能写入到任何一个可用的物理集群,保证写永远可用
- 数据 / 元数据都不会修改,确保数据只要存在就能读到正确的数据,提高读读可用性
- 多个集群做蓝绿部署,降低程序 / 人工操作的影响范围
下面我们一一来揭秘对象存储在各种异常情况下是如何保证高可用性。
Q
硬件故障
1、如果磁盘 / 机器 / 交换机故障怎么办
2、如果机房停电怎么办
A
对象存储的数据和元数据都是三副本存储,并且三副本放在三个不同的机房,确保以下:
1、如果有单节点 (磁盘 / 机器 / 交换机 / 机房) 故障,不会有任何影响
2、如果有两个节点故障,可能会导致部分复制组不可写入,对象存储会通过多集群的机制来解决这个问题,写入会写到其他的可用的集群,不影响客户端写入
3、如果有超过三个节点故障,可能会导致部分数据暂时不可访问,不影响用户写入
Q
网络故障
1、对象的数据是放在多个机房,如果机房之间的光纤被挖断了怎么办
2、如果某个机房和其他机房之间的网络断了,形成了孤岛怎么办
3、对象存储提供公网访问,如果部分公网 IP 被攻击 / 封禁怎么办
A
1、对象存储数据和元数据都分布在三个机房,如果有一个机房不可访问,其他两个机房可用形成多数派依旧可以提供服务
2、对于单机房和其他节点失联,形成数据孤岛的情况
- 已经写入的数据在孤岛机房内部有副本,可以读取
- 孤岛内部写入
i. 数据会写入到 WriteCache 中,保证写入成功
ii. 元数据会写入到孤岛内部 Backup Meta 集群中,元数据最终需要和孤岛外部元数据合并
3、公网故障,通过域名解析把流量导到其他区域,走内网访问
Q
SPOF
1、是否会出现少数几个节点故障,导致整个对象存储不可用
A
1、对象存储数据和元数据服务都是基于多个集群的,任意一个集群的故障不会影响对象存储的写入
2、对象存储数据 / 元数据不可修改,因此只要数据存在就是可以读的,不存在某些 Master 类节点故障导致集群不可读
Q
误操作
1、在日常运维过程中,是否会出现误操作,导致对象存储不可用
A
1、对象存储数据和元数据都是由多个集群组成,多个集群做蓝绿部署
2、任何时候操作只能在一个集群上进行,确保任何错误影响的范围是一个集群,而不会影响整个对象存储
Q
程序 Bug
1、对象存储在未来升级过程中,是否会引入新的 Bug 导致对象存储不可用
A
1、从研发测试流程上,降低 Bug 概率
2、全量上线生产环境之前会在预发布环境和灰的环境运行足够的时间
3、生产环境遵循蓝绿部署,一次只更新一个集群,确保不会导致整个集群不可用
多租户隔离
部分业务在使用云之前,会担心两个方面事情:
- 私密的数据被非授权的方案
- 其他用户的操作会影响到自己的业务
对象存储作为一个多租户的系统,对多租户之间的数据和访问都做了严格的隔离,确保不会发生数据泄露以及访问互相影响等问题。
数据安全
在接入集团用户的过程中,我们经常会被问到以下三个问题:
- 我们的业务数据是非常重要的,是否可能被其他用户非授权访问到?
- 我们的业务数据是非常重要的,但是我们的数据存储在云的磁盘上,员工是否会通过磁盘直接访问或者篡改我们的数据?
- 如果有黑客黑进入了内网,是否能直接访问磁盘或者内部系统来访问我们的业务数据?
作为一个面向企业用户的存储系统,数据安全是对象存储的最基础的需求之一,因此,我们的对象存储也会从多个方面来保障用户的数据安全。
用户数据可能从两个地方被访问:
- 通过对象存储提供的接口访问,对于此类访问,对象存储提供严格的认证鉴权机制,以及审计机制,保证用户的访问一定被授权,非授权的访问一定会被发现
- 直接从磁盘访问,对于此类问题,对象存储提供完整的加密体系,保证数据无法被访问
认证授权
京东智联云对象存储实现了面向请求公钥私钥的认证体系,用户的私钥只有用户自己知道,可以做到类似一次请求一个密码的功能,保证的用户身份无法被伪造。
同时,支持丰富的授权机制,可以通过时间,访问 IP 等多个维度对请求授权,进一步保障了用户数据对安全。
加密体系
京东智联云对象存储支持客户端和服务端两个方面对加密。
客户端加密是指客户在上传数据到云上之前提前对数据做加密,客户自己维护加密密钥,我们是无法通过任何方式获取到用户的原始数据。
服务端加密是基于托管 KMS 的加密方式,对象存储对每个对象生成唯一的密钥,并且使用 AES256 对该对象加密,之后存储用 KMS 加密后的密钥而抛弃密钥原文,这样从对象存储本身没有任何办法来解密该对象。
KM 服务本身使用了符合国家规范的硬件安全模块(HSM)保护您的密钥的机密性和完整性,您的纯文本密钥不会以任何形式存储到任何存储中,且该密钥不会传输到 KMS 服务区域之外。
审计
对对象存储 / 密钥系统的每次访问,对象存储都会记录下访问的详细信息,提供给用户去发现预期外的访问。
访问隔离
作为一个多租户的系统,对象存储有丰富的流控限速功能,并且对每个用户 /bucket 生效,确保用户之间不会互相影响。
今年 618 大促已经是对象存储第五次支持京东零售大促了,这是一次例行的支持却也是一个全新的起点。从本次 618 开始,京东视频等重要数据放弃了在本地的备份,也就是说对象存储成为了这些业务的唯一存储。