域名备案后网站打不开,公司装修属于什么费用,网络营销的推广方法有哪些,未来网络设计蓝图作者#xff1a;庄宇
在设计系统架构时#xff0c;我们必须假设任何组件和任何基础设施可能会在任何时间失效#xff0c;例如#xff1a;自然灾害#xff0c;电力中断#xff0c;网络中断#xff0c;错误的系统变更等。为了应对挑战#xff0c;我们必须设计合适的容灾…作者庄宇
在设计系统架构时我们必须假设任何组件和任何基础设施可能会在任何时间失效例如自然灾害电力中断网络中断错误的系统变更等。为了应对挑战我们必须设计合适的容灾架构。
本文介绍如何以 K8s 集群包括ACK 集群他云集群和本地 IDC K8s 集群为基础结合阿里云云产品网络数据库中间件可观测设计容灾架构构建一个“韧性”系统。
容灾目标
Recovery time objectiveRTO
服务中断与服务恢复之间可接受的最大延迟时间。决定服务停机的可接受时长。
Recovery point objectiveRPO
自上一个数据恢复点以来可接受的最大时间量。决定可接受的数据丢失或重建。 对于 RTO 和 RPO数值越低代表停机时间和数据丢失越少但是越低的 RTO 和 RPO 会导致资源成本和运维复杂性越高。因此您需要根据工作负载的重要性指定适当的 RTO 和 RPO。
容灾策略 上图中描述的常见的 3 种容灾策略备份与恢复、主备、双活不同的容灾策略对应了不同的收益和成本。您需要综合分析业务的重要性、风险、可投入的成本等以选择适合的容灾策略。
备份与恢复Backup-Restore
在系统运行时备份应用和数据在灾难发生时在另一个地点恢复应用和数据并切换业务流量。由于数据无法实时备份在恢复数据时会有一定的数据丢失同时如果数据量较大恢复数据时间可能较长。 主备Active-Standby
在主备模式中主 Location 处理所有的业务流量备用 location 可以启动较少的应用实例节省成本并周期发送测试流量以验证系统有效性。在灾难发生时做数据库主备切换扩容应用实例数并切换业务流量。 双活Active-Active
在双活模式中2 个 Location 启动相同的应用实例数同时处理业务流量。在灾难发生时做数据库主备切换并切换业务流量。 容灾范围
多可用区Multi-AZ
阿里云地域Region [ 11] 包含多个可用区AZ可用区AZ是电力和网络互相独立的物理区域对停电断网等局部中断的容灾场景可以使用多个可用区AZ设计容灾策略。由于可用区间的网络延时较短可以更容易实现数据部分的容灾方案包括数据库、缓存和消息等。
多地域Multi-Region
为了应对更大范围的灾难故障事件这些事件可能会影响同地域Region的多个可用区AZ您可以使用多个地域Region设计容灾策略。但由于地域间更大网络延时容灾方案复杂度和实现成本较高。
在选择多可用区AZ或者多地域Region容灾方案时需要重点考虑有状态应用和依赖的云产品例如数据库、缓存和消息是否支持多地域或者多可用区容灾。
方案示例
备份与恢复Backup Restore
公共云跨可用区和跨地域备份与恢复 通过 ACK One 备份中心 [3 ] 可以备份 ACK 集群中的应用包括无状态应用和有状态应用对有状态应用在备份应用 YAML 的同时可以备份相关 Storage 数据。 ACK One 备份中心集成云产品云盘快照 [ 12] 文件存储 NAS [13 ] 对象存储 OSS [14 ] 和云备份 [15 ] 分别支持应用 YAML云盘 PV文件系统 PV 的一键备份。 备份后可以随时将应用和 Storage 数据恢复到任意地域和可用区的 ACK 集群。 阿里云数据库服务的备份与恢复可以参考相应数据产品的文档例如RDS MySQL 数据库备份恢复 [ 16] RDS 实例间数据迁移 [17 ] 。 混合云备份与恢复 通过 ACK One 注册集群 [ 4] 可以将 IDC 自建或者非阿里云 K8s 集群接入到阿里云 ACK 控制台。 接入 ACK One 注册集群后通过 ACK One 备份中心可以备份 IDC 自建和非阿里云 K8s 集群中的应用包括无状态应用和有状态应用对有状态应用在备份应用 YAML 的同时可以备份相关 Storage 数据。 备份后可以随时将应用Deployment/Statefulset和数据PV/PVC恢复到任意地域和可用区的 ACK 集群。 总结
备份恢复方案实施成本较低但 RTO 和 RPO 相对较长取决于数据量的大小和应用的复杂度。备份中心能够提供的全量备份增量备份能力减少 RTO 和 RPO 时间。
备份恢复作为容灾的兜底方案重要性高在系统运维的过程中要保证备份的及时性和可恢复性。
另外许多用户选择通过备份恢复功能实现应用的跨集群迁移场景如下 业务上云将本地 IDC 集群中的应用迁移到阿里云 ACK 集群中参考 IDC 应用上云迁移 [ 18] 。 集群版本较老版本升级有稳定性风险可以先创建新版本集群通过备份恢复将应用迁移到新版本集群运行参考跨版本集群迁移 [ 19] 。 用户在收敛云账号或者组织调整时需要跨账号集群接入 [ 20] 和跨集群迁移应用 [21 ] 。
多集群 Service
在应用迁移的过程中由于应用的数量较多需要分批迁移同时应用间存在调用关系。此时在网络打通的前提下可以使用 ACK One 舰队多集群 Service [ 5] 实现应用 Kubernetes Service 跨集群访问。如下图所示ACK One 舰队多集群 Service可以将 Cluster1 的 Applcation2 的 Kubernetes Service包含 endpoints注入到 Cluster2Cluster2 上的 Application1 可以访问 Cluster1 上的 Application2。 在专线拉通的前提下通过 ACK One 注册集群IDC 和非阿里云的 K8s 集群也可以是用 ACK One 舰队多集群 Service。
单地域多可用区容灾
基于 DNS 流量分发 通过 ACK One GitOps 应用分发 [6 ] 在 2 个 ACK 集群中部署应用实现基于 Git 仓库的持续一致性部署。 通过全局流量管理GTM [22 ] 做 DNS 解析实现负载分发并监控系统运行健康状态自动触发容灾切换。 每个 AZ 内通过 ACK Ingress [ 7] 实现 7 层流量管理。 备集群和主集群的应用版本相同但备集群节点较少应用副本较少节省成本。 在主系统不可用时全局流量管理GTM会将服务域名 DNS 解析到备用系统完成主备切换。 由于流量的增长备集群中 ACK HPA [8 ] 会扩容应用副本进而触发 ACK Cluster Autocaler [9 ] 扩容集群节点。 阿里云中间件消息缓存的跨可用区容灾可参考相关文档例如云消息队列 RocketMQ 版实例规格 [ 23] 云消息队列 Kafka 版实例规格 [ 24] 云原生内存数据库 Tair 容灾方案 [ 25] 。 阿里云数据库服务的跨可用区容灾可参考相关文档例如RDS MySQL 数据库搭建高可用架构 [ 26] 。 注意 本方案基于 DNS 流量转发由于 DNS 缓存在灾难事件发生时部分业务依然路由到主系统造成一定的业务损失。 需要在 2 个集群中分别配置维护 7 层 ingress 规则成本高。系统正常运行状态 灾难事件发生AZ 不可用时系统主备切换GTM 将流量切换到 AZ2ACK Cluste2 的应用实例自动扩展中间件和数据库多可用区高可用切换。 基于 ACK One 多集群网关 通过 ACK One GitOps 应用分发在 2 个 ACK 集群中部署应用实现基于 Git 仓库的持续一致性部署。 通过 ACK One 多集群网关 [ 10] 定义标准 K8s Ingress 规则YAML 格式实现 7 层流量治理实现流量的主备模式分发。多集群网关为跨可用区高可用。 备集群和主集群的应用版本相同但备集群节点较少应用副本较少节省成本。可以发送特定 http header 的测试流量多集群网关转发到备集群以验证工作状态。 在主系统不可用时ACK One 多集群网关会自动将业务流量备用系统完成主备切换。 由于流量的增长备集群中 ACK HPA 会扩容应用副本进而触发 ACK Cluster Autocaler 扩容集群节点。 阿里云数据库服务的跨可用区容灾可参考相关文档例如RDS MySQL 数据库搭建高可用架构。 注意 本方案为 HTTP 七层流量转发配合 7 层健康检查主备切换时相比 DNS 方案大幅减低业务流量损失。 网关侧统一支持基于 Ingress 规则的流量治理相比 DNS 方案合并了四层负载均衡 SLB 和七层 Ingress 网关降低系统复杂度和维护成本。
系统正常运行状态 灾难事件发生AZ 不可用时系统主备切换多集群网关MSE 云原生网关自动将流量切换到 AZ2 的 ACK Cluste2 中 应用实例自动扩展。 跨可用区双活
以上 2 个方案以主备模式为例描述了系统架构。同样的架构基于 DNS 流量分发和 ACK One 多集群网关也支持双活场景可以配置流量分发比例例如50% : 50%支持自动 failover 切换。在双活的场景下每个集群中的应用副本数需要根据流量分发比例确定集群中需要配置弹性伸缩以支持流量切换情况下的流量增长。
总结
单地域多可用区方案实现的成本较低可以利用云产品包括网关容器中间件数据库多可用区部署和多可用区高可用快速实现容灾对业务改造较小。但此方案仅可应对单个可用区的灾难和故障无法应对地域级的灾难故障。
单地域云IDC 容灾方案
方案架构与单地域多可用区容灾方案类似要点如下 云上 VPC 与 IDC 建立专线连接打通管控与数据通道。 通过 ACK One 注册集群接入 IDC 集群使用阿里云强大可观测和安全能力统一管理 IDC 集群和 ACK 集群。 通过 ACK One GitOps 应用分发在 2 个集群中部署应用实现基于 Git 仓库的持续一致性部署。
基于 DNS 流量分发单地域云上和云下双活 基于 ACK One 多集群网关单地域云上和云下双活 多地域容灾
如果业务规模大重要性高服务的用户数量多范围广单地域的容灾方案就无法满足业务高可用要求这时需要多地域容灾方案。在多个地域独立部署业务系统保证每个地域的业务系统具有单独闭环提供完整的服务能力。 通过全局流量管理GTM实现用户就近接入相应地域。 通过 ACK One GitOps 应用分发在 2 个 ACK 集群中部署应用实现基于 Git 仓库的持续一致性部署。 缓存多地域高可用方案可以参考阿里云产品相关文档例如Tair 全球多话 [ 27] 。 数据库跨地域高可用方案可以参考阿里数据库云产品相关文档例如云原生数据库 PolarDB MySQL 全球数据库 [ 28] 。 地域内可以采用单地域多可用区容灾方案。 单元化多活部署
区别与前一方案多地域单元化多活部署需要设计分片规则对应用和数据进行分片使得单元提供面向部分数据分片的完整服务能力实现业务安全故障隔离水平扩展服务庞大的用户群体。一般分为中心单元拥有所有用户数据和多个子单元分片后详细数据。此种方式需要业务系统支持自定义分流规则数据拆分单元间配合等复杂度高。 总结
各种灾难事件会影响您业务的可用性通过使用阿里云的相关云产品的容灾能力可以减轻或者消除这些影响。首先需要了解业务可用性需求从而选择一个适当的容灾策略然后使用阿里云相关云产品包括容器容器服务 Kubernetes 版 ACK [ 1] 和分布式云容器平台 ACK One [ 2] 、消息、缓存、数据库等设计容灾架构快速达到您业务可用性要求的恢复时间目标 RTO 和恢复点目标 RPO。
相关链接
[1] 容器服务 Kubernetes 版 ACK
https://help.aliyun.com/zh/ack/
[2] 分布式云容器平台 ACK One
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/product-overview/ack-one-overview
[3] ACK One 备份中心
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/backup-center-overview
[4] ACK One 注册集群
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/overview-9
[5] ACK One 舰队多集群 Service
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/mcs-overview
[6] ACK One GitOps 应用分发
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/gitops-overview
[7] ACK Ingress
https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/ingress-overview
[8] ACK HPA
https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/horizontal-pod-autoscaling
[9] ACK Cluster Autocaler
https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/auto-scaling-of-nodes
[10] ACK One 多集群网关
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/multi-cluster-gateway-overview
[11] 地域Region
https://help.aliyun.com/document_detail/40654.html#concept-z04-bg5-j8w
[12] 云盘快照
https://help.aliyun.com/zh/ecs/user-guide/copy-a-snapshot
[13] 文件存储 NAS
https://help.aliyun.com/zh/nas/product-overview/what-is-nas
[14] 对象存储 OSS
https://help.aliyun.com/zh/oss/product-overview/what-is-oss
[15] 云备份
https://help.aliyun.com/zh/cloud-backup/product-overview/what-is-hbr
[16] RDS MySQL 数据库备份恢复
https://help.aliyun.com/zh/flink/developer-reference/log-service-connector
[17] RDS 实例间数据迁移
https://help.aliyun.com/zh/rds/apsaradb-rds-for-mysql/migrate-data-between-apsaradb-rds-for-mysql-instances
[18] IDC 应用上云迁移
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/migrate-applications-from-self-managed-kubernetes-clusters-to-ack-clusters
[19] 跨版本集群迁移
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/use-backup-center-to-migrate-applications-from-clusters-running-lower-kubernetes-versions
[20] 跨账号集群接入
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/use-cases/use-ack-one-to-manage-clusters-across-cloud-platforms-and-alibaba-cloud-accounts
[21] 跨集群迁移应用
https://help.aliyun.com/zh/ack/distributed-cloud-container-platform-for-kubernetes/user-guide/migrate-applications-across-clusters-in-different-regions
[22] 全局流量管理GTM
https://help.aliyun.com/document_detail/189587.html
[23] 云消息队列 RocketMQ 版实例规格
https://help.aliyun.com/zh/apsaramq-for-rocketmq/cloud-message-queue-rocketmq-5-x-series/product-overview/instance-specifications
[24] 云消息队列 Kafka 版实例规格
https://help.aliyun.com/zh/apsaramq-for-kafka/cloud-message-queue-for-kafka/product-overview/instance-editions
[25] 云原生内存数据库 Tair 容灾方案
https://help.aliyun.com/zh/tair/product-overview/disaster-recovery
[26] RDS MySQL 数据库搭建高可用架构
https://help.aliyun.com/zh/rds/apsaradb-rds-for-mysql/build-a-high-availability-architecture
[27] Tair 全球多话
https://help.aliyun.com/zh/tair/user-guide/overview-of-global-distributed-cache-for-tair
[28] 云原生数据库 PolarDB MySQL 全球数据库
https://help.aliyun.com/zh/polardb/polardb-for-mysql/user-guide/overview-49