读书笔记之数据密集型应用的可维护性

简介: 前面两篇文章分别介绍了可靠性和可扩展性,本篇文章将介绍了第三个特性:可维护性。

前言

前面两篇文章分别介绍了可靠性和可扩展性,本篇文章将介绍了第三个特性:可维护性

网络异常,图片无法展示
|

软件设计三原则


软件开发的大部分成本并不在最初的开发阶段,而是在于整个生命周期内持续的投入。良好的软件设计方式可以最大限度的减少维护过程中的痛点。


软件系统的三个设计原则是:


可运维性:方便运营团队来保持系统平稳运行。

简单性:简化系统复杂化,使后续的工程师能够轻松理解系统。

可演化性:后续工程师能够轻松地对系统进行更改,并随着需求的变化而将其适配到非典型的场景。也被称为可延伸性易修改性可塑性


可运维性:运维更轻松

“良好的操作性经常可以化解软件的局限性,而不规范的操作则可以轻松击垮软件。”


操作系统对于保持软件系统顺利运行至关重要。如果系统使日常任务变得容易,则可以使运营团队将精力集中在高价值活动上,从而具有良好的可操作性。数据系统可以执行以下操作以使日常任务变得容易,例如:

  • 提供良好的系统监控和系统运行时行为和可观测性
  • 支持自动化,与标准工具集成
  • 避免绑定特定的机器,这样在系统不间断运行的同时,允许机器停机维护
  • 提供良好的文档和易于理解的操作模式(“如果我做了 X,会发生 Y”)
  • 尝试自我修复,在必要的让管理员手动控制系统状态
  • 提供良好的默认配置,且允许管理员在需要时方便地修改默认值
  • 行为可预测,减少意外发生


简单性:简化复杂度


复杂性有如下各种各样的表现方式:

  • 状态空间的膨胀
  • 模块紧耦合
  • 令人纠结的相互依赖关系
  • 不一致的命名和术语
  • 为了性能而采取的特殊处理
  • 为解决某特定问题而引入的特殊框架等


降低复杂性可提高软件可维护性,这就是为什么简单性应该成为我们构建的系统的关键目标的原因。这不一定是指降低系统功能,这也可能意味着降低意外复杂性。如果软件解决的问题(如用户所见),但仅源于实现,复杂性是偶然的。


抽象是消除意外复杂性最好手段之一。 一个好的设计抽象可以隐藏大量的实现细节,并对外提供干净、 易懂的接口。 一个好的设计抽象可用千各种不同的应用程序。 这样, 复用远比多次重复实现更有效率;

另一方面, 也带来更高质量的软件, 而质量过硬的抽象组件所带来的好处, 可以使运行其上的所有应用轻松获益。


可演化性:易于改变

系统需求不断变化,我们必须确保我们能够处理这些更改。敏捷社区还发布了很多技术工具和模式,以帮助在频繁变化的环境中开发软件,例如测试驱动开发(TDD)和重构


简单易懂的系统往往比复杂的系统更容易修改。


总结

一个应用程序必须满足预期的多种需求,主要包括功能和非功能性要求。

  • 功能: 应该做什么,例如允许以各种方式存储,检索,搜索和处理数据。
  • 无功能:常规特性,例如安全性,可靠性,合规性,可伸缩性,兼容性和可维护性。


本笔记重点介绍了可靠性、可扩展性和可维护性。


  • 可靠性意味着即使发生故障,系统也能正常工作。
  • 可扩展性意味着当负载增加时,有效保持系统的性能良好。
  • 可维护性意味着许多方面,但究其本质上是为了让工程和运营团队更为轻松。良好的抽象可以帮助降低复杂性,并使系统更易于修改和适配新场景。良好的可操作性意味着对系统健康状况有良好的可观测性和有效的管理方法。
相关文章
|
JavaScript 数据可视化 前端开发
《面向三维GIS的Cesium开发与应用》读书笔记
《面向三维GIS的Cesium开发与应用》读书笔记
|
敏捷开发 存储 SQL
数据密集型应用系统设计(读书笔记)第一天
数据密集型应用系统设计(读书笔记)第一天
92 0
|
存储 SQL 缓存
读书笔记《数据密集型应用系统设计》- 数据存储与检索
《数据密集型应用系统设计》是一本很好的介绍数据密集类系统设计原理的纲要性书籍,笔者再次阅读下,记录一些读书笔记,也写一些自己的思考穿插其中,以做备忘。
162 0
|
存储 分布式计算 安全
【读书笔记】大数据原理与应用:分布式文件系统HDFS
【读书笔记】大数据原理与应用:分布式文件系统HDFS
177 0
【读书笔记】大数据原理与应用:分布式文件系统HDFS
|
Java 数据库 算法
《Akka应用模式:分布式应用程序设计实践指南》读书笔记9
性能   这也是一个比较大的问题,因为性能不一定是Akka本身的问题,还可能是你代码写的有问题。   优化的第一步就是找出性能的瓶颈,隔离出应用程序里面比较耗时的部分,然后尝试对其优化,减少需要耗费的时间成本。
1697 0
|
缓存 运维 数据库
《Akka应用模式:分布式应用程序设计实践指南》读书笔记8
可用性   简单点来说就是系统能否正常使用。如果系统能够及时响应一个请求,则认为是可用的;如果响应时间过长或者根本不响应,则是不可用的。系统在停机或超载时是不可用的。一般用系统正常运行时长的百分比来计量系统的可用性,例如常常用N个9表示系统的可用性。
1922 0
|
存储 缓存 NoSQL
《Akka应用模式:分布式应用程序设计实践指南》读书笔记6
一致性和可扩展性   一致性是系统内比较复杂的属性,它会随着系统的变化而变化。简单来说,一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。一旦系统具有并行性(分布式只是并行的一种表现),保持一致性就变得困难了,毕竟需要协调全局状态。
1414 0
|
运维 Java
《Akka应用模式:分布式应用程序设计实践指南》读书笔记7
容错   容错绝对是分布式系统最难搞定的事儿,至少我这样认为,因为意外总是会发生。   处理故障在许多方面意味着要放弃全局一致性。Akka是基于不粗要调用方负责处理故障的想法而建立的。它主张由发生故障的actor负责处理问题,在actor不能处理的情况下,会向其“监督者”寻求帮助。
1758 0