移动互联网时代,似乎大家都在强调架构或服务的高可用,那什么是高可用性呢?
首先,我们来了解下什么是系统的可用性(System Usability),即系统服务不中断运行时间占实际运行时间的比例,所以高可用性就比较好理解了:系统服务不中断运行时间占实际运行时间的占比更大,换句话说符合我们的预期。
其次,系统的可用性由哪些因素决定或受哪些因素影响呢?其实我们可以想象下,有没有系统可以提供长久的不中断服务?有人会回答说:有!真的这么肯定?
其实,对于一个简单的系统,在单位时间内是可以保证服务不中断的,但无法保证:forever ,更何况现在的系统复杂性越来越高!又因为服务器硬件老化、供电及网络故障等不确定因素,很难保证这一点,所以说可用性是指一段时间内的可用性!
系统可用性取决于系统的可靠性(MTTF)及可维护性(MTTR)的高低,其中可靠性是指系统服务多久不中断,可维护性是指服务中断后多久可恢复。那这3者是怎样的关系呢?
System Usability = MTTF / ( MTTF + MTTR ) * 100%
备注:
MTTF:平均无故障时间
MTTR:平均故障修复时间
MTBF:平均故障间隔时间
其中,MTBF = MTTF + MTTR,故System Usability = MTTF / MTBR * 100%
那在实际的案例中如何计算呢?我们接着来了解下系统结构。
对于串联系统:
对于并联系统:
对于组合系统:
以下是系统可用性与停机时间的一个关系图:
最后,如何提高系统的可用性呢?其实就是如何提高系统的可靠性和可维护性!
(1) 对于系统中某个节点而言(可能是一台服务器、一个组件、或者一个功能模块),要求代码健壮、性能优、硬件配置高等
(2) 对于整个系统而言,我们可以使用集群技术,这里集群分2类,一是高可用集群,二是负载集群
(3) 如果说系统无Bug或不出问题,是不可能的,所以当出现故障时快速解决显得很重要,也就是可维护性要高!我们要尽可能做到:快速发现问题、定位问题、解决问题,这里依赖于监控(监控很重要),不能依赖于用户反馈,更重要的是时刻优化维护流程中不合理的地方(这一点很难,但是很有效率,因为有时解决问题需要组织层级推进,能否精简流程、快速响应等,也是我们要思考的地方)!
总结:系统的可用性不是测试出来的,而是计算出来的,它是指单位时间内一个比例值,不代表所有时候!最后送大家一句话:今天的互联网时代,对系统可用性要求非常高,它直接影响着用户体验,也是衡量我们这些技术工程师团队的能力与价值的重要标准!