大流量高并发之高可用篇

本文阐述了架构高可用性的评价指标及实现手段,包括冗余备份、失效转移、项目代码质量保证、监控系统、服务分级、熔断降级、超时设置、重试机制、幂等设计、异步调用、限流、自动重启、数据库高可用实现等,旨在提升网站在大流量高并发下的稳定性。
  1. 架构高可用的评价指标是什么?
  • 可用性 = 平均故障时间 / 系统总运行时间
  • 一般要保证4个9
  • 从可用性的定义,可以很清楚地知道架构高可用的要求。理论上的要求是,在互联网大流量高并发的情况下,网站需要做到7 * 24小时可以正常对外提供服务。然而,服务器硬件故障是不可避免的。那么很显然,当硬件出现故障的时候,我们应该怎么办呢?启用备用方案。备用方案是什么呢?就是当一台服务器宕机时,把用户的请求转移到另一个可以提供同样服务的服务器。那么前提条件是我们需要有这样的一种可以提供同样服务的服务器。这就是要求在设计网站高可用的时候,需要设计冗余备份。当出现故障的时候,可以快速地实现故障转移。
  1. 实现架构的高可用有哪些手段?
  • 实现网站架构的高可用首先要保证项目代码质量。这是基础。完善的开发测试发布流程是保证项目代码质量的有效手段。git flow 代码分支管理、严格的code review、自动化测试、预发布验证、灰度发布、自动化发布每一个环节做好都非常有利于代码质量的提高。
  • 网站系统的监控也是保证高可用的有效手段,监控系统给力,可以有效地把问题扼杀在摇篮之中。
  • 项目本身没有问题,然后再考虑在大流量高并发的情况有哪些手段。面对大流量高并发,实现网站架构的高可用的基本思想就是冗余备份和失效转移。目前主流网站架构一般分为网关层、应用层、服务层和数据层。
  • 网关层、应用层和服务层都可以设计为无状态的。针对无状态的服务,最常用的冗余备份是集群部署。通俗地讲,就是部署多台服务,一台挂了,迅速地把请求转移到其他的服务上。
  • 平时多台服务如何管理?如何分配来自客户端的请求?负载均衡和服务治理。
  • 如何发现某个服务不可用?心跳检测,健康检查,调用方报告某个服务不可用。
  • 在业务上有个特殊的业务是session,session很显然是有状态的。在分布式系统中,session一般会用专门的服务器来存储,比如redis,也会做成集群。
  • 对于服务层,出了负载均衡和服务治理的手段外,还有服务分级和熔断降级、超时设置、重试机制、幂等设计、异步调用、限流、自动重启等手段。
  • 为什么要做服务分级?给服务分优先级,核心服务会得到高的关注度,得到更好的硬件资源。在运维的时候,也给与不同的响应级别。核心服务甚至会做异地多活。非核心服务在面临大流量的压力的情况下,可以做降级处理,丢车保帅,保证核心服务,放弃非核心服务,非常时刻进行熔断。这也是提高系统高可用的一种方案。
  • 熔断为什么是提高系统高可用的一种方案?避免服务失效的雪崩效应。一般是在网络连接缓慢等不可控因素发生时采取这种方案。其实也是一种降级,降级提供服务,返回预先设置好的返回内容,等服务重新恢复后,再提供正常的服务。
  • 为什么要做超时设置?其实也是一种快速失败的思想。一般项目开发的过程中,会有压力测试,对服务接口的请求响应时间会有评估。那么如果某次请求或者是某些次请求,很久都得不到响应,大概率是有问题。那么这个时候,我们不如早做打算,早点采取行动。要么重试,要么转移请求。
  • 为什么要有重试机制?排除偶然异常因素和随机异常因素。面试有一面、二面、三面。法院诉讼有一审、二审等等。比赛有三局两胜、五局三胜等。
  • 为什么要做幂等设计?幂等设计不仅是有些业务功能的要求,比如转账功能,更是提高系统高可用的一个间接手段。因为,分布式系统,网络情况复杂,有可能某次请求,服务端已经成功处理,但是网络延迟返回给客户端的是处理失败的结果。此时,客户端会重新发送同样的情况到其他的服务。如果服务接口做了幂等性设计,就可以直接返回结果,不用再走冤枉路。幂等设计也是程序优化和业务功能的常规手段。
  • 异步调用为什么能提高架构的可用性?其实异步调用也是一种解耦和隔离的思想,不要让调用失败扩散。就像应对2019-nCoV一个有效的措施就是早发现早隔离。那么服务也是一样的。多个服务被同步调用改成异步调用,当一个服务失败时,可以对其进行隔离处理,让其不要影响其他的两个服务。比方说,原来有A、B、C三个服务被同步调用,当A失败时,会导致整个调用失败。如果把A、B、C的调用改成异步调用,中间加一个消息中间件。调用方把信息输入消息中间件中,消息中间件处理成功即可返回。然后A、B、C三个服务从消息中间件中获取消息,即使中间有一个失败也不影响大局。当然了,不是任何一个场景都可以做成异步调用的,异步调用需要根据业务场景来设计。
  • 如果我们的系统中用到了消息中间件,我们也要考虑消息中间件的高可用设计。比如,kafka就采用集群部署加数据多副本冗余备份的策略来实现高可用。
  • 自动重启:网关针对异常的节点,可以采取自动重启的策略,提高服务的可用性。
  • 限流:漏桶算法和令牌桶算法。对超过系统处理能力的请求直接拒绝或者返回错误码,也是一种降级的策略,退而求其次的策略。
  • 数据库的高可用实现跟无状态的服务就不一样,因为数据库是有状态的。保证数据库高可用的手段是数据备份和失效转移机制。数据备份可以分为冷备和热备。热备又可以分为异步热备和同步热备。失效转移操作包括失效确认、访问转移和数据恢复。
  • 分布式缓存系统如何实现高可用?客户端方案、中间代理层方案和服务端方案。
  1. 详细介绍一下分布式缓存系统的高可用方案?
  • 客户端方案:写入数据时进行数据分片;读数据可以采取主从和多副本的策略。数据分片可采用一致性哈希算法。根据经验,节点数选为4到6个最合适。
  • 中间代理层方案:所有的缓存读写请求都通过中间层完成,中间代理层是无状态的,负责读写请求的路由功能。
  • 服务端方案:比如redis的sentinel模式,缓存热备,集群化保证鸡蛋不要放到一个篮子里面。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值