本文主要是介绍DDIA学习笔记---第一章:可靠性,可扩展性,可维护性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一开始提到,现如今很多应用程序都是“数据密集型”,而非“计算密集型”。其实想想,对于我们普通群体来说,确实是这样的。就拿你自己手机上的大部分应用,社交,娱乐(游戏除外)类型基本都是“数据密集型”应用,而那些稍微专业点,涉及到图像处理,大型游戏等应用属于“计算密集型”了。因此,在可预见的时间内,我个人感觉数据密集型应用的使用频率和数量应该是更高的。
可靠性
-
硬件故障
断电,洪水,地震,磁盘损坏等等非人为可控的因素,都会对系统造成影响。大家会使用“容灾性”这个词来考量这个系统能够经受故障的容忍程度。比如数据中心设置在不同的地点,为了防止某个地点发生不可避免的自然灾害,增加数据的备份,来防止单节点故障对系统的影响。硬件故障发生的可能性虽然不是那么大,但是这个因素必须要考虑。
-
软件错误
是人多少都会犯错误,你或许会说只要经验足够,那么就可以减少去踩之前遇到的坑。你说的不错,但是业务需求是不断变更的,所以经常还是会遇到新的东西的。这个时候,编码过程细节就考虑不到位了,这个就得充分做好自检和程序上线之前做好测试工作。
-
人为错误
比如安装部署,参数配置,以及使用过程中,无法确定用户的输入,这些需要后台代码里面做好校验工作,以防止错误输入导致系统无法处理,最终达到不可预见的现象。
可扩展性
-
描述负载
-
描述性能
-
应对负载的方法
可维护性
-
可操作性:人生苦短,关爱运维
-
简单性:管理复杂度
-
可演化性:拥抱变化
一个应用必须满足各种需求才称得上有用。有一些功能需求(functional requirements)(它应该做什么,比如允许以各种方式存储,检索,搜索和处理数据)以及一些非功能性需求(nonfunctional )(通用属性,例如安全性,可靠性,合规性,可扩展性,兼容性和可维护性)。在本章详细讨论了可靠性,可扩展性和可维护性。
可靠性(Reliability)意味着即使发生故障,系统也能正常工作。故障可能发生在硬件(通常是随机的和不相关的),软件(通常是系统性的Bug,很难处理),和人类(不可避免地时不时出错)。容错技术可以对终端用户隐藏某些类型的故障。
可扩展性(Scalability)意味着即使在负载增加的情况下也有保持性能的策略。为了讨论可扩展性,我们首先需要定量描述负载和性能的方法。我们简要了解了推特主页时间线的例子,介绍描述负载的方法,并将响应时间百分位点作为衡量性能的一种方式。在可扩展的系统中可以添加处理容量(processing capacity)以在高负载下保持可靠。
可维护性(Maintainability)有许多方面,但实质上是关于工程师和运维团队的生活质量的。良好的抽象可以帮助降低复杂度,并使系统易于修改和适应新的应用场景。良好的可操作性意味着对系统的健康状态具有良好的可见性,并拥有有效的管理手段。
这篇关于DDIA学习笔记---第一章:可靠性,可扩展性,可维护性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!