¶分布式系统学习(一) : 可扩展的Web体系结构和分布式系统
本文是学习用的自翻译版本,原文地址 : Scalable Web Architecture and Distribute Systems
¶开篇:
- 出于系统学习了解分布式知识的想法,从耗子叔的极客时间专栏看到推荐的入门阅读文章,抱着一边学习一边翻译的的想法,开始尝试系统地了解分布式领域的技术知识。
¶译文:
- 对于一些大型站点来说,开源软件已经成为基础设施模块一样的存在。而且随着这些站点规模的持续扩张,对应的最佳实践和设计原则也应运而生。这一章节力求涵盖大型站点设计的关键问题,以及用于实现站点架构设计的构建模块等。
¶1.1 WEB分布式系统设计原则
构建和维持一个具备扩展性的系统/应用意味着什么?在底层的实现方式上仅仅是通过远程网络资源将用户关联起来–使得系统具备扩展性的是资源的分布或者说访问资源的方式,是分散在多台服务器上的。
像生活中中的其他事情一样,在构建web服务之前先花时间仔细制定计划,有助于系统的长期稳定;理解大型站点设计背后的注意点和权衡取舍会在设计小型站点时产生更优的决策。以下是一些影响大型扩展性系统设计的关键原则:
可用性: 对于大多数企业来说,自身站点的正常可用时间会直接影响到企业自身的声誉和业务,对于一些大型的在线电商而言,数分钟的站点不可用将会导致百万收入的流失,因此它们的系统设计的持续可用和弹性容错不仅仅是基本的业务需求,也是技术要求。高可用系统要求谨慎的地考虑系统关键组建的冗余性,部分故障的快速恢复,问题出现时的服务降级。
性能: 对大多数站点来说性能越来越成为重要的考量标准。站点的响应速度会直接影响系统使用和用户体验,就像搜索引擎排名,性能直接关联到站点收入和用户留存。因此,构建系统如何优化以达到快速响应和低延迟是关键
可靠性: 系统需要可靠是毋庸置疑的,请求指定数据的请求应该直接返回同样的数据,但是当数据更新之后,同样的数据请求应该返回更新后的数据。用户需要知道系统是否写入或存储了新的内容,这些内容可以持久化并在将来也可以被检索获取到。
扩展性: 谈到任何大型分布式系统时,系统大小只是分布式系统扩展需要考虑的一个方面。就像需要对系统扩容以支持更大的负载,通常指的都是系统的伸缩性。系统的伸缩性可以映射为系统的许多指标:能支多少额外的业务,是否能便利地增加存储容量,能够处理多少笔正常交易等。
可管理性: 设计易于操作的系统也是另一个需要考量的方面。系统的可管理性等同于操作的伸缩性:保养和更新。具备可管理特性的系统,意味着当问题出现时很容易诊断问题根源,易于对系统进行更新,且易操作。
成本: 成本是一个比较重要的因素。很明显,包含了软件和硬件的成本,但也要考虑到部署和维护系统所需的部分。系统开发所需的大量开发者,系统运行所需的准备工作,甚至包括系统使用的培训过程等,这所有的一切都可以归纳到成本的范畴中来。