谷歌架构的转变:从单数据中心到故障转移系统,再到多宿主架构

简介:

image

运行单数据中心的系统很有难度,那么设想一下切换到双数据中心吧,假设你需要对多个位于不同地理位置的数据中心提供支持。谷歌有一篇发人深思的优秀论文,其中对这一过程有所描述——“大规模高可用性:打造谷歌的广告数据基础设施”。

文中的主要观点是:在将单个数据中心切换到多个数据中心时,典型的故障转移架构在实践中效果并不太好。能够起到作用,使用较少资源就能提供高可用性和一致性的方法,是原生的多宿主/多重连接架构(natively multihomed architecture):

我们目前的方式是构建原生多宿主架构。 在这样的系统中,多个数据中心会持续运作,并根据情况自发平衡不同数据中心的负载,同时还能以完全透明化的方式解决任意规模的数据中心停机。此外,按计划执行的数据中心停机与维护事件也是完全透明化的,这样就会将对运营系统造成的影响降到最低。在过去,要想完成停机与维护事件,需要付出大量人力将运营系统从一个数据中心迁移到另一个。

“多宿主”这种说法也许会令人费解,因为多宿主这个词一般指的是一台电脑连接着多个网络。不过按照谷歌的规模,用这种说法描述连接着多个数据中心也是非常自然的。

谷歌构建了多个多宿主系统,以确保在出现数据中心级别的停机时,还能保持高可用性(99.99%到99.999%)与一致性,下面这些文章对这些系统进行了详细描述:F1 / Spanner:关系数据库;Photon:对多个连续数据流进行join的部署;Mesa:数据仓储。这些论文分别讨论了各系统所采用的方式,以及在构建多宿主系统时遇到的诸多挑战:全局状态同步、怎么设置检查点,以及可重复的输入与只执行一次的输出等。

为了 保持可用性与一致性,系统受到了很大约束。这就凸显了谷歌持续在简化这些复杂系统,提高其易用性上付出的努力:

多宿主系统的简单性对用户是极有价值的,没有多宿主系统的话,无论故障转移、系统恢复还是一致性问题,都是应用需要解决的问题。而借助多宿主系统,基础设施会处理这些麻烦的问题,应用开发者只要专注于自身应用即可,可用性和一致性有系统来保障。

在这篇论文中最大的惊喜就是:实际中,多宿主系统比故障转移系统所耗费的资源还要少:

部署在3个数据中心之上的多宿主系统,总同步性能为稳定状态的20%,总资源占用为170%,远远小于故障转移系统所需的300%。

故障转移系统有什么问题?

基于故障转移系统的方式并未真正实现高可用性,而且由于需要部署备用资源,会带来成本浪费。

以前我们在使用故障转移系统时,有很多不好的体验。由于非计划性停机很少见,故障转移系统多是后期才添加的功能,无法自动化执行,也没有经过很好的测试。很多时候,团队需要花费数日才能从停机中恢复,一个组件一个组件的上线,用自定义MapReduces之类的临时工具执行状态恢复,并在系统处理停机时的积压工作时,逐步执行优调。这些情况不仅让系统无法再进行扩展,还让团队由于所运行的关键任务系统太过复杂而承受了极大压力。

多宿主系统的工作原理是什么?

相比之下,多宿主系统在设计之初就将运行多个数据中心作为核心设计属性,因此无需另外添加故障转移系统。多宿主系统一直保持多个数据中心运行。每个数据中心都在持续处理工作,同时各数据中心之间的负载会自动进行平衡。一旦某个数据中心的处理速度减缓,系统就会自动将一部分工作调整到速度较快的数据中心上去。一旦某个数据中心出现故障完全不可用,所有工作都会自动分发到其他数据中心上去。

只有持续的动态负载平衡,不再有故障转移的过程。多宿主系统通过实时同步的全局共享状态来协调数据中心之间的工作。所有关键的系统状态都有备份,以确保随时能从另一个数据中心的某个点重新开始工作,同时确保恰一次语义(exactly once semantics)。在出现数据中心级别的故障时,多宿主系统是唯一能够提供高可用性和完整一致性的系统。

在典型流系统中,事件处理基于用户交互来解决;同时,全世界范围内的多台数据中心会为用户提供流量服务和日志存储服务。日志收集服务会在全球范围内收集这些日志,并将其复制到两台或多台特定的日志数据中心上。每个日志数据中心都会保存完整的日志记录,并确保复制到某个数据中心中的所有事件都会(逐渐)复制到其他日志数据中心上。流处理系统运行在一个或多个日志数据中心之上,并处理所有事件。流处理系统所输出的内容通常会存储在全球范围内的一些复制系统中,这样从任何地方都能可靠地对输出执行消费。

在多宿主系统中,所有数据中心都会持续运行并处理事件,典型状况下会部署三台数据中心。在稳定状态下,这三台数据中心每个都能处理33%的流量。如果某台数据中心出现故障而停机,剩下的两台数据中心会分别承担50%的流量处理工作。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
17天前
|
机器学习/深度学习 存储 数据采集
利用机器学习优化数据中心冷却系统
【4月更文挑战第26天】 在数据中心管理和运营中,冷却系统的能效是关键成本因素之一。随着能源价格的上涨和对环境可持续性的关注增加,开发智能、高效的冷却策略显得尤为重要。本文将探讨如何应用机器学习(ML)技术来优化数据中心的冷却系统。通过收集和分析温度、湿度、服务器负载等多维数据,我们构建了预测模型来动态调整冷却需求,实现节能并保持最佳的操作条件。实验结果表明,使用ML优化后的冷却系统能够在不牺牲性能的前提下显著降低能耗。
|
23天前
|
存储 SQL 网络协议
C语言C/S架构PACS影像归档和通信系统源码 医院PACS系统源码
医院影像科PACS系统,意为影像归档和通信系统。它是应用在医院影像科室的系统,主要的任务是把日常产生的各种医学影像(包括核磁、CT、超声、各种X光机、各种红外仪、显微仪等设备产生的图像)通过各种接口(模拟、DICOM、网络)以数字化的方式海量保存起来,并在需要的时候在一定授权下能够快速地调回使用。同时,PACS系统还增加了一些辅助诊断管理功能。
39 11
|
1月前
|
传感器 存储 数据采集
04 深度解析物联网架构与技术应用于农业大棚系统
本文将深入探讨物联网架构在农业大棚系统中的应用,从设备接入、边缘网关、数据传输到云平台和应用平台,逐层解析其技术应用与通信协议,为读者全面呈现物联网在农业领域的实际运用场景。
|
2月前
|
机器学习/深度学习 存储 算法
利用机器学习优化数据中心冷却系统
【2月更文挑战第23天】 在数据中心的运营成本中,冷却系统占据了一大块。传统的冷却管理通常依赖于简单的规则或手动调整,无法适应复杂多变的热负荷和环境条件。本文提出了一种基于机器学习的方法来动态优化数据中心的冷却系统。我们设计了一个预测模型来估计未来的热负荷,并结合实时数据,通过优化算法调整冷却设备的工作状态,以降低能源消耗并保持适宜的运行温度。实验结果表明,该方法能够有效减少能耗,同时保证数据中心的冷却效率。
16 0
|
2月前
|
存储
嵌入式微处理器的系统架构中指令系统
嵌入式微处理器的系统架构中指令系统
19 0
|
16天前
|
安全 数据管理 中间件
云LIS系统源码JavaScript+B/S架构MVC+SQLSugar医院版检验科云LIS系统源码 可提供演示
检验科云LIS系统源码是医疗机构信息化发展的重要趋势。通过云计算技术实现数据的集中管理和共享可以提高数据利用效率和安全性;通过高效灵活的系统设计和可扩展性可以满足不同医疗机构的需求;通过移动性和智能化可以提高医疗服务的精准度和效率;通过集成性可以实现医疗服务的协同性和效率。因此,多医院版检验科云LIS系统源码将成为未来医疗机构信息化发展的重要方向之一。
26 2
|
2月前
|
人工智能 运维 监控
构建高性能微服务架构:现代后端开发的挑战与策略构建高效自动化运维系统的关键策略
【2月更文挑战第30天】 随着企业应用的复杂性增加,传统的单体应用架构已经难以满足快速迭代和高可用性的需求。微服务架构作为解决方案,以其服务的细粒度、独立性和弹性而受到青睐。本文将深入探讨如何构建一个高性能的微服务系统,包括关键的设计原则、常用的技术栈选择以及性能优化的最佳实践。我们将分析微服务在处理分布式事务、数据一致性以及服务发现等方面的挑战,并提出相应的解决策略。通过实例分析和案例研究,我们的目标是为后端开发人员提供一套实用的指南,帮助他们构建出既能快速响应市场变化,又能保持高效率和稳定性的微服务系统。 【2月更文挑战第30天】随着信息技术的飞速发展,企业对于信息系统的稳定性和效率要求
|
4天前
|
前端开发 Java 关系型数据库
Java医院绩效考核系统源码B/S架构+springboot三级公立医院绩效考核系统源码 医院综合绩效核算系统源码
作为医院用综合绩效核算系统,系统需要和his系统进行对接,按照设定周期,从his系统获取医院科室和医生、护士、其他人员工作量,对没有录入信息化系统的工作量,绩效考核系统设有手工录入功能(可以批量导入),对获取的数据系统按照设定的公式进行汇算,且设置审核机制,可以退回修正,系统功能强大,完全模拟医院实际绩效核算过程,且每步核算都可以进行调整和参数设置,能适应医院多种绩效核算方式。
23 2
|
13天前
|
API 开发者 UED
构建高效微服务架构:后端开发的新趋势移动应用与系统:开发与优化的艺术
【4月更文挑战第30天】 随着现代软件系统对可伸缩性、灵活性和敏捷性的日益需求,传统的单体应用架构正逐渐向微服务架构转变。本文将探讨微服务架构的核心概念,分析其优势,并着重讨论如何利用最新的后端技术栈实现一个高效的微服务系统。我们将涵盖设计模式、服务划分、数据一致性、服务发现与注册、API网关以及容器化等关键技术点,为后端开发者提供一份实操指南。 【4月更文挑战第30天】 在数字化时代的浪潮中,移动应用和操作系统的紧密交织已成为日常生活和商业活动的基石。本文将深入探讨移动应用开发的关键技术、跨平台开发工具的选择以及移动操作系统的架构和性能优化策略。通过分析当前移动应用开发的挑战与机遇,我们将
|
17天前
|
消息中间件 监控 中间件
探索微服务架构下的系统弹性设计
【4月更文挑战第26天】 在当今快速迭代和持续部署的软件发展环境中,系统的弹性设计成为维护高可用性和稳定性的关键因素。本文将深入探讨在微服务架构下如何实现系统弹性,包括识别潜在的故障点、设计容错机制、以及通过实践案例分析提升系统整体的韧性。我们将讨论一系列策略,如服务降级、超时管理、重试策略、断路器模式等,旨在为开发者提供一套实用的系统弹性设计方案。