程序员一定要明白的架构:三地五中心(1)
科技圈最火的新闻应该是“AWS中国区光缆被挖,导致三星、小米等众多企业服务不可用”。 又是光缆被挖,咦!?为什么是又,让我们来一起回到过去:
- 2019.6.02:亚马逊光缆被挖断,国内部分地区网络出现异常
- 2019.3.23:施工队挖断腾讯光纤,致腾讯旗下100多款游戏受影响,损失大了
- 2015.5.27:由于杭州市萧山区某地光纤被挖断,造成目前少部分用户无法使用支付宝
我这里只是列出来了几家大公司所涉及到的光缆被挖事故,其余还包括什么广电光缆被挖,社保局光缆被挖就不列了,感兴趣的自己去百度。
好,我们发现“公司再大,也怕施工队”,那么这种事故能怪施工队吗?个人觉得不能把责任都推给施工队,当然我们这里不讨论这些,我们做为大公司,我们以后怎么预防这种现象呢? 这个我们可以来看下支付宝的解决办法,毕竟它老人家在2015年就经历过这种惨况了。
2018年9月20日,杭州云栖大会ATEC主论坛现场上演了一场特别的技术秀。蚂蚁金服副CTO胡喜现场模拟挖断支付宝近一半服务器的光缆。结果只过了26秒,模拟环境中的支付宝就完全恢复了正常。
这种解决办法就是“三地五中心”,这是一种机房架构,即在三座城市部署五个机房,一旦其中一个或两个机房发生故障,依靠技术可以将故障城市的流量全部切换到运行正常的机房。 那么在“三地五中心”之前还存在很多其他架构,我们一一来看一下他们的特点。
最初,我们把应用(一个非常简单的只读应用,比如一个显示Hello World的网页,不考虑数据存储)只放在一个机器上,那么当这个服务器down机了,我们的应用便不可用了。 所以,我们考虑把我们的应用放在多个机器上,在公司单独开辟一个机房来放置这些机器,这样单独某一个台机器down机了并不影响我们的应用。 但是,如果你们公司某一天停电了呢?这个时候我们就考虑在这座城市的另外一个地方在放置一个机房,这是应用就被部署在了同城的两个机房(这个叫同城双活) 但是,如果你们城市某一天经历了海啸、台风、地震等自然灾害,两个机房都不能使用了,这个时候我们就会考虑在另外一个城市再搭建一个机房来部署我们的应用,这样我们应用的可用性就更高了(这个叫异地多活)。 好,到此为止不管出现什么样的状况,我们的应用基本上都可用(除非地球毁灭...)
那么我们上面考虑的应用是一个非常简单的只读应用,所以各个地方的应用是可以同时对外提供服务的,那么如果我们的应用涉及到数据存储,这个时候各个地方的应用就不能同时对外提供写入数据的服务了,因为很有可能会出现数据冲突,那么我们暂且规定只有公司内部机房里的服务器(后文我们叫主机房)可以提供写数据服务,而同城的另外一个机房以及异地的另外一个机房只能从主机房同步数据,这样这两个地方的机房的功能就叫灾备,因为数据会同步,所以就算主机房停电了,另外两个机房还是可以临时来对外提供服务的。所以现在的架构可以如下:
当主机房停电后,用户会去请求北京备份机房,当北京备份机房也停电后,用户会去请求上海备份机房。 好,对于这个架构,我们刚刚说只有主机房能对外提供服务,另外两个机房都只是作为容灾的备份,那么也就是说备份机房利用率不高,因为毕竟正常请求下主机房不可能老停电,所以对于备份机房能不能提高它的利用率呢?当然可以,我们可以让北京的备份机房也去接收部分业务请求,只是这些请求可以没那么重要,比如一些读请求,而上海的备份机房不去接收请求,还是单纯作为容灾备份机器,因为如果谁都不能保证当备份机房接收业务请求会不会出现其他不可预知的问题,那么现在三个机房的角色实际上已经有些不同了:
这个就叫两地三中心。 那么两地三中心这种架构是目前很多银行或大型企业正在使用的一种架构,因为国家针对银行的灾备能力做过要求,资产超过多少多少的一定要做两地三中心架构,以保证银行系统的稳定。
那么这种架构有没有它的缺点呢?我们来考虑一下它的可用性高不高?可用性的意思就是这个架构处理用户请求时够不够快? 我们发现这种架构,中心之间是需要数据备份的,那么对于数据备份只有两种方式,要么异步,要么同步。
- 最大性能模式:如果是异步,表示用户一个写数据请求,只要在生产数据中心存储完数据后就会直接返回结果给用户,同时异步去备份数据,但是,如果正准备去异步备份数据的时候生产数据中心停电了~,那么这个时候还能将灾备服务器暴露出去给用户提供服务吗?不能了,因为很有可能灾备中心的数据是过时的数据。
- 最大保护模式:如果是同步,表示用户一个写数据请求,不仅要等待生产数据中心存储完数据,还需要等其他灾备中心备份完数据后才能返回,而且仅仅当灾备中心出现问题时,因为不能完成数据的备份,所以整个架构也不能对外提供服务,这种可用性是很低的。
- 最大可用模式:这是普遍采用的方案,正常情况下使用最大保护模式,同时生产数据中心监控灾备数据中心,一旦发现某一灾备中心出现了问题,那么则会改为最大性能模式,这样就保证了生产数据中心不受其他灾备中心影响。
- 三写两同步:这是阿里之前的架构模式,意思是同城三个中心,数据备份不是发生在数据库层面,而是应用层,当应用向数据库去写数据时,会同时向三个中心去写数据,只要有两个中心返回成功即可,这样就算三个中心有一个中心停电了,那么并不影响整个架构的高可用,这个思路和我们前面三种是不一样的,性能肯定会高很多。
好,我们介绍了一下两地三中心,总结一下它的缺点:
- 灾备中心利用率不高
- 生产数据中心停止运行后,灾备中心中不一定有100%一模一样的数据
- 成本高,但又无法真正实现期望的高可用能力
那么为了解决这个问题,就出现了三地五中心,虽然名字和两地三中心类似,但提供的功能完全不同。 三地五中心是指三个城市,5个中心, 三地五中心基于的概念是单元化,还得花很大篇幅来讲,下一篇继续吧。
相信大家不喜欢在小小的手机屏幕上还看到一大块的代码,阅读体验不好,所以我写作的风格会文字偏多一点。如果觉得有所收获就给个小小的赞吧。
推荐阅读
金三银四季,阿里工作10多年Java大牛的“心得”,献给迷茫中的你
程序员一定要明白的架构:三地五中心(1)相关推荐
- 程序员笔试题收集汇总(三)
相关文章: 程序员笔试题收集汇总(一) http://blog.csdn.net/youyou1543724847/article/details/52383530 程序员笔试题收集汇总(二) htt ...
- 程序员好几年才能成为架构师_成为更好的企业架构师
程序员好几年才能成为架构师 企业架构师似乎越来越多地参与"尝试新事物"或推翻技术或实施建议(否定命令),而不必费劲或无需编写任何代码. 我已经在很多地方观察到了这一点,无论是与建筑 ...
- 黑马程序员Java教程学习笔记(三)
学习视频:https://www.bilibili.com/video/BV1Cv411372m 如侵权,请私信联系本人删除 文章目录 黑马程序员Java教程学习笔记(三) 面向对象:设计对象.注意事 ...
- 30kJava程序员升为全栈架构师的晋升之路
当下当一个Java程序员是有前途的,你对这句话不持反对的意见吧.Java作为市场上最流行.应用最广泛的编程语言之一,当下学Java成为一个Java程序员当然是有前途的.但是作为一个Java程序员,也有 ...
- GPU Saturday技术沙龙:OpenCL程序员眼中的下一代APU架构
摘要:GPU Saturday技术沙龙在北京·3WCoffee成功举办.本次活动邀请AMD资深技术人员及清华大学项目研究员就AMD最新的GCN架构.GPU加速计算在挖掘比特币.典型图像算法.深度神经网 ...
- Java程序员如何成为优秀的架构师
怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫的老程序员经常会问到的问题. ...
- 零架构项目经验的程序员,如何升级成架构师
先说目前关于架构师的一些是实际情况. 1 要成为Java架构师,单纯靠学知识一定不行,得靠在项目里积累经验. 2 如何判断程序员是否已经成为java架构师?不是看程序员掌握的技能,更不是看程序员干的活 ...
- 5分钟弄懂程序员的如何升级到架构师。
对我们程序员来说,发展的途径要么是走管理岗,从开发升级到项目经理甚至是部门经理:要么走技术升级路线.不过在技术路线方面,无法升级到架构师的程序员不在少数.一方面,在不少公司的高级开发岗位上,无法让程序 ...
- Visual Studio 2022版本 B站黑马程序员C++自学分享-第三阶段(1)(主要包括:自己敲的代码、通过注释来备注上自己对代码的理解)
Visual Studio 2022版本 B站黑马程序员C++自学分享-第三阶段(1)(主要包括:自己敲的代码.通过注释来备注上自己对代码的理解) 前言 三.第三阶段 C++提高编程 介绍C++泛型编 ...
最新文章
- Linux系统性能分析: CPU
- Java使用Jolt连接Tuxedo服务器
- python获取包下的所有对象_Python访问COM对象的comtypes包简介
- 作者:宋璇(1993-),女,食品安全大数据技术北京市重点实验室、北京工商大学计算机与信息工程学院硕士生...
- Hdu-6243 2017CCPC-Final A.Dogs and Cages 数学
- java多线程模拟实现12306售票
- 【flink】Flink源码编译:Flink1.11+版本编译及部署
- 计算机二级考试基础知识文档,计算机二级公共基础知识(考试必考)
- Docker 安装 linux版
- Spring Cloud 微服务
- 生活在同一片土地上,印度人肤色差异为何那么大?
- 无线ap的ntp服务器,怎么配置cisco路由器的NTP
- PgSql之操作JSON类型字段
- [AHK]调用小米笔记本电脑的音量调节功能
- 根据起始时间,获取之间所有的时间(基于momentjs)
- JS-函数进阶笔记二次总结
- (linux-x86-ARM)麒麟V10安装DBeaver21.3通用的数据库管理工具和 SQL 客户端
- oracle 转number日期,oracle number型日期转date型日期
- 各大高校自曝状态一览 排名不分先后
- Oracle的基础知识点汇总
热门文章
- 直立车模控制中三种滤波算法简单分析(清华卓晴)
- java包名中是否可以包含下划线?
- nodejs linux环境设置,tnpm安装
- 用计算机进行处理信息时,用计算机处理汉字信息时,在机内都是以汉字()形式进行的。...
- Something went wrong trying to start the trace - check the logs.
- 新知实验室 腾讯云实时音视频 RTC WEB端初识
- Python:一个闹钟
- 新iPhone有望首次加入屏下指纹解锁;小米 11推送“降温”补丁;McAfee杀毒软件创始人死于巴塞罗那监狱中|极客头条...
- amd cpu linux 驱动,AMD最新显卡Linux版催化剂驱动下载
- 阿里妈妈自动分享工具