分布式系统的关键特性包括可伸缩性、可靠性、可用性、效率和可管理性。让我们简单回顾一下
可伸缩性(包括可扩展性)
可伸缩性是系统、进程或网络增长和管理不断增长的需求的能力。任何能够不断进化以支持不断增长的工作量的分布式系统都被认为是可伸缩的。
由于数据量增加或工作量增加(例如事务数)等许多原因,系统可能必须进行扩展。一个可扩展的系统希望在不损失性能的情况下实现这种扩展。一般来说,系统的性能虽然被设计(或声称)为可伸缩的,但由于管理或控制的原因,随着系统的大小而下降
环境成本。例如,网络速度可能会变慢,因为机器之间往往相距很远。更一般地说,有些任务可能不会被分发,这可能是因为它们固有的原子特性,也可能是因为系统设计中的某些缺陷。在某种程度上,这样的任务会限制分配所获得的速度。可伸缩的体系结构避免了这种情况,并试图均衡所有参与节点上的负载。
水平扩展与垂直扩展:
水平扩展意味着通过向资源池中添加更多服务器来扩展(也就是我们常说的堆机器),而垂直扩展意味着通过向现有服务器添加更多电源(CPU、RAM、存储等)来扩展。
通过水平扩展,通过向现有池中添加更多的机器,通常更容易动态扩展;垂直扩展通常仅限于单个服务器的容量,超出该容量的扩展通常涉及停机时间,并且有一个上限。
水平扩展的好例子是Cassandra和MongoDB,因为它们都通过添加更多的机器来满足不断增长的需求,从而提供了一种简单的水平扩展方法。类似地,垂直伸缩的一个很好的例子是MySQL,因为它允许通过从较小的机器切换到较大的机器来实现垂直伸缩。然而,这一过程往往涉及停机时间。
可靠性(高可用、稳定性)
根据定义,可靠性是一个系统在给定时间内发生故障的概率比如我们常说的全年不可用时常是多少,要达到稳定性目标是几个9。简单地说,如果一个分布式系统在一个或多个软件或硬件组件出现故障时仍能提供服务,那么它就被认为是可靠的。可靠性代表了任何分布式系统的主要特征之一,因为在这样的系统中,任何出现故障的机器都可以被另一台正常的机器替换,从而确保完成所请求的任务。
以大型电子商务商店(如Amazon)为例,其中一个主要要求是,任何用户事务都不应因为运行该事务的机器出现故障而取消。例如,如果用户已将一个项目添加到其购物车中,则系统不会丢失它。可靠的分布式系统通过软件组件和数据的冗余来实现这一点。如果承载用户购物车的服务器出现故障,则另一个具有购物车精确副本的服务器应该替换它。
显然,冗余是有代价的,而一个可靠的系统必须为此付出代价,才能通过消除每一个故障点来实现服务的恢复能力。
可用性
可用性也是作为CAP和BASE中的A理论,必须要保证系统可用。根据定义,可用性是系统在特定时间段内保持运行以执行其所需功能的时间。它是对系统、服务或机器在正常条件下保持运行的时间百分比的简单度量。一架每月可以飞行数小时而不停机的飞机可以说是高可用性的。可用性考虑了可维护性、维修时间、备件可用性和其他后勤因素。如果飞机因维修而停机,则认为在此期间不可用。
可靠性是考虑到现实世界中可能发生的各种情况的一段时间内的可用性。一架能在任何可能的天气下安全飞行的飞机比一架易受可能情况影响的飞机更可靠。
可靠性VS可用性
如果一个系统是可靠的,它是可用的。然而,如果可用,就不一定可靠。换句话说,高可靠性有助于实现高可用性,但通过最小化维修时间和确保备件可用性,即使产品不可靠,也有可能实现高可用性
需要时随时可用。让我们以一家在线零售店为例,它在推出后的头两年有99.99%的可用性。然而,该系统在启动时没有进行任何信息安全测试。客户对这个系统很满意,但是他们没有意识到它不太可靠,因为它很容易受到风险的影响。在第三年,系统经历了一系列信息安全事件,这些事件突然导致长时间的极低可用性。这会对客户的声誉和财务造成损害。
效率
为了理解如何度量分布式系统的效率,假设我们有一个以分布式方式运行的操作,并作为结果交付一组项。其效率的两个标准度量是表示获得第一个项目的延迟的响应时间(或延迟)和表示在给定时间单位(例如,秒)中交付的项目的数量的吞吐量(或带宽)。这两项措施对应以下单位成本:
•无论消息大小,系统节点全局发送的消息数。
•表示数据交换量的消息大小。
分布式数据结构所支持的操作的复杂性(例如,在分布式索引中搜索特定键)可以描述为这些成本单位之一的函数。一般来说,用“消息数”来分析分布式结构过于简单。它忽略了许多方面的影响,包括网络拓扑、网络负载及其变化、软件可能的异构性
然而,很难建立一个精确的成本模型来准确地考虑所有这些性能因素;因此,我们不得不接受对系统行为的粗略而稳健的估计。
RT和throughout一般是作为衡量系统的效率基准指标。
可维护性或可管理性
在设计分布式系统时,另一个重要的考虑因素是它的操作和维护有多容易。可服务性或可管理性是系统维修或维护的简单性和速度;如果修复故障系统的时间增加,那么可用性就会降低。可管理性需要考虑的问题是:当问题发生时,诊断和理解问题的难易程度、更新或修改的难易程度,以及系统操作的简单程度(即,系统是否正常运行而没有故障或异常?)。
早期检测故障可以减少或避免系统停机。例如,当系统发生系统故障时,某些企业系统可以自动呼叫服务中心(无需人工干预)。
一个好的分布式系统,最基础的几个关键特征如上所述,思考下你的系统是否是好的分布式系统呢?符合上述说的核心参考特征呢?
参考资料: