0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

测试和运维的挑战

马哥Linux运维 来源:马哥Linux运维 作者:马哥Linux运维 2022-10-09 11:00 次阅读

前言

后台服务可以划分为两类,有状态和无状态。高可用对于无状态的应用来说是比较简单的,无状态的应用,只需要通过 F5 或者任何代理的方式就可以很好的解决。后文描述的主要是针对有状态的服务进行分析。 服务端进行状态维护主要是通过磁盘或内存进行保存,比如 MySQL 数据库,redis 等内存数据库。除了这两种类型的维护方式,还有 jvm 的内存的状态维持,但jvm的状态生命周期通常很短。

高可用

1、高可用的一些解决方案

高可用,从发展来看,大致经过了这几个过程:

冷备

双机热备

同城双活

异地双活

异地多活

在聊异地多活的时候,还是先看一些其他的方案,这有利于我们理解很多设计的缘由。

冷备

冷备,通过停止数据库对外服务的能力,通过文件拷贝的方式将数据快速进行备份归档的操作方式。简而言之,冷备,就是复制粘贴,在 linux 上通过 cp 命令就可以很快完成。可以通过人为操作,或者定时脚本进行。有如下好处:

简单

快速备份(相对于其他备份方式)

快速恢复。只需要将备份文件拷贝回工作目录即完成恢复过程(亦或者修改数据库的配置,直接将备份的目录修改为数据库工作目录)。更甚,通过两次mv命令就可瞬间完成恢复。

可以按照时间点恢复。比如,几天前发生的拼多多优惠券漏洞被人刷掉很多钱,可以根据前一个时间点进行还原,“挽回损失”。

以上的好处,对于以前的软件来说,是很好的方式。但是对于现如今的很多场景,已经不好用了,因为:

服务需要停机。n个9肯定无法做到了。然后,以前我们的停机冷备是在凌晨没有人使用的时候进行,但是现在很多的互联网应用已经是面向全球了,所以,任何时候都是有人在使用的。

数据丢失。如果不采取措施,那么在完成了数据恢复后,备份时间点到还原时间内的数据会丢失。传统的做法,是冷备还原以后,通过数据库日志手动恢复数据。比如通过 redo日志,更甚者,我还曾经通过业务日志去手动回放请求恢复数据。恢复是极大的体力活,错误率高,恢复时间长。

冷备是全量备份。全量备份会造成磁盘空间浪费,以及容量不足的问题,只能通过将备份拷贝到其他移动设备上解决。所以,整个备份过程的时间其实更长了。

想象一下每天拷贝几个T的数据到移动硬盘上,需要多少移动硬盘和时间。并且,全量备份是无法定制化的,比如只备份某一些表,是无法做到的。

如何权衡冷备的利弊,是每个业务需要考虑的。

双机热备

热备,和冷备比起来,主要的差别是不用停机,一边备份一边提供服务。但还原的时候还是需要停机的。由于我们讨论的是和存储相关的,所以不将共享磁盘的方式看作双机热备。

Active/Standby模式

相当于1主1从,主节点对外提供服务,从节点作为backup。通过一些手段将数据从主节点同步到从节点,当故障发生时,将从节点设置为工作节点。数据同步的方式可以是偏软件层面,也可以是偏硬件层面的。偏软件层面的,比如mysql的master/slave方式,通过同步binlog的方式;sqlserver的订阅复制方式。偏硬件层面,通过扇区和磁盘的拦截等镜像技术,将数据拷贝到另外的磁盘。偏硬件的方式,也被叫做数据级灾备;偏软件的,被叫做应用级灾备。后文谈得更多的是应用级灾备。

双机互备

本质上还是Active/Standby,只是互为主从而已。双机互备并不能工作于同一个业务,只是在服务器角度来看,更好的压榨了可用的资源。比如,两个业务分别有库A和B,通过两个机器P和Q进行部署。那么对于A业务,P主Q从,对于B业务,Q主P从。整体上看起来是两个机器互为主备。这种架构下,读写分离是很好的,单写多读,减少冲突又提高了效率。

其他的高可用方案还可以参考各类数据库的多种部署模式,比如mysql的主从、双主多从、MHA;redis 的主从,哨兵,cluster 等等。

同城双活

前面讲到的几种方案,基本都是在一个局域网内进行的。业务发展到后面,有了同城多活的方案。和前面比起来,不信任的粒度从机器转为了机房。这种方案可以解决某个IDC机房整体挂掉的情况(停电,断网等)。

同城双活其实和前文提到的双机热备没有本质的区别,只是“距离”更远了,基本上还是一样(同城专线网速还是很快的)。双机热备提供了灾备能力,双机互备避免了过多的资源浪费。

程序代码的辅助下,有的业务还可以做到真正的双活,即同一个业务,双主,同时提供读写,只要处理好冲突的问题即可。需要注意的是,并不是所有的业务都能做到。

业界更多采用的是两地三中心的做法。远端的备份机房能更大的提供灾备能力,能更好的抵抗地震,恐袭等情况。双活的机器必须部署到同城,距离更远的城市作为灾备机房。灾备机房是不对外提供服务的,只作为备份使用,发生故障了才切流量到灾备机房;或者是只作为数据备份。原因主要在于:距离太远,网络延迟太大。

f2c30776-40c9-11ed-96c9-dac502259ad0.png 图1 两地三中心

如上图,用户流量通过负载均衡,将服务A的流量发送到IDC1,服务器集A;将服务B的流量发送到IDC2,服务器B;同时,服务器集a和b分别从A和B进行同城专线的数据同步,并且通过长距离的异地专线往IDC3进行同步。当任何一个IDC当机时,将所有流量切到同城的另一个IDC机房,完成了failover。

当城市1发生大面积故障时,比如发生地震导致IDC1和2同时停止工作,则数据在IDC3得以保全。同时,如果负载均衡仍然有效,也可以将流量全部转发到IDC3中。不过,此时IDC3机房的距离非常远,网络延迟变得很严重,通常用户的体验的会受到严重影响的。

f2d218ba-40c9-11ed-96c9-dac502259ad0.png 图2 两地三中心主从模式 上图是一种基于Master-Slave模式的两地三中心示意图。城市1中的两个机房作为1主1从,异地机房作为从。也可以采用同城双主+keepalived+vip的方式,或者MHA的方式进行failover。但城市2不能(最好不要)被选择为Master。

3、异地双活

同城双活可以应对大部分的灾备情况,但是碰到大面积停电,或者自然灾害的时候,服务依然会中断。对上面的两地三中心进行改造,在异地也部署前端入口节点和应用,在城市1停止服务后将流量切到城市2,可以在降低用户体验的情况下,进行降级。但用户的体验下降程度非常大。 所以大多数的互联网公司采用了异地双活的方案。 f2e08a6c-40c9-11ed-96c9-dac502259ad0.png 图3 简单的异地双活示意图 上图是一个简单的异地双活的示意图。流量经过LB后分发到两个城市的服务器集群中,服务器集群只连接本地的数据库集群,只有当本地的所有数据库集群均不能访问,才failover到异地的数据库集群中。 在这种方式下,由于异地网络问题,双向同步需要花费更多的时间。更长的同步时间将会导致更加严重的吞吐量下降,或者出现数据冲突的情况。吞吐量和冲突是两个对立的问题,你需要在其中进行权衡。例如,为了解决冲突,引入分布式锁/分布式事务;为了解决达到更高的吞吐量,利用中间状态、错误重试等手段,达到最终一致性;降低冲突,将数据进行恰当的sharding,尽可能在一个节点中完成整个事务。 对于一些无法接受最终一致性的业务,饿了么采用的是下图的方式: f2fce23e-40c9-11ed-96c9-dac502259ad0.jpg

对于个别一致性要求很高的应用,我们提供了一种强一致的方案(Global Zone),Globa Zone是一种跨机房的读写分离机制,所有的写操作被定向到一个 Master 机房进行,以保证一致性,读操作可以在每个机房的 Slave库执行,也可以 bind 到 Master 机房进行,这一切都基于我们的数据库访问层(DAL)完成,业务基本无感知。 ——《饿了么异地多活技术实现(一)总体介绍》

也就是说,在这个区域是不能进行双活的。采用主从而不是双写,自然解决了冲突的问题。 实际上,异地双活和异地多活已经很像了,双活的结构更为简单,所以在程序架构上不用做过多的考虑,只需要做传统的限流,failover等操作即可。但其实双活只是一个临时的步骤,最终的目的是切换到多活。因为双活除了有数据冲突上的问题意外,还无法进行横向扩展。

异地多活

f30f1846-40c9-11ed-96c9-dac502259ad0.png 图4 异地多活的示意图 根据异地双活的思路,我们可以画出异地多活的一种示意图。每个节点的出度和入度都是4,在这种情况下,任何节点下线都不会对业务有影响。但是,考虑到距离的问题,一次写操作将带来更大的时间开销。时间开销除了影响用户体验以外,还带来了更多的数据冲突。在严重的数据冲突下,使用分布式锁的代价也更大。这将导致系统的复杂度上升,吞吐量下降。所以上图的方案是无法使用的。 回忆一下我们在解决网状网络拓扑的时候是怎么优化的?引入中间节点,将网状改为星状: f335af1a-40c9-11ed-96c9-dac502259ad0.png 图5 星状的异地多活 改造为上图后,每个城市下线都不会对数据造成影响。对于原有请求城市的流量,会被重新 LoadBalance 到新的节点(最好是LB到最近的城市)。为了解决数据安全的问题,我们只需要针对中心节点进行处理即可。但是这样,对于中心城市的要求,比其他城市会更高。比如恢复速度,备份完整性等,这里暂时不展开。我们先假定中心是完全安全的。 如果我们已经将异地多活的业务部署为上图的结构,很大程度解决了数据到处同步的问题,不过依然会存在大量的冲突,冲突的情况可以简单认为和双活差不多。那么还有没有更好的方式呢? 这里可以关联一下饿了么的 GlobalZone 方案,总体思路就是“去分布式”,也就是说将写的业务放到一个节点的(同城)机器上。阿里是这么思考的: f346b99a-40c9-11ed-96c9-dac502259ad0.jpg 阿里理想中的异地多活架构 实际上我猜测很多业务也是按照上图去实现的,比如滴滴打车业务这种,所有的业务都是按城市划分开的。用户、车主、目的地,他们的经纬度通常都是在同一个城市的。单个数据中心并不需要和其他数据中心进行数据交互,只有在统计出报表的时候才需要,但报表是不太注重实时性的。那么,在这种情况下,全国的业务其实可以被很好的sharding的。 但是对于电商这种复杂的场景和业务,按照前文说的方式进行sharding已经无法满足需求了。因为业务线非常复杂,数据依赖也非常复杂,每个数据中心相互进行数据同步的情况无可避免。淘宝的解决方式和我们切分微服务的方式有点类似: f354c1f2-40c9-11ed-96c9-dac502259ad0.jpg 淘宝按照单元切分的异地多活架构 注意看图中的数据同步箭头。以交易单元为例,属于交易单元的业务数据,将与中心单元进行双向同步;不属于交易单元的业务数据,单向从中心单元同步。中心单元承担了最复杂的业务场景,业务单元承担了相对单一的场景。对于业务单元,可以进行弹性伸缩和容灾;对于中心单元,扩展能力较差,稳定性要求更高。可以遇见,大部分的故障都会出现在中心单元。 按照业务进行单元切分,已经需要对代码和架构进行彻底的改造了(可能这也是为什么阿里要先从双活再切到多活,历时3年)。比如,业务拆分,依赖拆分,网状改星状,分布式事务,缓存失效等。除了对于编码的要求很高以外,对测试和运维也有非常大的挑战。 如此复杂的情况,如何进行自动化覆盖,如何进行演练,如何改造流水线。这种级别的灾备,不是一般公司敢做的,投入产出也不成正比。不过还是可以把这种场景当作我们的“假想敌”,去思考我们自己的业务,未来会怎么发展,需要做到什么级别的灾备。相对而言,饿了么的多活方案可能更适合大多数的企业。 本文只是通过画图的方式进行了简单的描述,其实异地多活是需要很多很强大的基础能力的。比如,数据传输,数据校验,数据操作层(简化客户端控制写和同步的过程)等。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6514

    浏览量

    87610
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206744
  • 编码
    +关注

    关注

    6

    文章

    835

    浏览量

    54458

原文标题:运维思考:一文聊聊高可用的“异地多活”架构设计

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    解决IoT测试的五大挑战

    作者:益莱储 在未来几年,AI、5G、IoT和工业自动化(IIoT)的进步将加快行业变革和创新的步伐。跨行业的各种物联网传感器将用于自动数据传输和远程设备控制。在万物互联的时代,连接将变得司空见惯,到2020年,Gartner预计将有超过200亿台物联网设备投入使用。 2019年是5G商用新起点,结合物联网设备,5G增加的带宽、更快的速度和更低的延迟将带来以前被认为不可能的应用,物联网将持续向多个产业深入渗透,如制造业、运输业、医疗行业、消费领
    的头像 发表于 12-11 10:34 5706次阅读

    益莱储专注于创新服务,解决物联网测试的五大挑战

    在未来几年,AI、5G、IoT和工业自动化(IIoT)的进步将加快行业变革和创新的步伐。跨行业的各种物联网传感器将用于自动数据传输和远程设备控制。
    发表于 02-04 10:30 573次阅读

    众口难调翻篇儿,了解最新USB4标准测试要求和挑战

    不管是雷电 3 还是 USB4 还是即将到来的雷电 4,在协议和物理形态上都越来越像,越来越统一了,USB4将通过Type-C连接器操作,解决众口难调的问题。
    发表于 05-11 09:11 4046次阅读
    众口难调翻篇儿,了解最新USB4标准<b class='flag-5'>测试</b>要求和<b class='flag-5'>挑战</b>

    40G、100G测试技术面临的挑战

     如今的城域网在发生翻天覆地的变化。从接入层到核心层,伴随网络的全IP化,各种设备的更新换代层出不穷,骨干网在这种新形势下也开始“脱胎换骨”。其中最为显著的就是传
    发表于 07-31 15:10 694次阅读

    泰克应对电源测试种种挑战解决方案

    泰克应对电源测试种种挑战解决方案
    发表于 12-25 00:38 0次下载

    物联网组件测试正面临新挑战

    物联网组件测试正面临新挑战,部分组件可以和标准半导体一样进行测试,但有些组件如强调安全性的微控制器和医疗设备、军事∕航天系统和汽车电子等装置使用的芯片,则需要另订测试标准,确保符合功能
    发表于 05-15 12:18 901次阅读

    存储器升级,测试设备面对挑战

    数据爆炸式增长,市场对大容量存储器有了硬性需求,单个的存储芯片已经难以满足设备运行中大量数据流的读取和储存。
    的头像 发表于 04-02 10:37 3550次阅读

    5G设备五大测试挑战成功

    宽带5G设备的设计工程师和测试工程师亟需快速、准确且经济高效的测试解决方案来确保新型芯片设计的可靠性。了解宽带5G IC测试的最大测试挑战
    的头像 发表于 07-24 11:24 5947次阅读
    5G设备五大<b class='flag-5'>测试</b><b class='flag-5'>挑战</b>成功

    益莱储专注于创新服务,解决物联网测试的五大挑战

    时,电流可能会突然变为“mA”到“A”范围。此外,当前需求中的这些较大的峰值通常在微秒内发生,功耗转换对于某些测试仪器来说可能具有较大挑战性。虽然它们在正确的环境中使用时能够非常精确,但是由于涉及到较大
    的头像 发表于 12-11 14:30 5014次阅读

    自动化测试系统面临的设计挑战及解决方案分析

    对于一个自动化测试系统,有些测试任务会根据待测设备(DUT)的不同而不同,如仪器的配置、结果的分析等;而有些对于所有的待测设备则是通用的,如测试流程的管理、测试报告的生成等。为了提升
    发表于 05-03 10:44 1215次阅读
    自动化<b class='flag-5'>测试</b>系统面临的设计<b class='flag-5'>挑战</b>及解决方案分析

    5G To B测试两大挑战亟待解决,如何打破瓶颈

    5G不仅将为To C消费者带来前所未有的增强型移动宽带体验,更肩负着使能千行百业数字化转型的重任。
    的头像 发表于 02-26 09:35 1927次阅读

    万物互联时代,看IoT测试如何应对“芯”挑战

    回顾,错过直播的小伙伴快上车~ 本期线上直播分为干货分享、客户连线、互动答疑、直播抽奖多个环节。加速科技资深IoT解决方案开发专家李敏从IoT芯片发展与趋势、IoT测试需求与挑战、加速科技高性价比IoT测试方案等角度,通过分析实
    发表于 07-21 11:55 549次阅读
    万物互联时代,看IoT<b class='flag-5'>测试</b>如何应对“芯”<b class='flag-5'>挑战</b>

    万物互联时代看IoT测试如何应对“芯”挑战

    本期线上直播分为干货分享、客户连线、互动答疑、直播抽奖多个环节。加速科技资深IoT解决方案开发专家李敏从IoT芯片发展与趋势、IoT测试需求与挑战、加速科技高性价比IoT测试方案等角度,通过分析实际案例讲述如何实现IoT
    发表于 07-21 16:37 558次阅读
    万物互联时代看IoT<b class='flag-5'>测试</b>如何应对“芯”<b class='flag-5'>挑战</b>

    万能试验机行程在金属材料测试中的应用及其挑战

    万能试验机行程的长度和速度对测试结果和测试样品的质量和类型都有很大的影响。试验机行程的确定和控制需要考虑测试材料的大小、形状和测试要求,并确保试验机的稳定性和刚度。
    的头像 发表于 03-24 14:20 318次阅读
    万能试验机行程在金属材料<b class='flag-5'>测试</b>中的应用及其<b class='flag-5'>挑战</b>

    自动测试技术趋势和挑战

    行业调研数据显示,芯片行业的产值和营收一直在不断提高,同时其地位受到大众的关注。光刻机在芯片领域当然独占鳌头,但一颗芯片的成功不只取决于光刻部分,测试对芯片的质量更有不容忽视的意义。
    的头像 发表于 07-14 15:18 299次阅读
    自动<b class='flag-5'>测试</b>技术趋势和<b class='flag-5'>挑战</b>