分布式系统的特点、瓶颈和性能指标介绍什么,它有什么问题,理解了这个概念之后,再看它的架构设计,理论基础可能会更有帮助。本文将从三个方面来描述我所理解的“分布式系统”:分布式系统的特点,分布式系统面临的挑战,如何衡量分布式系统1.分布式系统的特点,什么是分布式系统,看看wiki上面的描述1.1定义分布式系统(distributedsystem)是建立在网络上的软件系统。正是由于软件的特性,分布式系统才具有高内聚性和透明性。因此,网络和分布式系统之间的区别更多在于高级软件(尤其是操作系统)而不是硬件。分布式系统(建立在网络之上的软件系统)系统,是由许多独立的、网络连接的、通信的、物理上分离的计算节点集合而成的软件[1]。每个节点都包含全局操作系统的特定软件子集。每个软件子集都是两种不同服务供应的组合[2]。第一项服务是无处不在的最小内核或微内核,它直接控制节点的硬件。第二个服务是协调节点的独立和协调的活动系统管理组件的更高级别集合。这些组件抽象出微内核功能,并支持用户应用程序[3]。分布式操作系统-维基百科,免费的百科全书分布式系统:是一个系统,其中位于联网计算机上的组件通过传递消息来通信和协调它们的操作。组件相互交互以实现共同的目标[3]。分布式系统-ComputerScienceWiki虽然以上描述不完全相同,但含义相差不大;以我个人的理解,用大白话来形容分布式系统就是“一个系统的服务能力,由网络上的多个节点共同提供”,正如名字“分布式”这个词理解了分布式系统的概念,然后把握它加深对该分布式系统的理解的主要特点1.2Distributed分布式系统分布在多个节点(可以理解为多台计算机)中,这些节点可以是网络上的任意一台计算机,即没有原则上的空间限制。1.3点对点分布式系统中有很多节点。没有主从,利弊,应该是平等的。从服务能力的角度来看,访问分布式系统中的任意一个节点,整个服务请求应该是等价的。看到可能会有疑问,分布式系统中经典的主从架构和数据拆分架构不满足这种点对点的特性(这个问题暂且留着,后面会详细回答)1.4自治分布式系统中的每个节点都有自己的计算能力,都有独立的处理数据的功能。通常,彼此地位平等,没有主次之分。它们可以自主工作,并使用共享通信线路传输信息和协调任务处理。1.5并发性分布式系统中既然有多个节点,自然就有多个节点同事响应请求的能力,即并发支持。如何做好分布式系统的并发控制,是所有分布式系统都需要解决的问题问题二、分布式系统面临的问题当系统分布在多个节点上时,在单机场景下自然会带来很多问题,比如经典分布式系统的8大谬误|一辉辉学习2.1全局时钟分布式系统中有多个节点,如何保证每个节点的时钟一致?这是一个需要考虑的问题。我们知道,著名的分布式主键生成算法“SnowflakeAlgorithm”就是以机器时钟作为算法因子。如果一个系统中的多个节点不能保证统一的时钟,那么这个算法的唯一性就无法保证2.2网络延迟和异常网络有开销,多个节点之间的通信有成本。既然有网络开销或者异常情况,如何保证多个节点的数据一致性呢?在无法保证数据一致性的情况下,如何在分布式系统中提供等价性?在经典的CAP理论中,一般需要保证P(networkpartition)。如果一个系统中有多个计算节点,那么网络问题就不可避免,网络分区就不可避免地存在。2.3如何保证所有节点间的数据一致性完全的数据一致性是一个巨大的挑战。这个问题比较容易理解。我们在分布式系统中操作一个节点来实现数据的修改。如果我们要保证数据的一致性,就需要所有节点同步接收这个修改。但是我们需要注意当网络不可靠,网络传输存在延迟时,如何衡量数据的一致性和服务的可用性是我们在设计分布式系统时需要选择的。2.4节点异常宕机属于不可抗力因素,如果分布式系统中某个节点宕机,对整个系统有什么影响?如何保证机器宕机不会影响系统的可用性?机器恢复后,如何保证数据的一致性?而如何判断一个节点是否正常呢?2.5资源竞争上面说了,分布式系统天生就支持并发,那么下面的问题就是如何竞争资源;当一个资源一次只允许一个实例访问时,如何处理?多个系统同时访问一个资源会不会有数据版本差异(比如经典的ABA问题)和数据一致性问题?基于这个问题,分布式锁可以说是应运而生。2.6全局协调这个知识点相信各位开发者都不陌生。你如何理解这种协调?举几个简单的例子,如何判断分布式系统中哪些节点正常提供服务,哪些节点出现故障。例如,如果一个任务在分布式系统中预计只执行一次,那么这个任务应该由哪个节点来执行呢?如果一组首先后续请求发送到分布式系统,但由于网络问题,后续请求可能先被系统接收。如何处理这种情况?一个用户已经登录,如何在所有节点确认他的身份?2.7灰色总结其实,分布式系统面临的挑战不仅限于以上。具体系统面临的问题可能不同,但总的来说,分布式系统的理论基础会给我们很好的指导方向,本节推荐查看*分布式设计模式概述|一个灰色学习3.分布式系统的指标最后我们来看看如何衡量一个分布式系统的“好”,它的指标有哪些3.1性能指标常用的性能指标如rt、QPS、TPS来判断承载一个系统的能力,重点关注哪些关键点是响应延迟,并发能力,事务处理能力3.2可用性这是传说中你的系统达到几个9的指标,也就是系统出现异常的时间占总可用时间的比例系统的可用性可以通过系统中断时间与正常服务时间的比率来衡量,或者通过功能失败次数与成功次数的比率来衡量。可用性是分发的一个重要方面。该指标衡量系统的健壮性,是系统容错能力的体现。3.3可扩展性系统的可扩展性是指分布式系统通过扩展集群机器的规模来提高系统性能(吞吐量、延迟、并发)、存储容量和计算能力的特性。最简单的说,就是你的系统能不能直接加机器来解决性能瓶颈。如果可以增加机器,是否有上限(比如因为数据库连接数限制了机器数,如果机器数增加到一定程度,服务能力不会有明显提升)3.4一致性分布式为了提高系统的可用性,总是免不了使用副本机制,这就导致了副本一致性的问题。一致性模型越强,用户就越容易使用。4.总结这篇文章比较干,全是文字说明,介绍了什么是分布式系统,它的特点和方面。对于问题和衡量指标,我们细化一下关键要素,比如分布式系统的以下特点:分布式、等价性、并发性、自治性、分布式系统面临的挑战、全局时钟网络延迟、数据一致性异常、节点资源异常竞争、全局协调、分布式系统指标性能指标可用性可扩展性一致性
