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

场景一:

某智能家居厂家,用户喊出“小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. css关于控制div靠左或靠右的排版布局

    关于控制div靠左或靠右的排版布局,我整理三种平时用到的css属性小知识(元素模块靠左或靠右排版): 1.float属性(float 属性定义元素在哪个方向浮动) 值:left(元素向左浮动).rig ...

  2. React - 组件:类组件

    目录: 1. 类组件有自己的状态 2. 继承React.Component-会有生命周期和this 3. 内部需要一个render函数(类组件会默认调用render方法,但不会默认添加,需要手动填写r ...

  3. F#周报2019年第49期

    新闻 宣告.NET Core 3.1 新书:Kevin Avignon的F#提升效率 .NET Core 2.2将在2019年12月23日迎来终结 Visual Studio 16.5预览版1中升级了 ...

  4. k 近邻算法解决字体反爬手段|效果非常好

    字体反爬,是一种利用 CSS 特性和浏览器渲染规则实现的反爬虫手段.其高明之处在于,就算借助(Selenium 套件.Puppeteer 和 Splash)等渲染工具也无法拿到真实的文字内容. 这种反 ...

  5. 华为鲁勇:5G+云+AI三大核心引擎将驱动广州数字经济发展

    [摘要] 华为云将携手广州政企,全面释放 5G+云+AI新动能,推动广州步入高质量发展新阶段. [中国,广州] 广州是一座多样化的城市,在历史上被誉为千年的商都,现在,广州也在持续的开放.融合.与时俱 ...

  6. 带着canvas去流浪系列之六 绘制雷达图

    [摘要] 用canvas原生API实现百度Echarts基本图表. 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 任务说明 使用原生canvas ...

  7. RocketMq在SparkStreaming中的总结

    其实Rocketmq的给第三方的插件已经全了,如果大家有兴趣的话请移步https://github.com/apache/rocketmq-externals.本文主要是结合笔者已有的rmq在spar ...

  8. 洛谷 题解 CF1151D 【Stas and the Queue at the Buffet】

    本蒟蒻又双叒叕被爆踩辣!!! 题目链接 这道题我个人觉得没有紫题的水平. 步入正题 先看题: 共有n个人,每个人2个属性,a,b; 窝们要求的是总的不满意度最小,最满意度的公式是什么? \(ai * ...

  9. springboot+mybatis sql 打印在控制台

    第一种方法 在mybatis文件夹下新建mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ? ...

  10. APP 框架搭建

    在开发一款app前必须先把框架搭建好,这样能避免代码混乱,多人开发时遇到bug难以解决. 构建MVC整体框架的缺点是会导致VC代码量过大,也存在一些不足.借鉴了网上牛人的思路后,https://www ...