分布式系统的构建原则

什么是构建一个可维护和可扩展的系统的意义?html

在早期,一个系统的形态,只是知足用户和服务器资源之间的通道,惟一要扩展和维护的是系统后面的资源,保证资源的可用和够用,而系统自己的压力并不大。算法

系统设计跟咱们生活中大多数事情同样,都须要花时间提早规划,可以让咱们的服务长时间在线。因此,咱们了解和总结一些大型系统背后的思考和权衡,可以帮助咱们在系统早期作出一些明智和靠谱的决策。服务器

现在,开源组件已经成为构建一些企业系统的基石,伴随着行业的发展,最佳实践和围绕这些系统架构的指导原则也逐渐显现出来了,在何时该用什么样的技术,须要考虑到哪些方面,各路牛人早有撰文总结。架构

本文简单回顾一下,咱们在设计一些分布式系统的时候须要考虑的一些关键因素,咱们称之为 分布式系统设计原则运维

 

一,分布式系统的设计原则

咱们将这些在构建系统须要考虑的因素称之为分布式架构设计原则,以下图所示,有六个部分,右边是咱们设计系统要达到的基本要求,包括可用、可靠以及性能,这也是 一个可维护和可扩展系统最大的意义,而左边是系统设计和开发期间要考虑的三个部分,包括扩展性、维护性和成本控制。分布式

我把原则分为俩个大的方面,目标原则 和 实践原则,工具

 

 

先来看一下目标原则,

站在用户和公司的角度,要求咱们设计的系统都必需要知足如下几个原则,特别是互联网性质的系统,这三个原则都是很是重要的。性能

  1. 可用性,系统的正常在线可用时间,对许多公司的产品声誉来讲是绝对相当重要的指标,例如一些大型的零售商网站,几分钟的不可用会致使巨大的损失,久而久之,客户也会流失殆尽。
    所以,设计这些系统可以长期稳定在线,并有系统必定的容错能力是当代企业和科技公司必备的基本能力。作到高可用,要在分布式系统中要求咱们深思熟虑的对一些关键组件进行冗余设计,发生故障时,可以即时恢复,或者优雅降级(降级一般不解决问题,优化用户体验的一种妥协的作法);
  2. 可靠性,系统的可靠性,可以保证数据分区后,数据的一致性和持久性,相同的请求同一时间返回一致的数据,数据更新之后用户可以获取最新的数据,若是是最终一致,或延迟一致要保证数据的持久性;
  3. 性能,系统性能,因为用户和流量的不断增加,逐渐成为不少公司关注的另外一个焦点,由于虽然作到可用,但系统响应速度也会直接影响用户的使用和满意度,若是是网站的话,也会影响搜索引擎的排名,最终影响用户的粘度和收益。
    因此,优化系统的响应速度,下降延迟,提升吞吐量,也是很是关键的。

知足以上目标原则,咱们要考虑系统的实现,如何来知足以上的目标原则,我把他称为 实现原则,可以在不一样的阶段,让系统都可以适应需求的变化,并在提升成本的状况下,持续知足以上几个目标原则。优化

来看一下实现原则:

  1. 扩展性,当今但凡谈到分布式系统,扩展性是首要考虑的一个方面,Google在这方面表现的尤其激进,可让系统作到无限扩展,例如Spanner,用空间换效率,用规模覆盖算法的次优选。因此,扩展系统的各个部分,几乎是达到可用性、可靠性和性能要求的主要手段。
    扩展性涉及系统的方方面面,一般是俩个纬度,scale up 和 scale out,固然,在《The Art Of Scalability》中,提到的Scale Cube,是从三个不一样纬度来扩展系统,也是扩展的一种方法,稍后单开一篇介绍,这里就不展开了; 

    网站

  2. 维护性,正所谓,一个系统配套好的运维工具,可以想方设法的弥补和设法绕过系统实现上的缺陷,使得系统总体可用性比较高,相反,会让系统的任何的问题都会毫无掩盖的暴露给用户,没有任何预警信息,同时也会增长发现问题和排查问题的成本。
    所以,在设计和实现一个系统的时候,如何作到容易维护是另外一个重要的考量,几乎跟扩展性一样重要,当问题发生,咱们如何及时的诊断和了解问题缘由,甚至可以及时的作出行动,影响系统,控制损失,下降故障级别;
    (本人屡次在这方面吃亏,经历了血的教训,开始把运维工具与功能开发提到一样的重要级别,确保问题可以及时发现,甚至提早预警)
  3. 成本控制,成本固然也是一个重要的方面,包括开发、维护、培训和硬件等成本,系统开发完成上线以后,硬件的持续投入会让成本不断增长,要让成本的投入看到效能的成倍增加,同时,根据业务量,伸缩成本的投入,按需开资,不过分设计和过分冗余,致使资源闲置,浪费。

二,小结:

这些原则做为在分布式系统架构设计的基本决策的原则,并非绝对真理,在实践当中,有时候会发生冲突和矛盾,须要作出一些牺牲和平衡,例如,在实践扩展性的时候,会增长维护和开销成本,甚至会影响可靠性。

无论怎么说,在设计分布式系统的时候,关注这些原则是很是重要的,即便有时候须要作出一些牺牲和平衡,但,这就是技术,这也是生活。

三,参考:

  1. http://www.aosabook.org/en/distsys.html 《Scalable Web Architecture and Distributed Systems》
  2. https://microservices.io/articles/scalecube.html 《The Scale Cube》
相关文章
相关标签/搜索