说到公有云容灾,大家首先想到的是云上数据备份。
然而,随着企业核心业务逐渐从线下迁移到云上,客户提出了更高的要求。如何确保云上业务的高可用、数据的高可靠,这对云厂商提出了新的挑战。
腾讯云作为全球领先的云厂商,服务了上百万家客户。在公有云服务之初,就凭借自身业务的多年积累,从机房基础设施建设,到计算、存储、网络、安全等各种服务,为客户在云上构建高可用、数据高可靠的业务,提供了完善的产品和解决方案。
业务的容灾涉及到诸多方面,以典型的三层架构为例,架构上要确保每一层都具备高可用能力,才能保障整体业务的高可用。这其中,数据层作为业务的核心,是我们首要考虑的。
在这篇文章中,我们聚焦在数据层容灾,介绍一下腾讯云COS对象存储的容灾解决方案。
一、Region 和 AZ 的概念
首先介绍一下 Region 和 AZ 的概念。
Region-区域/地域:简单来说,可以将 Region 理解为不同城市的机房。公有云的 Region 遍布全球,国内的话,通常会有北京 Region、上海 Region、广州 Region 等等。不同 Region 之间,一般只能通过公网连通。
AZ-可用区:可以理解为同一个城市的不同机房,是包含在 Region 内的。比如北京 Region,会包括多个 AZ,而单个 AZ 会有一个或多个 IDC 机房园区组成。AZ 之间通过高带宽、低时延、高冗余的专线网络连接,保证跨 AZ 之间数据传输的安全可靠。
一个 Region 多个 AZ 组成,从机房电力、网络等层面来保障一个 AZ 出现故障的时候不会影响到另外一个可用区。
二、跨可用区容灾
如果您的应用程序已经构建在腾讯云上,可以借助 COS 对象存储多 AZ(Available Zone)来提高数据层的可用性。
多 AZ(Available Zone)是指由腾讯云对象存储推出的多 AZ 存储架构,这一存储架构能够为用户数据提供数据中心级别的容灾能力。
实现原理上,数据会被打散成若干个分块,同时按照纠删码算法计算出对应的校验码分块。原始数据分块和校验码分块会被打散并均分存储到该地域的不同 AZ 数据中心中,实现同城容灾。
多 AZ 特性为客户提供99.9999999999%(12个9)的数据设计可靠性和99.995%的服务设计可用性。在上传数据到对象存储时,只需要通过指定对象的存储类型,即可将对象存放到多 AZ 的地域。
当您启用多 AZ 功能后,客户数据分散存储在城市中多个不同的 AZ 数据中心,当某个 AZ 数据中心因为自然灾害、断电等极端情况导致整体故障时,其他 AZ 数据中心的数据依旧可以正常读取和写入,保障客户数据持久存储不丢失,维持客户业务数据连续性和高可用。
三、跨区域容灾
如果您的业务有更高的可用性需求,除了借助 COS 对象存储多 AZ 之外,还可以在不同地域保存数据副本,来进一步提高数据层的可用性。
COS 对象存储桶跨区域复制,指由腾讯云对象存储推出的一项数据异步跨区域复制功能。存储桶复制是针对存储桶的一项配置,通过配置存储桶复制规则,可以在不同存储桶中自动、异步地复制增量对象。
启用存储桶复制后,COS 将精确复制源存储桶中的对象内容(如对象元数据和版本 ID 等)到目标存储桶中,复制的对象副本拥有完全一致的属性信息。此外,源存储桶中对于对象的操作,如添加对象、删除对象等操作,也将被复制到目标存储桶中。
通过存储桶跨区域复制实现数据的异地容灾,当某个数据中心因为不可抗因素损毁时,另一个存储桶的数据中心仍然可以提供副本数据以供您使用。
除了提供高可用之外,存储桶跨区域复制可以满足行业对数据安全的合规性要求。同时,当您的客户在不同地理位置访问对象时,在与客户地理位置最近的存储桶中维护对象副本,最大限度上缩短客户的访问延迟,有利于提高您的产品体验。
四、版本控制
无论是跨可用区容灾,还是跨区域容灾,如果数据被误删除,将导致数据永久丢失。
为了避免用户误删或应用程序故障而丢失的数据,COS 对象存储推出了版本控制功能。
版本控制用于实现在相同存储桶中存放同一对象的多个版本。例如,在一个存储桶中,您可以存放多个对象键同为 picture.jpg 的对象,但其版本 ID 不同,例如100000、100101和120002等。
用户在为某一存储桶开启版本控制功能后,可以根据版本 ID 查询、删除或还原存放在存储桶中的对象。这有助于恢复被用户误删或应用程序故障而丢失的数据。例如,用户在对版本控制的对象进行删除操作时:
- 如果需要删除对象 (非完全删除),COS 会为被删除的对象插入删除标记,该标记将作为当前对象版本,您可以根据删除标记恢复以前的版本。
- 如果需要替换对象,对象存储会为新上传的对象插入新的版本 ID,您仍然可以根据版本 ID 恢复被替换前的对象。
存储桶可处于三种版本控制状态:未启用版本控制状态、启用版本控制状态和暂停版本控制状态。
- 未启用版本控制状态:指存储桶的默认初始状态,此时版本控制功能关闭。
- 启用版本控制状态:指开启存储桶版本控制功能,此时为版本控制开启状态,版本控制状态将应用到该存储桶中的所有对象。您对存储桶首次启用版本控制后,新增上传到该存储桶中的对象将拥有唯一的版本 ID。
- 暂停版本控制状态:指存储桶的版本控制由开启状态变更为暂停状态(无法返回未启用版本控制状态),此后往存储桶中上传的对象将不再存放版本控制的对象。
存储桶处于不同的版本控制状态下,您均可对不同状态的存储桶中的对象进行上传、查询和删除操作。
五、上传防覆盖
除开一些不可抗力因素,很多时候,看起来没有风险的操作也是导致数据异常的一大原因,比如,COS 是保持最终一致性的,所以,当有同名文件上传时,旧文件会被覆盖,为了避免非预期的覆盖动作,用户就需要在自己的业务逻辑中维护一套完整的重名校验系统,当然,用户也可以选择开启版本控制,但开启版本控制后,多版本对象的管理逻辑也比较复杂,也会带来额外的存储量,而且,用户往往只需要对部分特定文件禁止覆盖写的动作,不需要版本控制相较厚重的功能逻辑。
针对这种情况,腾讯云对象存储 COS 能够提供存储桶级别和对象级别的防覆盖机制。
用户可以直接开启存储桶的防覆盖功能,开启后,存储桶会禁止一切同名文件的上传动作,当上传同名文件时,COS 会拒绝上传请求,以保证存储桶中的文件不会被覆盖。
如果只是想防止存储桶中部分特定文件被覆盖,用户可以在上传这些文件时,带上特殊头部,带上该头部后,上传请求会先对桶中文件进行校验,如果桶中无同名文件则上传成功,如果桶中有同名文件,则上传失败。
开启了上传防覆盖功能后,用户仍然可以对文件进行改名,删除等操作,在一些合规场景下,仅仅是防止覆盖,还远远不够。
六、对象锁定
在很多金融场景下,根据合规政策,文件需要强制性的保留,不允许覆盖,删除,修改等等,需要留底足够的时间,这个时候,就需要通过对象锁定功能来满足需求。
用户开启存储桶配置对象锁定后,在保留周期内:
- 对象不可删除、修改;
- 对象存储类型不能修改;
- 对象 HTTP 头部+用户元数据都不能修改,包括 Content-Type、Content-Encoding、Content-Language、Content-Disposition、Cache-Control、Expires、x-cos-meta-;
对象锁定功能可以很好的协助客户满足合规性的政策要求。
七、写到最后
无论您的业务已经构建在腾讯云上或者正在准备迁移上云,都可以借助 COS 对象存储提供的容灾能力来保护您的业务数据。通过多 AZ、跨区域复制、版本控制等功能,实现数据的冗余存储。
与本地辅助数据中心相比,基于云的灾难恢复可以提供更高的可靠性、可用性和安全性,而不需要重复的硬件、计算、网络和软件,在保障 RPO 和 RTO 的情况下,可以显著降低容灾 TCO。