- 高可用01:什么是高可用系统?
- 高可用02:高可用系统设计之「架构高可用」
- 高可用03:高可用系统设计之「应用高可用」
- 高可用04:高可用系统设计之「服务高可用」
- 高可用05:高可用系统设计之「存储高可用」
- 高可用06:高可用系统设计之「其他辅助手段」
应用高可用
应用层主要处理网站应用的业务逻辑,一个显着的特点是应用的 无状态(Stateless ) 性。
所谓的 无状态 的应用是指应用服务器不保存业务的上下文信息,而仅根据每次请求提交的数据进行相应的业务逻辑处理,多个服务实例之间完全对等,请求提交到任意服务器,处理结果都是完全一样的。也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任何信息。
有状态服务(stateful service)则相反,它会在自身保存一些数据,先后的请求是有关联的。一个常见的例子,在商城里购买一件商品,需要经过放入购物车、确认订单、付款等多个步骤。由于HTTP协议本身是无状态的,所以为了实现有状态服务,就需要通过一些额外的方案。比如最常见的session,将用户挑选的商品(购物车),保存到session中,当付款的时候,再从购物车里取出商品信息。
如何将一个服务变成无状态的?:
- 将共享存储作为降级预案来运用,比如,不太重要的数据可以放到 Redis 中,重要的数据可以放到 MySQL 中,或是像 ZooKeeper/Etcd 这样的高可用的强一致性的存储中,或是分布式文件系统中。
- 状态信息前置,丰富入参,将处理需要的数据尽可能都通过上游的客户端放到入参中传过来,比如我们统一权限采用的jwt-token就是采用这种方式。
【推荐阅读】
【高可用架构】理解有状态服务和无状态服务 | Jiacan's Blog (liaojiacan.me)
由于无状态应用,各实例之间不用考虑数据一致性问题,所以其高可用方案相对简单。主要手段是:
- 负载均衡
- 分布式 Session
(1)负载均衡
负载均衡,顾名思义,主要使用在业务量和数据量较高的情况下,当单台服务器不足以承担所有的负载压力时,通过负载均衡手段,将流量和数据分摊到一个集群组成的多台服务器上,以提高整体的负载处理能力。
无状态应用的失效转移可以利用负载均衡来实现。
无状态的应用实现高可用架构十分简单,由于服务器不保存请求状态,那么所有服务器完全对等,在任意节点执行同样的请求,结果总是一致的。这种情况下,最简单的高可用方案就是使用负载均衡。
(2)分布式Session
应用服务器的高可用架构设计主要基于服务无状态这一特性。事实上,业务总是有状态的,如购物车记录用户的购买信息;用户的登录状态;最新发布的消息等等。
在分布式场景下,一个用户的 Session 如果只存储在一个服务器上,那么当负载均衡器把用户的下一个请求转发到另一个服务器上,该服务器没有用户的 Session,就可能导致用户需要重新进行登录等操作。
为了解决分布式 Session 问题,常见的解决方案有:
- 粘性 session
- 应用服务器间的 session 复制共享
- 基于缓存的 session 共享
【推荐阅读】
CDN加速
如何选择最优路径,把每个角落的请求快速的传递到机房,这就是CDN的功能。
HTML页面静态化
静态页面部署在NGNIX中,收到用户请求,Ngnix不需要访问Webapp即可响应用户,减少应用渲染页面的时间,同时也降低了应用的压力。