高可用应用架构
所有内容均来自https://edu.aliyun.com
场景
小云是一家电商平台的运维架构师,刚把网站平台迁移到阿里云上,
小云使用了多台云服务器来部署Web网站,但是小云发现如果每个云服务器都买公网IP的话,可能会面临公网的安全威胁,而且每个服务器都有不同的IP,无法形成统一的流量入口
,如果不买公网IP的话,外部客户又访问不到网站,小云希望能使用阿里云上的负载均衡服务提供一个稳定的访问入口,并能同时通过多台服务器同时对外提供服务
,来提高流量的分发能力,承载更多的客户访问,又希望负载均衡上的公网IP和负载均衡实例解耦,后期更换负载均衡实例也不需要换IP地址
,于是小云开始了在阿里云上部署服务器负载均衡之旅……
高可用架构概述
单点故障
:如果小云的业务只运行在一台服务器上,这就存在极大的风险,因为随着时间的推移,物理硬件的损坏是肯定的,而且除了硬件可能会损坏,还会有管理员的运维失误、软件故障、受到攻击等情况发生,一旦这些情况发生,由于业务只运行在一台服务器上,这就会造成业务中断,甚至数据丢失。
高可用架构
:是指计算机系统能够保证无故障持续运行的概率
,通常采用百分比的方式来表示系统的高可用性等级,我们在生活中采用高可用概率=可用时间/总时间*100%来计算实现的高可用性等级,要想实现较高的高可用性等级,需要引入系统冗余的理念。
系统冗余
: 既然将业务只运行在一台服务器上存在单点故障,那一个很简单的思路就是用两台、三台等多台同时提供服务,即使一台服务器(服务器A)出现故障,还可以通过其它服务器(服务器B)响应用户的访问请求。
为了避免单点故障,可以在架构中多使用冗余方案,但是这需要分别投入大量的服务器、多个机房、大量的技术投入,小云如果希望在本地机房实现各种的冗余方案,整体成本和技术难度都很大,比如:
小云如何第一时间知道服务器A出现了故障?通过编写健康检查脚本或软件实时进行检测。一旦脚本或软件运行出错,小云将不能实时了解服务器A的运行状态。
服务器A出现故障后,小云如何能够将用户访问的流量切换至服务器B?一般来说小云会让服务器A和服务器B共用一个IP,平时这个IP会挂载在服务器A上,一但服务器A检测出现问题,需要通过脚本或软件自动的将这个IP切换至服务器B上。
小云如何能够让服务器A、服务器B甚至更多服务器共同响应用户访问的请求?一般来说小云需要安装配置专门的负载均衡设备,这个设备可以关联多台服务器,并可以接受用户请求,根据用户的请求,自动将用户流量分发至关联的服务器中进行处理。一旦负载均衡软件运行出错,小云的网站将无法访问。
如果小云使用阿里云来实现冗余方案,整体成本和技术难度都比较小,阿里云在全球各地做了大量的投资建设机房,并投入了很多各方面的专家做了技术投入,使得小云可以在阿里云控制台中快速搭建系统容灾&系统冗余方案。如:
小云可以通过
快照
和镜像
功能来完成云服务器上数据的备份
,一旦服务器数据出现故障可以通过备份快速恢复数据,降低网站的损失;小云可以通过
自定义镜像功能快速再次部署出更多的业务服务器
,使用多个相同的网站服务器同时对外提供服务,只要还有一个能够正常运行,也可以为客户提供服务。小云只需要在这些服务器前面加入一个
阿里云负载均衡服务(SLB)
,让用户先访问到负载均衡,然后由负载均衡再分发流量到具体的服务器上,SLB会通过健康检查功能发现故障云服务器ECS
,并不再分配用户请求到故障云服务器ECS,同样的,一旦SLB发现故障ECS已经恢复正常,将再次分配用户请求,这些都是自动完成的,无需小云操作。而且在这个过程中,小云只需要购买资源和简单的规则配置,无需维护SLB的服务器资源和其运行安全,这些都由阿里云的专业工程师负责。小云还可以购买
阿里云弹性公网IP
,并将SLB绑定到这个弹性公网IP上。这样做的好处是,小云可以拥有一个固定的对外服务的公网IP,不管SLB和ECS等资源如何变化,均可以通过这个IP对外提供服务,确保网站的高可用。
弹性公网IP
当云服务器出现故障后,就需要使用快照和镜像功能快速部署部署新的服务器
,使业务快速上线,但是新服务器会有新的公网IP地址
,而外部用户是通过域名访问小云网站的,一旦服务器换了公网IP,这会导致需要更新域名解析(域名解析为新公网IP
,在公网中域名解析更改可能会花费数十小时,在此期间,有相当大的一部分用户会访问到旧的云服务器上,导致访问失败,此时就需要用到阿里云上的弹性公网IP产品来解决这个问题。
弹性公网IP
(Elastic IP Address,简称EIP):是可以独立购买和持有的公网IP地址资源,EIP是一种NAT IP,通过NAT方式映射到被绑定的云资源上
。当EIP和小云的云资源绑定后,云资源可以通过EIP与公网通信,当小云的云资源被释放后,EIP会和云资源解绑,EIP会保留在小云的账号内
,如下图所示,负载均衡、云服务器、NAT网关等众多需要公网IP的产品,都可以绑定EIP。
采用弹性公网IP的优点:
独立购买与持有:小云可以单独持有一个EIP,
作为账号下一个独立的资源存在
,无需与其它计算资源或存储资源绑定购买。弹性绑定:
可以随时申请,释放和修改
,为业务提供灵活的带宽和网络拓扑规划。例如:小云可以根据需要申请弹性公网IP,还可以将公网IP从云服务器A上解绑,并重新将解绑后的弹性公网IP绑定到云服务器B(一个EIP只能绑定一个云服务器
,非常灵活。带宽灵活:小云可以根据业务需求随时调整EIP的带宽峰值,带宽峰值的修改即时生效。例如:小云预计当晚活动需要100Mbps带宽,就可以修改EIP所绑定的带宽,并立刻生效。
计费灵活、成本低:多种计费策略,支持包年包月、按固定带宽和按使用流量计费,小云可以根据需要选择合适的计费策略。另外EIP加入共享带宽后可以降低带宽成本。
负载均衡
负载均衡
(Load balancing)是指在计算机网络领域中,将客户端请求分配到多台服务器上以实现带宽资源共享、优化资源利用率和提高系统性能
的技术。负载均衡可以帮助小云有效解决单个服务器容量不足或性能瓶颈的问题,小云通过平衡流量负载,使得多台服务器能够共同完成请求处理,并且实现高可用性和高可靠性
的服务。、
负载均衡通常采用硬件设备或是软件
来实现,硬件负载均衡器通过专用硬件设备分发流量,而软件负载均衡器则通过对流量进行转发和控制来实现负载均衡。不管小云使用硬件负载还是软件负载均衡都可以根据不同的调度算法来选择服务器,例如轮询、最少连接数、加权轮询
等方式来平衡负载。
企业中的负载均衡通常工作在OSI七层模型的四层(传输层)和七层(应用层)
四层负载均衡通常用于
TCP/UDP协议
,例如小云有一个业务集群工作在TCP的2000端口号上,需要通过负载均衡将其发布出去,此时小云的需求就是基于端口号的负载均衡,小云只需要在负载均衡上开通TCP的2000即可。七层负载均衡通常用于
HTTP/HTTPS的Web服务
,如果小云有一个网站需要被外部所访问到,网站是一种典型的七层服务,此时小云就需要在负载均衡上开通HTTP协议的80端口。
小云的网站由多台云服务器构成,如果不使用负载均衡,每台服务器都需要有公网IP
,对用户来说,存在选择上的困难,IP地址记忆和书写也存在困难,而且一旦某台服务器故障,使用此IP的用户直接就无法打开网站,用户体验很差。而如果小云在用户和众多服务器之间加入一个负载均衡,用户就只需要访问负载均衡
,负载均衡对后端多个服务器进行健康检查,哪个服务器故障,就从活跃的服务器中剔除此服务器,然后把用户的请求始终引导到正常的服务器上。而且在访问量很大时,负载均衡在分发请求时,还会有一定的流量分发策略兼顾后端多个服务器上现有请求数的情况,确保多个后端均衡的承载流量。
硬件和软件负载均衡的区别
:如果小云通过专用硬件实现负载均衡,那么小云的整体成本会较高,而且设备容易出现单点故障
,一旦设备故障,所有通过此设备分发流量的业务都会瘫痪,用户就无法访问到这些业务,而且因为成本高昂,小型企业往往很难接受这些价格,所以中小企业会选择软件负载均衡,但是使用软件负载均衡也有一些缺点,软件负载均衡需要额外占用服务器,安装配置管理、监控相对复杂,需要比较专业的运维工程师
,技术投入较大
什么是阿里云负载均衡SLB(Server Load Balancer)?
阿里云负载均衡
:就是一种典型的软件负载均衡产品,不需要额外占用服务器,也不需要用户付出太多技术性投入。
对于小云来说,使用阿里云传统型负载均衡CLB可能会获得以下哪些好处:
高并发
:阿里云CLB集群支持亿级并发连接,单实例最大支持100万并发,小云完全不用担心负载均衡服务是否能满足性能要求,实例最大支持100万并发,完全满足大型企业的实际业务情况。操作简单
:小云还可以通过控制台配置SLB实例,包括添加、删除和修改后端服务器等操作,非常方便灵活。功能丰富
:阿里云CLB支持不同的算法进行负载均衡,包括轮询、最少连接数、源IP地址哈希等,可以根据小云的实际需求进行配置。阿里云的CLB还能和弹性伸缩功能配合,当小云的业务量增加或减少时,可以根据实际的负载情况自动扩容或缩容后端服务器,以确保系统稳定性和预算的合理利用。SLA保障
:阿里云CLB采用全冗余设计,无单点故障,支持同城容灾,小云可以将业务网站部署在不同的可用区中,用CLB来做流量分发,还可以根据流量负载进行弹性扩容,在流量波动情况下不中断对外服务。技术成本低
:负载均衡服务后端由专门的平台专家团队维护,用户的人工成本较低云平台的负载均衡价格较低,能力较强,性价比更高容灾能力强
:云平台的负载均衡可以跨可用区实现,避开了单一机房电力、网络中断的影响
小云可以在阿里云CLB(Cloud Load Balancer)上创建多个监听器在外网监听多个端口
,并在每个监听器后端绑定多个服务器,通过一定的流量分发策略将前端的用户访问调度到具体的服务器上,然后服务器承载监听器传递过来的流量,监听器除了可以配置特定的分发策略之外,还可以配置健康检查
,如下图中灰色的云服务器代表该云服务器健康检查失败,流量不会转发到该云服务器上:
阿里云负载均衡CLB的监听器默认支持的调度算法为:
轮询(RR)
:当小云的网站由多台ECS云服务器构成,且所有的ECS云服务器的硬件规格全部相同时,就需要选择轮询调度方法,例如,小云由100台ECS云服务器,硬件规格全部为10G内存,10核心CPU,如果给一部分服务器设置过高或者过低的权重的话,由于所有的ECS云服务器配置都一样,调整权重后,在分发流量时,会由于权重的不同,给某些设置过权重的服务器过多或过少的访问流量,这会造成后端云服务器不能实现负载均衡,只有选择轮询调度方法,才能实现真正的负载均衡,当选择轮询调度的方法后,负载均衡会依次将前端的访问流量分发到不同的服务器上,不会对特定的服务器进行格外关注。加权轮询(WRR)
:当小云的网站由多台ECS云服务器构成,且有一部分ECS云服务器的硬件规格和其他的ECS云服务器规格不同时,就需要选择加权轮询调度方法,例如,小云有100台ECS云服务器,硬件规格为10G内存,10核心CPU,但是还有10台ECS云服务器的硬件规格为20G内存,20核心CPU,此时就需要在分发流量时,更多的考虑将流量分发到这10台ECS云服务器,因为如果是平均分发流量的话,前面这100台云服务器已经在超负荷运转的时候,这10台ECS云服务器还处于50%利用率,这种情况下,访问到前100台服务器的用户由于服务器满载的原因,体验很差,而访问到后10台云服务器的用户,由于服务器轻载的原因体验就很好,非常不均匀。为了解决这个问题,小云就需要在配置监听器时,给这10台轻载的云服务器设置更多的权重,这样负载均衡CLB在分发流量时,就会按照权重,分发更多的流量到这些服务器上,实现真正意义上的负载均衡。一致性哈希(CH)
:
哈希(hash)是一种将任意长度的数据转化为固定长度的数字的方法,通常以十六进制表示。这个固定长度的数字称为哈希值或者散列值。哈希值通常是唯一的,并且不可逆转。例如:小云从互联网上下载了一个很大的文件,担心由于网络传输错误导致下载到的问题和服务器上的文件不一致,就可以计算一下此文件的哈希值是多少,然后再和互联网上公布的哈希值对比,如果一致,即代表此文件在传输过程中没有发生变化。
阿里云负载均衡一致性哈希是基于源IP地址或基于四元组(源IP、目的IP、源端口和目的端口)的一致性哈希,相同的源地址会调度到相同的后端服务器,例如:某互联网客户的源公网IPv4地址为xxx.xxx.xxx.xxx,当此客户来访问小云的网站时,负载均衡CLB会对此客户的源公网IPv4地址进行哈希,并匹配到后端某一台ECS云服务器,以后此公网IPv4再来访问小云的网站时,由于源公网IPv4地址是一样的,所以哈希值也是一样的,所以还会匹配到后端同样的后端ECS云服务器,
只要客户的公网IP没有发生变化,就始终会被匹配到相同的ECS云服务器
。有时候我们也把这种访问者与后端某一服务器产生绑定的现象称为会话保持,小云的网站由多台ECS 云服务器构成,用户通过负载均衡在服务器A上登录后,刷新一下页面,由于后端是多台服务器,所以可能会再次访问到服务器B,而服务器B不记得用户登录过,所以会让用户重新登录,这个体验就很差。小云可以
在负载均衡上启用会话保持功能
,小云可以设置一段时间,例如30分钟,在30分钟内,始终由这台服务器为用户提供服务,在30分钟后,此用户再来访问时,才会重新选择服务器,保证了用户体验的一致性。而一致性哈希的调度算法,却无需小云设置时间,只要用户的公网IP哈希之后的结果一致,就始终由固定的某台服务器为其提供服务。此服务器故障时,原有的用户只需要匹配到下一个服务器即可,减少了整体架构的抖动,例如小云使用加权轮询调度算法,权重为50的机器故障后,会重新分配所有流量,会有较大的冲击和抖动,而一致性哈希就不会。
小云应该在什么情况下选择哪一种流量调度方法呢?
- 轮询调度:当小云
所有的ECS云服务器硬件规格和带宽全部相同
时,小云应采用轮询调度算法,避免流量分发不均匀造成服务器压力不均衡的情况发生。- 加权轮询调度:当小云的
ECS云服务器以及带宽并不完全相同时
,小云应采用加权轮询调度算法,给不同配置的ECS云服务器不同的权重值,配置高的机器权重值高,配置低的机器权重指低,以实现整体压力的均衡。- 一致性哈希调度:当小云希望
将请求均匀地分配到不同的服务器节点上
,避免某一台服务器过于忙碌导致用户体验下降、希望通过将用户的公网IP哈希后对服务器匹配时或服务器故障时减少整体架构抖动时,小云应采用一致性哈希调度算法。
综上,如果小云的网站是由多台ECS云服务器来构成的,可以通过负载均衡负责前端的流量统一接入
,当多个并发请求同时发起访问时,负载均衡根据一定的算法
(轮询、加权轮询、一致性哈希),将流量合理的分配到后端多个主机上,进行流量分摊,从而解决了特定的一台主机承接所有流量导致用户体验不佳的问题,在负载均衡上启用了健康检查
功能之后,可以在后台服务器出现故障无法提供服务时,确保不会再有流量进入此服务器,保障了用户访问的连续性,提升了用户体验,而开启了会话保持
之后,可以在一定的时间内,始终由一台机器为某用户完全后续请求,通过把特定的用户在一定时间内留在同一个机器上的方法,确保了用户体验的一致性。
总结
-
弹性公网IP可以无视后端ECS
云服务器的变更,始终以相同的公网IP对外提供服务,而负载均衡可以在后端某台服务器出现故障时业务也不会中断,使用负载均衡后的其他正常的服务器依旧对外提供服务,保障了用户体验的持续性
-
使用弹性公网IP的好处有:
由于弹性公网IP和云资源是解耦且可以单独持有的
,可以更好的进行地址管理,在项目规划之初,就可以先购买弹性公网IP,确定哪些业务使用哪些IP地址在后期云服务器变更时,无需更改DNS解析,始终使用同一个公网IP对外服务
,避免互联网域名解析更新速度慢导致的用户访问中断。
-
负载均衡提供了一个统一的访问入口,并在负载均衡后端绑定多个服务器,根据不同的调度算法将前端多个用户的请求分发到不同的后端服务器上。
- 服务器台数多:需要对外提供服务的服务器多于一台时
- 担心单点故障:担心某些服务器故障后,用户依旧访问到这些服务器导致用户体验不佳
- 访问量大:用户访问流量太大,需要多台服务器一共承担流量时
- 增加扩展性:经常需要添加和移除后端服务器,担心变更时会对用户产生影响
-
使用阿里云负载均衡CLB的好处有:
- 统一访问:提供一个稳定的统一的访问入口,让外部用户可以集中通过负载均衡访问后端业务
- 成本低:相比使用本地机房的硬件负载均衡,阿里云平台投入了巨大的直接成本和技术资源,用户不需要为此前的投资进行付费
- 无单点故障:阿里云负载均衡CLB提供了一个跨可用区的方案,默认情况下就可以在同地域不同可用区实现负载均衡,规避单点故障
- 技术难度低:用户无需在负载均衡上投入过多的时间和技术精力,阿里云提供了一个通俗易懂的Web页面控制台,用户只需要通过点击鼠标的方式就可以轻松部署和调试负载均衡。
原文地址:https://blog.csdn.net/qq_74350234/article/details/143953991
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!