本文来自网易云社区html
做者:王健数据库
摘要浏览器
NOS(网易对象存储)在实现多机房(杭州机房,北京机房等)部署后,容许一个用户在建桶时选择桶所属机房。在此基础上,咱们实现了跨机房的数据复制,进一步实现了跨机房的数据灾备方案。用户能够:安全
经过简单的配置,便可让本身上传的数据异步准实时地同步到另外一个机房,实现跨机房的数据复制服务器
在发生重大灾难致使整个机房没法访问时,能够将桶的上传下载操做切换到灾备机房,极大提高服务可用性并发
灾备恢复服务切回主机房后,灾备期间全部上传到灾备机房的数据都会同步回主机房,主机房有用户全量的数据运维
经过接入NOS的子服务NCDN和WanProxy,整个灾备过程能够对用户彻底透明异步
本文主要讨论NOS多机房部署、跨机房数据复制以及跨机房灾备的设计与实现。优化
1. 多机房部署设计
NOS实现多机房部署的出发点有两个:
可让用户自主选择将桶建立在哪一个机房(杭州机房,北京机房等)。用户能够根据本身服务器的地址就近选择桶所属机房,提升上传下载速度;
能够进一步实现跨机房的数据灾备,提升灾难状况下的系统可用性
NOS多机房部署图以下所示:
如图,两个机房间除了极少许的信息(桶信息)须要同步外,各自都至关于一套独立的NOS集群。
多机房部署状况下,CDN的回源地址也须要根据桶所属的分区来进行配置,以下图所示:
2. 跨机房数据复制
跨机房的数据复制是跨机房灾备的基础,经过实现数据的机房间冗余,才能在一个机房故障时,将服务切到另外一个机房并继续提供读写服务。
跨机房数据复制的核心设计以下图:
基本逻辑是:
当一个桶配置了跨分区灾备的属性后,该桶的全部更新操做,均会记录在NOS_Sync表中(为了保证主从分区数据的一致性,写入NOS_Sync表必须同原更新操做放在一个事务中)
NosSyncer同步程序按期将NOS_Sync表中的数据读出,进行聚合处理后,将数据同步到指定的分区
跨分区数据复制有一些问题值得讨论:
为何选择将同步信息放在数据库中?
其实,最初想到的办法并非将同步信息写到数据库中,而是在更新操做完成后,记录一条日志,并经过日志收集,日志处理,处理结果上传到队列服务,再由NosSyncer从队列服务中得到待同步的任务并执行数据复制。这种实现方式的好处是,整个数据同步的逻辑是离线的,线上的服务只须要输出一条日志便可,跨分区数据复制逻辑不会对当前的线上业务产生影响。
而该方案有两个明显的问题:
1)NOS支持覆盖写操做,例如两个用户能够同时上传一个名为A的对象,后上传成功的会覆盖先上传的。所以,同步信息的顺序应该同实际插入的顺序一致,才能保证同步到灾备分区时也是一样的操做顺序,保证主从分区的数据一致性。而采用日志这种方式,多个NOS服务器上的日志收集顺序是没法保证前后的(即便日志带时间戳)。该问题能够经过抓取binlog日志来保证顺序性。
2)该方案须要依赖日志收集,日志处理,队列等一系列外部的服务,须要的部署和运维精力较大。同时,在咱们设计该系统时,这些服务的可靠性还有待验证,暂时不适用于咱们的服务。
为何将插入NOS_Sync表的操做同更新操做放在同一个事务里?
这主要是为了保证全部的更新操做和NOS_Sync表中的同步信息一一对应,而同步信息按顺序插入,同步程序只须要顺序读取同步信息并以此执行便可,这能够保证复制操做的执行顺序和实际更新顺序一致。
数据复制的逻辑能够进行什么优化?
数据复制优化有两个方向:1) 并发复制; 2)减小复制数据量;
具体作法是,在取出一组同步信息后,首先在内存中对同步信息进行处理:
1)过滤没必要要的同步操做(例如:上传A(file1),上传A(file2),上传A(file3) 能够合并为 上传A(file3))
2)确认哪些操做能够并发执行(例如:上传A(file1),上传B(file2)直接能够并发执行)
在进行数据复制时,首先调用去重操做,若是能够去重上传,则不传输数据。
3. 跨机房数据灾备
3.1. 灾备状况分析
从用户的视角来看,NOS跨机房灾备须要考虑上传下载等多种状况:
如图:
下行灾备状况一:用户过CDN下载,灾备时直接切换CDN回源地址,灾备过程对客户端透明(灾备切换时间约5分钟)
下行灾备状况二:有逻辑的客户端,在感知到主分区故障后,主动切换访问到灾备分区,灾备过程须要客户端配合
下行灾备状况三:无逻辑的客户端(如浏览器),若要灾备则须要切换域名,因为切换域名生效时间太久,线上基本不会操做
上行灾备状况一:用户过WanProxy进行上传,灾备时WanProxy自动将上传切换到灾备机房,灾备过程对用户透明
上行灾备状况2、状况三:客户端依赖产品的上传服务器来进行上传,当发生灾备时,须要上传服务器切换(或通知用户切换)上传地址,灾备过程须要上传服务器配合
基于以上的讨论,咱们将来推荐的方式将是,客户端经过WanProxy进行上传,经过CDN进行下载,将灾备的逻辑通通交给NOS来作。
3.2. 灾备切换
灾备切换逻辑以下:
如图,涉及灾备的主要是两个数据库字段:
灾备分区 —— 主机房发生灾难时服务切到哪里,正常状态下,数据从主机房复制到灾备机房
是否切换 —— 主机房发生灾难时,经过该字段设置主备切换
3.3. 使用建议
若是用户对本身的数据有极高的可用性要求,能够尝试开启灾备服务,此处有几个建议:
因为硬件条件限制(机房间无专线,数据传输走公网),所以不建议对大对象(如视频)实施灾备服务。
用户能够将本身的数据按照重要程度放在多个桶中(如视频,图片,重要文件等),并对最重要的桶开启灾备服务,保证灾难状态时能够提供最基本的服务。
逐渐将产品的上传切到WanProxy上传服务,将下载切到NCDN服务,从而透明地实现跨机房灾备。
网易云对象存储服务NOS 支持标准 RESTful API 接口,并提供丰富的数据在线处理服务,一站式解决互联网时代非结构化数据管理难题。
网易云免费体验馆,0成本体验20+款云产品!
更多网易研发、产品、运营经验分享请访问网易云社区。
相关文章:
【推荐】 网易云安全DDoS高防全新上线 ,游戏防御实力领先