更多内容,添加公众号关注:

场景一:

某智能家居厂家,用户喊出“小X同学,帮我扫地”后,服务器宕机了,扫地机器人不能立即启动,于是,用户可能再连续喊几次后,无奈又习惯的按下了扫地机器人的启动按钮。

场景二:

某高层建筑有2000个房间,10个房间烟感连续发出报警,理论上出现了火灾并在逐步扩散,恰巧,服务器又宕机了,然后...

两个场景都是服务器宕机,但后果却不同,根据业务实际情况,我们必须考虑软件架构的高可用性。

有人会说,上云吧,上云比自己搭建服务器稳定多了。通常情况下是这样的,但是,不要忽略SLA这个重要的概念,云产品都是有SLA的,SLA是什么呢?SLA全称是ServiceLevel Agreement,翻译为服务水平协议,他表明了公有云提供服务的等级以及质量。比如我们说月度99.95%的SLA,意味着每个月服务出现故障的时间只能占总时间的0.05%,如果这个月是30天,那么约等于21.6分钟。

对于场景一,或许21.6分钟是可容忍的,但对于场景二,绝对是不允许的。

针对各种高可用方案,通常会提到下面这些概念(不是针对Azure的概念):

同城 容灾

同城 容灾 是在同城或相近区域内 ( ≤ 200K M )建立两个数据中心 : 一个为数据中心,负责日常生产运行 ; 另一个为灾难备份中心,负责在灾难发生后的应用系统运行。同城灾难备份的数据中心与灾难备份中心的距离比较近,通信线路质量较好,比较容易实现数据的同步 复制 ,保证高度的数据完整性和数据零丢失。同城灾难备份一般用于防范火灾、建筑物破坏、供电故障、计算机系统及人为破坏引起的灾难。

异地 容灾

异地 容灾 主备中心之间的距离较远 (> 200KM ) , 异地灾难备份不仅可以防范火灾、建筑物破坏等可能遇到的风险隐患,还能够防范战争、地震、水灾等风险。由于同城灾难备份和异地灾难备份各有所长,为达到最理想的防灾效果,数据中心应考虑采用同城和异地各建立一个灾难备份中心的方式解决。

Azure上有很多高可用的方案可供我们选择,以尽可能提高我们的业务系统能够尽可能的稳定对外提供服务,首先要做的是了解Azure上的高可用相关的概念,才能灵活应用。

什么是 Azure 区域?

Azure 在世界各地的多个数据中心运行。 这些数据中心分组到地理区域,让用户可灵活选择构建应用程序的位置。可以在规定的地理区域(例如“中国东部”、“中国北部”或“中国东部2”)中创建 Azure 资源。  为了提供冗余和可用性,每个区域都设有多个数据中心。 这样,便可灵活设计应用程序,创建距离用户最近的VM,满足任何法律、符合性或税务要求。截至2019年11月,Azure全球共计54个区域,中国大陆有4个区域。

Azure 地域Azure 区域组织为地域形式。Azure 地域保证数据驻留、主权、符合性和恢复能力的要求在地域边界内得到遵从。

区域对

每个 Azure 区域都与同一地理位置内的另一区域配对。 此方法适用于跨地域复制资源(例如VM 存储),降低因自然灾害、社会动乱、电力中断或物理网络中断而同时影响两个区域的可能性。 区域对的其他优点包括:出现范围较广的 Azure 区域中断时,每个区域对中有一个区域优先级更高,这样可以缩短应用程序的还原时间。将逐一对配对的区域进行计划内Azure 更新,尽量减少停机时间并降低应用程序中断风险。出于税务和执法管辖权方面的考虑,数据仍以配对的形式驻留在同一地域内。

Azure 中的高可用性概述

可以通过多种不同的方式创建 Azure 中的高可用性。 有两个选项是“可用性集”和“可用性区域”。 通过使用可用性集,你的VM 将受到保护,从而免受数据中心内可能发生的故障的影响。 这包括硬件故障和Azure 软件故障。 通过使用可用性区域,你的VM 将放置在物理上独立、没有共享资源的基础设施上,因此将受到保护,不受整个数据中心故障的影响。当你想要在 Azure 中部署基于 VM 的可靠解决方案时,请使用可用性集或可用性区域。

可用性集概述

可用性集是一种逻辑分组功能,在Azure 中使用它可以确保将 VM 资源部署在 Azure 数据中心后,这些资源相互隔离。 Azure 确保可用性集中部署的 VM 能够跨多个物理服务器、计算机架、存储单元和网络交换机运行。 如果出现硬件或Azure 软件故障,只有一部分 VM 会受到影响,整体应用程序仍会保持运行,可供客户使用。 如果想要构建可靠的云解决方案,可用性集是一项关键功能。假设某个基于 VM 的典型解决方案包含四个前端 Web 服务器,以及两个托管数据库的后端VM。 在 Azure 中,若想在部署 VM 之前先定义两个可用性集:一个可用性集用于“Web”层级,另一个可用性集用于“数据库”层级。 创建新的VM 时,可在 azvm create 命令中指定可用性集作为参数,Azure 会自动确保在可用性集中创建的VM 在多个物理硬件资源之间保持独立。 如果运行某个Web 服务器或数据库服务器的物理硬件有问题,可以确信Web 服务器和数据库 VM 的其他实例会保持运行状态,因为它们位于不同的硬件上。

可用性区域概述(截至2019年11月,中国区尚无可用性区域)

可用性区域是一个高可用性产品/服务,在数据中心发生故障时可以保护应用程序和数据。 可用性区域是Azure 区域中独特的物理位置。 每个区域由一个或多个数据中心组成,这些数据中心配置了独立电源、冷却和网络。 为确保能够进行复原,所有已启用的区域中必须至少有三个单独的区域。 区域中可用性区域的物理隔离可以在发生数据中心故障的情况下保护应用程序和数据。 区域冗余服务可跨可用性区域复制应用程序和数据,以防范单点故障。 借助可用性区域,Azure 提供业界最佳的 99.99% VM 正常运行时间 SLA。与可用性集类似,假设某个基于VM 的典型解决方案包含四个前端 Web 服务器,以及两个托管数据库的后端VM。 与可用性集类似,你将希望在两个单独的可用性区域中部署VM:一个可用性区域用于“Web”层,另一个可用性区域用于“数据库”层。 当你创建新的VM 并将可用性区域指定为 azvm create 命令的参数时,Azure 会自动确保你创建的 VM 隔离在完全不同的可用性区域中。 如果运行某个Web 服务器或数据库服务器 VM 的整个数据中心出现问题,你就会知道Web 服务器和数据库 VM 的其他实例仍在运行,因为它们在完全独立的数据中心中运行。

Azure 区域中的可用性区域是容错域和更新域的组合。 例如,如果在Azure 区域的三个区域中创建三个或更多VM,则 VM 将有效分布在三个容错域和三个更新域中。 Azure 平台会识别更新域上的此分布,以确保不同区域中的VM 不会同时更新。通过将计算、存储、网络和数据资源共置在一个区域并将其复制到其他区域,在应用程序体系结构中内置高可用性。 支持可用性区域的Azure 服务划分为两类:

区域性服务–将资源固定到特定区域(例如虚拟机、托管磁盘、标准IP 地址)或

区域冗余服务 – 平台自动跨区域复制(例如区域冗余存储和SQL 数据库)。

若要在 Azure 上实现全面的业务连续性,可结合使用可用性区域和Azure 区域对来构建应用程序体系结构。 可以使用Azure 区域中的可用性区域以同步方式复制应用程序和数据以实现高可用性,并以异步方式跨Azure 区域复制以实现灾难恢复保护。

容错域

容错域是共享公用电源和网络交换机的基础硬件逻辑组,类似于本地数据中心内的机架。 在可用性集内创建 VM 时,Azure 平台会将 VM 自动分布到这些容错域。 此方法可限制潜在物理硬件故障、网络中断或断电的影响。

更新域

更新域是可以同时维护或重新启动的基础硬件逻辑组。 在可用性集内创建 VM 时,Azure 平台会自动将 VM 分布到这些更新域。 Azure 平台进行定期维护时,此方法可确保至少有一个应用程序实例始终保持运行状态。 在计划内维护期间,更新域的重启顺序可能不会按序进行,但一次只重启一个更新域。

可用性集由可防止硬件故障以及允许安全应用更新的两个额外分组构成 - 容错域 (FD) 和更新域 (UD)。

了解了这些概念,下面我们会逐一介绍 Azure上的负载均衡,应用程序网关,流量管理器等产品,然后实战操作,最终看能否拔掉生产环境中的网线。

Azure 上的高可用概念的更多相关文章

  1. 快速搭建基于Azure Paas的高可用WordPress网站

    产品详情 产品介绍 WordPress是一种使用非常广泛的CMS系统.本应用是根据Azure Resource Manager模板创建的.通过该ARM模板可以快速建立web应用和MySQL数据库,部署 ...

  2. 在 Kubernetes 上运行高可用的 Kafka 集群

    转载自:https://www.qikqiak.com/post/deploy-kafka-ha-on-k8s/ Apache Kafka 是目前最流行的分布式消息发布订阅系统,虽然 Kafka 非常 ...

  3. hadoop在zookeeper上的高可用HA

    (参考文章:https://www.linuxprobe.com/hadoop-high-available.html) 一.技术背景 影响HDFS集群不可用主要包括以下两种情况:一是NameNode ...

  4. Pod在多可用区worker节点上的高可用部署

    一. 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布在同一个可 ...

  5. vultr 上实现高可用冗余浮动公网IP出口(使用BIRD+BGP协议)High Availability on Vultr with Floating IP and BGP

    官方文档: https://www.vultr.com/docs/high-availability-on-vultr-with-floating-ip-and-bgp https://www.vul ...

  6. hype-v上centos7部署高可用kubernetes集群实践

    概述 在上一篇中已经实践了 非高可用的bubernetes集群的实践 普通的k8s集群当work node 故障时是高可用的,但是master node故障时将会发生灾难,因为k8s api serv ...

  7. MHA-Atlas-MySQL高可用(上)

    MHA-Atlas-MySQL高可用(上) 链接:https://pan.baidu.com/s/17Av92KQnJ81Gc0EmxSO7gA 提取码:a8mq 复制这段内容后打开百度网盘手机App ...

  8. MHA高可用

    MHA(Master High Availability)目前在 MySQL 高可用方面是一个相对成熟的解决方案,它由日本 DeNA 公司 youshimaton(现就职于 Facebook 公司)开 ...

  9. Redis(二)冰叔带你了解Redis-哨兵模式和高可用集群解析

    前言    Redis 的 主从复制 模式下,一旦 主节点 由于故障不能提供服务,需要手动将 从节点 晋升为 主节点,同时还要通知 客户端 更新 主节点地址,这种故障处理方式从一定程度上是无法接受的. ...

随机推荐

  1. vue如何引入图片地址

    我们在用vue时储存图片时,一般把图片放在两种文件下,一个是static文件夹下,另外一个是assets文件夹下. 下面总体说一下这两个的区别及正确的引用方式: static是放不会变动的图片(或文件 ...

  2. 记录我的 python 学习历程-Day03 数据类型 str切片 for循环

    一.啥是数据类型 ​ 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,"汉"是文字,否则它是分 ...

  3. 机器学习算法在用户行为检测(UBA)领域的应用

    [摘要]最近看到越来越多的安全圈的同学开始关注UBA或者UEBA的相关产品和技术,恰好这一段时也一直在跟进UBA产品的状况,正如Gartner报告所述,最具创新能力的UBA供应商往往都是一些初创公司, ...

  4. 转:Connection reset原因分析和解决方案

    在使用HttpClient调用后台resetful服务时,“Connection reset”是一个比较常见的问题,有同学跟我私信说被这个问题困扰很久了,今天就来分析下,希望能帮到大家.例如我们线上的 ...

  5. 编译原理 算法3.8 LR分析 c++11实现

    LR分析简介 LR分析是应用最广泛的一类分析方法,它是实用的编译器功能中最强的分析器,其特点是: 1,采用最一般的无回溯移进-规约方法. 2,可分析的文法是LL文法的真超集. 3,能够及时发现错误,及 ...

  6. 为什么查询出来的数据保存到Arraylist?插入删除数据为啥用LinkedList?

    引言:这是我在回答集合体系时,被问到的一个问题,也是因为没有深入学习所以回答的并不是很好,所以这两天看了一下,以下是我的一些回答与学习方法. 学习方法:我们学习,系统性的学习肯定是比零散的学习更有效的 ...

  7. JavaScript基础5

    字符串操作方法和属性 length   获取字符串的长度 str.chartAt(指定字符的索引)  获取指定位置的字符 返回string类型的值 str.concat(字符串)   链接多个字符串  ...

  8. Coderforces-455A

    Alex doesn't like boredom. That's why whenever he gets bored, he comes up with games. One long winte ...

  9. vue中通过.sync修饰符实现子组件修改父组件数据

    vue父子通讯是单向数据流,也就是子组件不能修改父组件的值,但是在一些情况下是需要这样做的. 先看官方文档: 接下来举例实现 1.实现一个双向数据绑定,子组件改变的时候,父组件也在改变 父组件 < ...

  10. 原生js入门级测试题及答案

    01.屏幕打印2000到3000之间的所有的数. <script type="text/javascript"> for (var i = 2000; i < 3 ...