如何实现系统的高可用性?
高可用最朴素的意思就是,服务部署在多台机器上组成一个服务集群,这样其中某台出现了问题,服务还可以继续对外提供服务,CAP是分布式高可用的必懂定理,如果服务是有状态的服务,需要考虑服务状态的一致性。不过现在都是强调强一致性。
提高系统可用性最简单的方法就是“加***”,4C16G 变 8C32G,但是单体机器的***毕竟有限,而分布式架构的实质,就是让多台机器,甚至是海量机器,合作完成一件事情,提高分布式系统的高可用性,可以从以下几个方面入手。
在分布式架构中单点意味着风险,一定要尽可能地避免单点故障。
负载均衡可以将请求平均地分配给每一台服务器,能够利用多台机器的***,更重要的是,当一台机器发生故障时,不会影响整个系统的使用;这里要注意要有一定的冗余,否则可能会导致一台机器发生故障,剩下的机器无法抗住压力导致整个系统的崩溃。
上面也说到,集群环境下一台服务器的异常可能会导致整个系统的崩溃,如果能做到弹性扩容锁容的话,可以大大提高系统的高可用性;当流量增大的时候,增加几台服务器,当流量降下去,减少几台服务器,这一切都是自动完成的。
高可用性的前提是:保证服务系统能够持续工作,实现高可用性一般有两种手段: 一种是通过第三方软件/组件保证系统的可用性;另一种是软件/组件自身己具备高可用的技术实现。
高可用性确实是分布式系统一项重要的指标,跟数据一致性,分区容错性组成了分布式系统的CAP原则,本文只针对高可用性分析如下:
高可用性:High Availability,保证分布式系统在较长的时间内能正常响应,持续可用,业界常用几个9的说法来说明高可用性,比如说5个9,就是99.999%,全年只能停机几十分钟而已!
毫无疑问,单点的系统是无论如何也不可能实现高可用的,因为受到单点故障,服务发布,网络延迟等原因,客户端总会接收不到响应,即服务不可用!
比如数据库常用的集群手段有:
1,主从复制,读写分离:不能做到高可用,如果主机挂了,整个系统的写功能就不能用了!
2,分库分表:不能做到高可用,分库分表是把所有的数据分布到了很多的分库中,其中一个分库挂了,这部分数据就没了!
3,双主互备:可以做到高可用,双主机数据一致,能动态切换主库,其中一台坏了,另一台可提供使用!
双主互备得到的集群虽然实现了高可用,由于双机数据一致,限制了整个集群的容量!
分布式服务的高可用更加的复杂,因为分布式系统对外是一个整体,换句话说分布式的高可用需要保证分布式系统中包括应用系统,数据库,缓存系统,消息组件等所有服务的高可用性!
高可用性的解决方法一般来说比较单一,包括数据冗余,故障熔断,服务转移!
1. 容错设计:在分布式系统中,应该***用容错设计,即在系统中添加冗余,以防止单点故障。
2. 负载均衡:负载均衡是提高分布式系统可用性的重要手段,可以将系统的负载均衡分配到多台服务器上,以提高系统的可用性。
3. 容灾备份:容灾备份是指在系统出现故障时,可以将系统的数据备份到另一台服务器上,以便在系统出现故障时可以快速恢复系统。
4. 实时监控:实时监控是指对分布式系统的运行状态进行实时监控,及时发现系统中出现的问题,以便及时***取措施,保证系统的可用性。