你需要了解的那些Abilities(一)

来自泼辣有图

如果你去买一部手机,你会考虑什么因素呢?一般我们都会首先考虑智能手机、照相功能、多大容量等。而除了这些,我们通常还会考虑品牌、颜色、外型好不好看、时尚与否。作为一个软件产品也不例外,用户首先会期望系统要满足正常的功能需求,同时系统还要满足好用、性能好、稳定可靠等其他特性。一般我们会把这些称为非功能性需求或者跨功能性需求。系统的每一次故障和宕机对用户都是不可忽视的损失,所以这些非功能性需求也是软件质量非常重要的属性,是软件架构设计需要满足的目标。

在运行时的非功能需求中,我们常常会提到几个词有 Availability、Stability和Reliability,即系统要高可用、高可靠和稳定。那么可用、可靠还有稳定是什么意思呢?如何衡量?它们之间又有什么区别?我经常在不同场景下听到这几个词的混用。今天就先来谈一谈这几个ability。

1. Availability 可用性

Availability defines the proportion of time that the system is functional and working. It can be measured as a percentage of the total system downtime over a predefined period. Availability will be affected by system errors, infrastructure problems, malicious attacks, and system load. - Microsoft Application Architecture Guide

可用性指系统在给定时间内可以正常工作的概率,通常用SLA指标来表示,如下图所示。

SLA指标

墨菲定律说“会出错的事总会出错”,可用性做到100是可望而不可及的。对于SLA指标来说,9的数字越多可用性越高,宕机时间越少,系统就可以在给定的时刻内高比例地正常工作。然而对系统的挑战就越大,投入的成本也会越高。 比如5个9要求系统每年只宕机5分钟左右,而4个9要求每年宕机时间不超过一个小时。这就使得系统需要在设计、基础设施、数据备份等不同层面采取多种方式,甚至增加基础设施投资来保证可用性。

“当你的设备处理人命关天的事情,或业务中断一分钟就会损失百万美刀,那么你可以考虑99.99%的可靠性。” Robertson(Linux高可用项目开发者)

不同系统的可用性要求也是不同的,比如:淘宝、京东等这些电商系统用户量很多,不同区不同时刻都有大量的用户在使用系统,这必然对系统的可用性要求很高。据以往这些系统的故障统计和不准确地测试数据推测,它们目前的可用性是在3个9到4个9左右。相对而言,企业类的工作软件因为通常只在工作时间被使用,或只在某些特定的地区使用,或只给某部分人某一特定时间使用,可用性的需求就会低一些。典型的系统就数salesforce了,经常会看到“周末又要升级了”的提示。

影响可用性的因素有很多,包括系统故障、基础设施故障、数据故障、安全攻击、系统压力等等。

2. Reliability 可靠性

Reliability is a measure of the probability that an item will perform its intended function for a specified interval under stated conditions.

可靠性是在给定的时间间隔和给定条件下,系统可以无故障持续运行的概率。那么可靠性和可用性有什么区别呢?在《分布式系统原理与范型》中提到的下面例子中比较准确的解释了两者的区别:

如果系统在每小时崩溃1ms,那么它的可用性就超过99.9999%,但是它还是高度不可靠。与之类似,如果一个系统从来不崩溃,但是每年要停机两星期,那么它是高度可靠的,但是可用性只有96%。

简而言之,可用性关注的是系统任何时刻可以持续正常工作的能力,关注的是服务总体的持续时间。系统在给定时间内总体的运行时间越长,可用性越高。而可靠性更关注系统可以无故障地持续运行的概率,关注的是故障率。故障的频率越高,可靠性越低。可靠性差一定程度上是会影响可用性的,但反过来不一定成立。

这里面还有一些常用的指标来衡量可用性和可靠性:

  • MTBF(Mean Time Between Failure)
    即平均无故障时间,是指从新的产品在规定的工作环境条件下开始工作到出现第一个故障的时间的平均值。MTBF越长表示可靠性越高,正确工作能力越强 。

  • MTTR(Mean Time To Repair)
    即平均修复时间。是指可修复产品的平均修复时间,就是从出现故障到修复中间的这段时间。MTTR越短表示易恢复性越好。

  • MTTF(Mean Time To Failure)
    即平均失效时间。系统平均能够正常运行多长时间,才发生一次故障。系统的可靠性越高,平均无故障时间越长。

基于以上指标,可用性可以如此计算:

Availability = UpTime/(UpTime+DownTime) = MTBF / (MTBF + MTTR)

作为系统的响应,首要目标是先降低故障的次数,频率要低,从而提高可靠性;同时在故障出现后,要提高故障的恢复时间,速度要快,从而提高业务的可用性。

影响可靠性的因素就是能够引起故障的所有因素,包括软件设计错误,编码错误,硬件故障等等。

3. Stability 稳定性

Stability is about how many failures an application exhibits; whether that is manifested as unexpected or unintended behaviour, users receiving errors, or a catastrophic failure that brings a system down. The fewer failures that are observed the more stable an application is.

软件的稳定性,指软件在一个运行周期内、在一定的压力条件下,在持续操作时间内出错的概率,性能劣化趋势等等。如果一个系统的故障率很高,它一定是高度不可靠的,也一定是不稳定的。那么如何区分稳定性和可靠性呢?

对于电力系统而言,稳定性就是“人民用电不要忽明忽暗忽快忽慢”,可靠性就是”不要用着用着突然没有啦“。-知乎盛夏白日梦

如果一个系统的性能时好时坏,它一定是不稳定的,而不一定是不可靠的。稳定性更关注系统在给定条件下的响应是否一致,行为是否稳定。可靠是可用的前提,稳定是可靠的进一步提升。

今天在Stackoverflow看到这样一段代码来表示这两个的区别,甚为有趣:

Reliable but unstable:
    add(a,b):
     if randomInt mod 5 == 0: 
        throw exception
     else
        print a+b        
Stable but unreliable:
  add(a,b):
    if randomInt mod 5 == 0: 
        print a+a
    else
        print a+b

不知道写到这里,你是否对可用性、可靠性和稳定性有了更清晰的了解了呢?有了这些指标可以帮助我们去分析系统存在的问题,比如说故障频率较高,故障恢复时间较长,那么系统的可靠性可用性一定很低,对用户的影响一定很高,就可以促使我们去从各个角度去改进和提高,去找架构设计的问题,去找系统实现的缺陷,去找依赖的基础设施问题等等,从而改善我们的系统。尤其是在当下复杂的分布式系统下,这些显得尤为重要。

那么,最后请问我们常见的容错处理、蓝绿部署、回滚、cluster、灾备会有助于提高以上哪个ability呢?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,087评论 18 139
  • 分布式系统面临的第一个问题就是数据分布,即将数据均匀地分布到多个存储节点。另外,为了保证可靠性和可用性,需要将数据...
    olostin阅读 4,423评论 2 26
  • 云应用设计模式 下面的章节详细介绍了一些设计模式,这些现有的设计模式可以有效地应用到云服务应用程序设计中去。 电路...
    MagicBowen阅读 721评论 1 2
  • 今天我读了一本书,这本书是《我为自己竖大拇指》。接下来呢,我就要给大家讲讲我的感想吧! 这本书给了我一个...
    师睿佳阅读 698评论 0 0
  • 红灯笼刚被人点亮就落满白霜 红衣裳雕着花的床成就了新娘 红颜是种罪 青春是祸水 命薄如纸世人方说美 清晨初上妆 黄...
    郭小蝠阅读 238评论 5 4