乐趣区

关于数据:读书笔记之数据密集型应用的可靠性

宇宙之一粟读书笔记之《数据密集型利用零碎设计》,本笔记的内容来自《数据密集型利用零碎设计》,该书豆瓣评分高达 9.7。

什么是数据密集型利用

数据密集型利用,英文名 Data-Intensive Application。

数据密集型利用(data-intensive applications) 正在通过应用这些技术提高来推动可能性的边界。一个利用被称为 数据密集型  的,如果  数据是其次要挑战 (数据量,数据复杂度或数据变动速度)—— 与之绝对的是  计算密集型,即处理器速度是其瓶颈。数据密集型计算是一类并行计算应用程序,应用数据并行办法解决大量数据。

在大多数软件系统中很重要的三个问题是:

可靠性:即便面对意外状况如硬件、软件故障、人为失误等,零碎也应正确工作,尽管零碎的性能可能有所升高,但还是能执行正确的性能。

可扩展性:随着零碎规模的增长(数据,流量量或复杂性),应有正当的办法来匹配该增长。

可维护性:随着工夫的推移,许多新的人员参加到零碎的开发与运维,人们应该可能仍然无效保护该零碎。

数据密集型利用个性

为了实现数据密集型计算的高性能,有必要最大水平地缩小数据的挪动。这能够通过 reduce 算法在数据寓居的节点上执行算法来缩小零碎开销并进步性能。

数据密集型计算零碎采纳独立于机器的办法,其中运行时系统控制程序的调度、执行、负载平衡、通信和挪动。

数据密集型计算十分关注数据的可靠性和可用性。传统的大规模零碎可能容易受到硬件故障、通信谬误和软件谬误的影响,而数据密集型计算旨在克服这些挑战。

数据密集型计算是为可扩展性而设计的,因而它能够包容任何数量的数据,因而能够满足工夫要害要求。硬件和软件架构的可扩展性是数据密集型计算的最大劣势之一。

可靠性

软件的典型的可靠性包含:

  • 应用程序执行用户所冀望的性能
  • 能够容忍用户呈现谬误或不正确的软件应用办法
  • 性能可能应答典型场景、正当负载压力和数据量
  • 零碎可避免任何未经受权的拜访和滥用

故障通常被定义为组件偏离其失常规格,而生效象征零碎作为一个整体进行,无奈向用户提供所需的服务。况且不太可能将故障概率升高到零,因而通常设计容错机制来防止从故障引发零碎生效。

硬件谬误

硬件谬误总是很容易想到:硬盘解体、内存故障、停电甚至是人为拔掉网线。

一般来说,解决硬件故障的规范办法是为硬件组件增加冗余,以便如果硬件产生故障,则随时能够更换。例如:

  • 对磁盘的 RAID 配置
  • 服务器装备双电源
  • 热插拔 CPU
  • 数据中心增加备用电源、发电机等

随着数据量和应用程序的计算需要的减少,人们偏差于应用 软件故障容错技术 来容忍硬件谬误。这些软件容忍零碎的一个长处是:对于单个服务器零碎,如果须要重新启动机器(例如,利用操作系统安全补丁),则须要打算停机工夫。然而,对于能够忍耐机器故障的零碎,能够一次修补一个节点而后重启(无需停机整个零碎 – 滚动降级)。

这种形式使得零碎更具备操作便利性。

软件谬误

与硬件谬误相比,软件谬误之间更加具备关联性。这意味着,一个节点中的故障导致系统呈现更多的故障。牵一发而动全身,例如:

  • 因为软件谬误,导致当输出特定值时应用服务器总是解体
  • 一个利用过程应用了某个共享资源如 CPU、内存、磁盘或网络带宽,但却可怜失控跑飞了
  • 零碎依赖于某些服务,但该服务忽然变慢。甚至无响应或者开始返回异样的响应
  • 级联故障,其中某个组件的小故障触发另一个组件故障,进而引发更多的零碎问题

解决办法(软件故障有时没有疾速的解决办法,只能多思考软件设计的细节):

  • 认真查看依赖的假如条件与零碎之间交互
  • 进行全面的测试,测试覆盖率争取达到 100%
  • 过程隔离,容许过程解体并主动重启
  • 监控并剖析生产环节的种种数据

人为谬误

设计和构建软件系统总是由人实现的,但人类是不牢靠的。只管人类不牢靠,咱们如何使零碎牢靠?通过多种办法的组合,例如:

  • 奇妙的软件设计:通过精心设计的形象,API 和治理界面来最大水平地限度谬误机会的形式设计零碎。
  • 开发、测试、生产环境拆散 :拆散最容易出错的中央、容易引发故障的接口。提供一个功能齐全但非生产用的沙箱环境( 测试零碎),使人们能够释怀的尝试、体验,包含导入实在的数据,万一呈现问题,不会影响实在用户。
  • 充沛的测试:从单元测试到全系统集成测试、手动测试到自动测试。
  • 疾速的复原机制:当呈现人为失误,能够疾速回复,以最大水平缩小故障的影响。例如:疾速回滚配置改变,滚动公布新代码,提供校验数据的工作
  • 设置具体而清晰的监控子系统:包含性能指标和错误率

总结

可靠性不单单是针对核电站和地面交管软件之类的零碎很重要,日常的很多利用也须要牢靠的工作。商业软件的谬误可能会导致效率降落,甚至带来法律危险,电子商务网站故障比方呈现超卖,既影响网站营收,带来巨大损失。

总之,开发和软件设计人员应该秉持对用户负责的态度,设计一个牢靠的利用十分要害。

但有时也会呈现其它的状况,就义一些可靠性来升高开发成本或经营开销,对此,须要衡量。

退出移动版