如何保证网站的高可用性

发布时间 2023-04-12 18:10:39作者: 菜鸟是如何练成的

在网站的建设中,可用性是最基本,最关键的特性之一。实现高可用的主要手段是数据和服务的冗余备份及失效转移,一旦服务器宕机,就将服务切换到其他可用的服务器上,如果磁盘损坏,则从备份的磁盘读取数据。

在大型网站系统中,网站的架构基本都是靠分层的架构模式。

位于应用层

位于应用层的服务器为了应对高并发的访问请求,会通过负载均衡设备将一组服务器组成一个集群共同对外提供服务,当负载均衡设备通过心跳检测等手段监控到某台服务器不可用时,就会将其从集群列表删除,并将请求分发到其他可用的服务器上。

位于服务层

跟应用层的类似,但是这些服务器是通过分布式服务调用框架访问,通过注册中心对提供服务的服务器进行心跳检测,发现有服务不可用,立即通知客户端程序修改访问列表。

位于数据层

数据服务器的主要功能是存储数据,我们需要考虑的几点:1.服务器宕机时数据不丢失。2.数据访问服务不中断 3.数据写入时,需要读写分离,然后要做数据同步复制。将数据写入多台服务器上,实现数据冗余。

 

高可用的应用层

应用层主要是处理网站应用的业务逻辑,应用的一个显著作用就是无状态性。所谓无状态性,就是指应用服务器不保存业务的上下文信息,仅根据每次请求的数据进行业务逻辑处理,多个服务器之间的处理完全对等。

无状态的应用使得我们保持高可用很简单,只要在负载均衡做服务的无效转移就可以了,发现一台服务器宕机,就转发到集群中的另外一台服务器。

但是,实际业务中,不可能全部都是无状态的,比如我们的购物车,支付,社交网站中的需要记录用户的状态信息,这些都是有状态的,需要保存上下文。如果其中一台服务器宕机了,这时候转到另外一台服务器,但是这台服务器,却没有我们需要的上下文内容比如用户信息等,那该怎么办呢??

一般我们都是采用session管理也可以说SSO单点登录。

实现session管理有以下几种方式:

1.session复制:session复制就是在几太服务器之间复制session信息,这样任意服务器宕机,都不会导致session丢失。缺点是牺牲空间换可用性,不合适。

2.session绑定:session绑定,就是在负载均衡做hash,使得同一台ip的请求都转发都同一台服务器上。缺点;该服务器宕机,session就丢失了,不符合我们对系统高可用的需求。
3.cookic记录session:利用cookic记录,缺点:能记录的信息量有限,cookic容易泄密,每次请求都要传递cookic,影响性能。

4.session服务器:这是最好的方式,可用性高,伸缩性也好,性能也不错。独立部署一个session服务器集群,统一管理session。

 

三、高可用的服务

高可用的服务策略一般有以下几种:

1.分级处理
这是指运维会将服务器进行分级管理,比较重要的服务会使用更好的硬件条件,在运维响应更快。比如用户付款比评价更重要,订单、支付等比评价服务优先级更高。

2.超时设置

由于服务器宕机,死锁等原因,导致应用程序调用不能及时响应,超时,我们可以设置一些处理: 是重试还是将请求转发。

3.异步调用

举个例子,比如像用户注册功能,需要实现,几步:1.将用户信息写入,2,通知用户。3.开通权限。如果采用同步调用,当邮件服务失败了,会导致其他两个服务也无法执行,会进行回滚。

如果采用异步消息队列形式,用户信息加入数据库成功后,将发送邮件和调用开通权限服务写入消息队列,即使邮件队列阻塞了,也不会影响其他服务执行,用户只是晚一点收到信息时。

4.服务降级

在网站访问高峰期,比如秒杀活动,加入购物车和订单服务会达到最高,有可能导致服务宕机。这时候可以选择对服务进行降级:

1.拒绝服务。
2.关闭服务。

拒绝服务,就是拒绝其他不重要的服务的调用,减少网络开销和服务CPU消耗。可以随机拒绝部分服务调用,减少服务调用并发数。

关闭功能

直接关闭不重要的服务

5.服务幂等性设计

服务重复调用是不可避免的,比如调用失败后,我们自己控制的重试机制,或者用户多次调用。如果是一个转账服务,那会产生严重的后果。

做服务幂等性设计就是使服务不管调用多少次,来自同意请求的调用结果都是是一样的,不会产生其他后果。

 

四、高可用的数据存储

保证数据的高可用的手段主要是数据备份和失效转移机制。数据备份保证数据有多个副本,任意副本失效都不会导致数据永久丢失,保证数据持久化。失效转移则保证一个数据副本失效时,可以快速切换到有效数据的其他副本。

数据备份

数据备份分为冷备和热备。其中热备又分为同步热备和异步热备。

冷备的优点是简单和廉价,成本和技术难度都较低。缺点是不能保证数据最终一 致,由于数据是定期复制,因此备份设备中的数据比系统中的数据陈旧,如果系统数据丢失,那么从上个备份点开始后更新的数据就会永久丢失,不能从备份中恢复。同时也不能保证数据可用性,从冷备存储中恢复数据需要较长的时间,而这段时间无法访问数据,系统也不可用。

因此, 数据冷备作为一种传统的数据保护手段,依然在网站日常运维中使用,同时在网站实时在线业务中,还需要进行数据热备,以提供更好的数据可用性。

数据热备可分为两种:异步热备方式和同步热备方式。

异步方式是指多份数据副本的写入操作异步完成,应用程序收到数据服务系统的写
操作成功响应时,只写成功了一 份,存储系统将会异步地写其他副本 (这个过程有可能会失败)。

同步方式是指多份数据副本的写入操作同步完成,即应用程序收到数据服务系统的写成功响应时,多份数据都已经写操作成功。但是当应用程序收到数据写操作失败的响应时,可能有部分副本或者全部副本都已经写成功了(因为网络或者系统故障,无法返回操作成功的响应)

同步热备具体实现的时候, 为了提高性能,在应用程序客户端并发向多个存储服务器同时写入数据, 然后等待所有存储服务器都返回操作成功的响应后,再通知应用程序写操作成功。这种情况下,存储服务器没有主从之分,完全对等,更便于管理和维护。

失效转移

若数据服务器集群中任何一台服务器宥机,那么应用程序针对这台服务器的所有读
写操作都需要重新路由到其他服务器,保证数据访间不会失败,这个过程叫作失效转移。