开发者学堂课程【企业级互联网分布式系统应用架构学习:高可用架构方案实例】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/503/detail/6747
高可用架构方案实例
高可用架构,从下图我们可以理解,从非高可用架构到高可用架构的变化,我们通常提及的非高可用架构指的是在某一个应用架构的设计中,中间有单点故障,应用服务器有一台,数据库中也有一台,我们通常称为非高可用架构。
一旦应用服务器出现了问题,例如异常宕机,发生了数据的迁移,整个架构或应用需要停机。
上图中我们可以看到这是一个用户部署架构图,该用户购买了一台虚拟机,该虚拟机有一个互联网 IP,本身从应用的视角来看,对应用是可被访问的,并且在虚机上部署了多个软件,例如财务,办公等软件。
用户在机器上也部署了自己的软件,架构在使用上正常情况下是没有问题的,其应用可以正常接收互联网的请求,该应用也可以访问数据库,但问题的核心是这台机器一旦出现故障,客户的所有软件都无法访问,所以这个架构是有缺陷的。若从成本考虑,我们不在意宕机导致不可用的时间,此架构也没有太大问题。
若我们对应用的高可用应用非常高,例如一定要24小时服务,那此架构就不太适合。同时此架构也会带来运维的风险,例如数据库的管理员也要登录到这台机器上进行数据库的操作,多个软件的运维人员也要登录到这台机器上进行应用的部署和运动的运维,一旦有管理员操作失误,可能对其他的应用或数据库产生影响。所以这是一个从高可用的视角来看是有一个问题比较大的架构。
所以高可用架构如图所示,首先我们需要将软件进行一个纵向的拆分,例如将软件一和软件二以及软件三等应用进行独立的部署,每一个软件和应用都要拥有自己一套完整的部署架构,通常就包含了负载均衡,应用服务器,数据库服务器。这个架构最大的好处是任何一台应用或虚机云服务器停止服务都不会对应用产生影响,并且在运维的过程中,可以更好的将运维的角色进行划分。
运维软件一的用户就只能访问云服务器一和云服务器二,运维软件二的应用人员就只能访问软件二和另外的服务器,同时应用的部署人员和数据库的运维人员进行分离。当我们去进行这样的应用架构设计和部署,以后的系统可用性就会非常高,它没有太明显的单点故障。但是在互联网应用架构下,我们还面临的风险是,让我们把这些服务器同时放在一个机房,当这个机房断电或网络因为其他原因,整个应用的访问会产生影响。
所以公有云的应用商提出的概念是可用区,可用区指的是共有云应用商在设计其基础网络技术时,我们用可用区来进行资源的隔离。具体的理解是,例如我们在北京阿里云会建多个可用区,每个可用区都是单独的环境,例如供电,网络的接入。即其中一个可用区停止服务,另外一个可用区不会受到影响。
但同时这两个可用区在正常的情况下,会用高速的光纤连接在一起,在使用的过程中,用户可以把他的服务器部署在两个可用区。这两个可用区感知不到他们在不同的可用区,因为他们之间的网络延时非常小。
真正的高可用架构通常是把应用设计成多可用区。两者的差别是单可用区的高可用架构是互联网用户通过 SLB 接入,所有的应用服务器或云服务器 ECS 服务器在一个可用区,同时 RDS 数据库主备在一个可用区。
阿里云的 IDS 会在后台自动做一个主备的架构,类似于只读库的架构。正常情况下,只有生产数据库被应用访问,同时生产库会把数据同步到备库中,对应用是不可见的,应用正常情况下访问的都是生产库,出现问题时,阿里云的 IDS 会切换到备库。在单可用区的设计架构中,IDS的生产库和摘备库是在同一个访问中的。
高可用设计的问题在于,一旦可用区出现问题,例如网络被挖断,整个机房断电等,虽然出现的概率较低,但还是有这样的可能。所以更高可用区架构被称为双可用区高可用架构,也有一个名词叫两地三中心,还有一种称呼为同城灾备。
同城灾备指的是在同一个城市的两个区域有两个机房,通常讲述的可用区都是在一个城市相距几十公里的地方建造。在做这个部署时,整个架构会变成如上图所示。
具备负载均衡器,该负载均衡具备了跨机房漂移的能力,众所周知,负载均衡本身会绑定一个 IP 地址,互联网的 IP 地址。该 IP 地址实际上是一个虚拟的 IP 地址,即当 a 可用区出现问题后,负载均衡器所附带的 IP 会漂移到可用区 b,此时用户在不更改 IP 的情况下,即使可用区 a 出现状况,负载均衡用的IP还是同一个,可以切换到可用区 B。在应用部署时,该架构需要额外注意的是,不能把应用的所有云服务器都部署在一个可用区,一定要将原服务器的应用分散部署到 A 和 B 两个可以区,例如图上1234。
在正常情况下 A 可用区出现问题,因为 B 可用区还有两台云服务器可以服务,整个应用不会垮掉的问题或不可访问的问题。下面一层是 RDS 数据库,也要选用多可用区的 RDS,多可用区的 RDS 的生产数据库位于两个可用区,当可用区 A 出现问题后,位于可用区 B 的容灾数据库生效,再服务于云服务器三和云服务器四,这样的架构可以保证在一个可用区出现问题后,应用可以由 B 服区的资源进行接管。可用区完全不能访问的情况是小概率事件,并且两个可用区不能访问是更小的概率事件,所以高可用架构可以保证应用非常高级别的可应用架构。
在该架构里,互联网用户通过 SLB 接入,ECS 服务器在两个可用区分别购买数量相等的多台,在购买过程中,优先选择多台较低配置,而不是少量高配置,这样能够更好的保证安全性,数据库在选择高可用区数据库。



