10 月,开发者不可错过的开源大数据大会-2021 WeDataSphere 社区大会深圳站 了解详情
写点什么

做容灾,冷备是不是个好方案?

2020 年 3 月 17 日

做容灾,冷备是不是个好方案?

主备、冷备、热备、双活、多活、同城、异地、多云,等等等等,这些保证业务高可用和容灾名词,我们经常会听到,不绝于耳。


但是,真的当我们自己要去建设,选择方案时,就发现不知道该怎么选择和搭配了。


结合近期我们的一些讨论,准备用几篇文章简单分享下我们的理解,今天先聊冷备。


冷备是不是个好方案?

这里的冷备我们可以理解为,是主站系统核心链路的镜像站点,应用、各类分布式服务以及底层基础设施都是独立,且启动的。


它跟主站唯一的差别就是,正常情况下,不承载任何线上流量。


理论上,只要有状态的数据(也就是各类分布式服务,如数据库、缓存、消息等组件)同步好,接入层流量能够灵活调度,当出现问题的时候,切入口流量,就可以顺畅的切过去。


看上去很美好,但是实际操作起来,基本不可行。


这里有一个关键点,就是业务应用,应用的代码和配置是随时在变化的。


原则上,我们可以通过持续交付和运维自动化等等手段,确保每次变更都能够同步到备站点,并通过流程约束不允许有外部操作。


所以,手段上,我们可以做到非常完备,流程上,我们可以设计的非常严密。


但是,我们始终绕不开的一个命题,只要不承载真实的线上业务流量,我们就无法证明这个系统是可用的。


何况,有可能是好几个月我们都不会发生真实的切换动作,所以,一个几个月没有经过线上流量检验的系统,在真正需要切换时,不会有任何人敢决策直接切换的。


当然,以上是我们的直接推断,确实行不通。但是我们仍然要经过一些详细的论证,从其它角度看是否有解。


从另外一个角度的论证过程

当时我们讨论在冷备的前提下,应该怎么保证系统的可用性,没想到,论证的过程,反而进一步证实了冷备只是一个美好的愿望。


1、通过模拟压测的方式。

但是我们知道,压测的模型是根据线上业务模型来定制的,但是业务场景和逻辑每天都在发生变化,压测模型的同步有时是跟不上业务模型变化的。


况且这个日常工作量要靠人,无法做到自动生成,所以基本不可持续。


再就是,压测的结果检验是通过技术指标衡量,而非业务指标,也就是是否 200ok,或者出现 5xx 之类的错误。


业务逻辑上是否正确,并没有办法确保。这种情况就极易造成数据污染。数据故障的影响范围远远超过服务不可用的影响。


所以,压测可以最大程度评估系统容量,但是无法保证系统业务正确性。


2、切换后,接入线上流量前,QA 介入验证。

理由同上,工作量大,也无法覆盖到所有场景,时间不可控,完全起不到冷备节点的快速承载业务效果。


3、定期模拟演练,确保系统周期范围内可用

但是这里就有一个前提,冷备站点的建设目标,并不是全量建设,而是在极端状况下,确保核心业务临时可用,当主站点恢复后,仍然要切回去。


这里暗含的一个意思就是,一旦需要做这个动作,业务必然有损,而且涉及范围非常大,这就意味着,每一次演练都要付出极大的业务代价。


从这个角度,产品运营及决策者们是不会允许你经常干这种事情的。


到这里,你会发现,连日常演练的条件都不具备了。


4、一个绕不开的限制条件

数据同步必然是单向的,为了保证数据一致,通常要确保备用站点是禁写的,以防止各类误操作引起的数据污染。


所以,即使上面几个方案可行,基础条件上又不满足,因为根本无法写入数据,关键的业务逻辑根本不具备验证条件。


结论

冷备只能是冷备,关键时刻并不能起到快速承载业务的效果,在业务容灾建设时,这个思路其实是不可行的。


但是对于部分组件,比如数据库、大数据、文件,这些存储类的部件,做冷备是有重大意义的。


也就是,后面我们在提到冷备时,应该叫做数据冷备、文件冷备、源代码冷备才有意义,或许会更准确些。


本文转载自成哥的世界公众号。


原文链接:https://mp.weixin.qq.com/s/aORRbfURAE4LUP97CY4bjA


2020 年 3 月 17 日 22:07430

评论

发布
暂无评论
发现更多内容

Flash Player终将成为历史,HTML5正站在舞台的中央

Geek_Willie

云上可靠性测试:让我们一起给开发找点事儿

华为云开发者社区

安全 云服务 可靠性

姐夫半夜不睡觉,竟躲在厕所看这“57道Redis面试题”?

Java架构之路

Java 程序员 架构 面试 编程语言

测开之函数进阶· 第4篇《匿名函数》

清菡

测试开发

JAVA并发编程原理与实战

Geek_53983e

原理 java 并发 实战

加密猫MIMI系统APP开发|加密猫MIMI软件开发

系统开发

K8S 资源可视化利器:Kubectl-Graph

郭旭东

Kubernetes Kubernetes Plugin

微服务架构思考 - 理清楚,管起来

jorden wang

面试必问的 Redis:主从复制

Java架构师迁哥

LeetCode题解:剑指 Offer 40. 最小的k个数,快速排序,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

APICloud AVM 多端开发 |外卖 app 开发案例源码教程(上)

APICloud

Vue 前端 Web Worker 移动终端 前端训练

Java岗四面字节跳动成功之前,我都刷了那些面试题以及做了那些准备!

Java架构之路

Java 程序员 架构 面试 编程语言

GitHub标星力推!我掏空了各大搜索引擎,给你整理了188道Java面试题,满满干货记得收藏

Java架构之路

Java 程序员 架构 面试 编程语言

Spring Cloud 2020.0.0 正式发布,对开发者来说意味着什么?

阿里巴巴云原生

阿里云 容器 开发者 云原生 架构师

架构大作业一

Geek_michael

极客大学架构师训练营

Java:利用BigDecimal类巧妙处理Double类型精度丢失

程序员小毕

Java 架构 编程语言 阿里 开发

用一把吃鸡的时间,免费上云搭建网站应用

华为云开发者社区

服务 建站

软件测试必须掌握的http网络协议知识

测试人生路

软件测试

速来围观!阿里P8大牛写出的JDK源码剖析及大型网站技术架构与业务架构融合之道

Java架构之路

Java 程序员 架构 面试 编程语言

CAP 原理 <笔记>

raox

极客大学架构师训练营

为什么香港云服务器更适合放新网站

德胜网络-阳

二十多岁的年纪是怎么成功四面字节跳动,最终拿到offer的?

Java架构之路

Java 程序员 架构 面试 编程语言

支持 gRPC 长链接,深度解读 Nacos 2.0 架构设计及新模型

阿里巴巴云原生

云计算 阿里云 开源 微服务 云原生

SpringBoot,来实现MySQL读写分离技术

Java架构师迁哥

7. JDK拍了拍你:字符串拼接一定记得用MessageFormat#format

YourBatman

Spring Framework 类型转换 MessageFormat DateFormat

在wildfly 21中搭建cluster集群

程序那些事

程序那些事 wildfly wildfly21 集群部署 集群架构

2021 云原生走向何处?

云原生实验室

一个企业用电有多浪费?90后开发者大显身手,让每度电从此更“聪明”!

华为云开发者社区

AI 物联网 智慧园区

Spring知识点总结!已整理成142页离线文档(源码笔记+思维导图)

Crud的程序员

spring 程序员

PostgreSQL 13 RPM中有哪些新功能?

PostgreSQLChina

数据库 postgresql 开源

Demo分享丨看ModelArts与HiLens是如何让车自己跑起来的

华为云开发者社区

人工智能 智能车 hilens

开源中间件技术学习路线

开源中间件技术学习路线

做容灾,冷备是不是个好方案?-InfoQ