关注我!关注我!关注我!
作者 / 以码为梯
排版 / 以码为梯
文章字数 / 953
阅读时长 / 5分钟
系统的可靠性简单的来说就是系统能够按照预想的方式去运行。系统能正常返回用户所期望的结果;不管用户怎么操作,系统都能正常运行;在用户访问量突增时,系统也会按照预期的性能去运行;系统可以准确地控制权限。
我们在讲系统的可靠性时需要给个范围,要是想系统在任何情况下都能可靠地运行显然是不符合实际情况的。举个极端的例子,万一地球都被黑洞给吞噬了呢?
我们需要注意的是缺陷(fault)跟失败(failure)是不同的,缺陷指的是系统中某个组件没有按照预期的运行,而失败指的是整个系统不能提供服务的状态。缺陷可以导致失败的发生。
在设计缺陷容忍(fault-tolerant)良好的系统时,可以通过人为的操作来增加缺陷发生的频率(比如人为的杀掉某个进程)以确保系统的缺陷容忍是正常运行并且会被持续的测试,这样在缺陷真正发生的时候就有信心可以正常应对。
缺陷大概分为三种:硬件、软件以及人为。
硬件缺陷
硬件的缺陷包括硬盘故障、内存故障、断电故障甚至是异常的网线(比如网线被挖断了)。对于硬件故障最常用的方法就是对服务器进行冗余、提供备用电源等。
软件缺陷
软件缺陷有可能是系统内核的bug导致程序故障、也有可能是某个服务吃光了服务器所有的资源导致其他服务器无法正常运行、也可能是某个依赖服务变慢导致整个系统的请求处理速度降低。
软件相关的缺陷都是相关联的,某个缺陷会级联引发一些其他缺陷。对于软件缺陷可以在系统中增加监控服务;做好服务治理,梳理好服务之间的依赖关系,假设某个服务异常会不会影响其他服务(见下图);做好进程隔离;允许进程单独重启。
某个服务故障是否会引发其他服务发生故障
上图标记含义
人为缺陷
人为导致的缺陷其实很好理解,只要是人其实都会犯错。为了避免人犯错可以从以下几方面考虑。
- 通过设计好的抽象、API接口、来使做正确的事情很容易。
- 将用户容易犯错的地方跟会导致系统不能提供服务的地方分开来。
- 增强系统的测试,从单元测试、集成测试、验收测试等等各个级别的测试都需要加强。
- 允许系统能从人为缺陷中快速的恢复。
- 建立详细清晰的监控系统。
- 建立好的管理方案并增强项目组成员的培训。
可靠性的重要性
在你将你的照片存储到云盘上时,发现有的照片丢失了,我相信你肯定不会再使用这家公司的云盘。其实这就跟做人一样,只有别人觉得你靠谱你才能承担更重要的责任。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。