分布式系统从当初的CORBA 到EJB,Web和SOA,从集群到如今的NoSQL 云计算和大数据Hadoop等分布式系统,横向水平扩展Scala out/in是分布式系统设计的一个特色,可靠性 容错性是两个质量指标。node
什么是分布式系统?数据库
一大批服务器组成一个集合,对于用户来讲仍然是一个总体连贯系统。缓存
A. Tanenbaum定义:分布式网络的计算机中的组件之间协调动做是经过消息进行通信。安全
G. Coulouris定义:当你知道有一台电脑崩溃,可是你的软件运行历来不会中止。服务器
Leslie Lamport定义:分布式系统是这样系统:旨在支持应用程序和服务的开发,能够利用物理架构 由多个自治的处理元素,不共享主内存,但经过网络发送异步消息合做。网络
与分层应用区别:分层的应用程序(例如,3层)是 划分应用程序逻辑,是一种逻辑分层,而不是物理,而分布式系统DS是物理分层,和实际部署有关。架构
与传统集中式系统相比:并发
集中式系统是一种Scale out/in,纵向扩展,要么向上升级服务器到中大型机,要么升级多核,增长CPU核数,集中式纵向扩展适合计算聚合度比较高的数据,而分布式适合计算松散数据,非结构化或半结构化数据。不管采起哪一种扩展伸缩方案,须要根据业务数据特色而定。异步
任何分布式系统老是须要完成两个任务:计算和存储。计算和存储分离是分布式系统的重要特征。而一般在集中式或单机系统中,这二者是可能结合在一块儿,好比经过一个SQL语句实现查询后排序,查询是从存储中得到数据,排序是属于计算,所以这个SQL语句实际是将计算和存储耦合在一块儿。在应对大数据或大并发的状况下,这种方便的捆绑带来性能问题,而分布式计算和分布式存储虽然带来复杂性,可是也为系统的处理能力打开了上升拓展的空间。分布式
分布式系统特色:
分布式系统是难于理解、设计、构建 和管理的,他们将比单个机器成倍还要多的变量引入到设计中,使应用程序的根源问题更难发现。SLA(服务水平协议)是衡量停机和/或性能降低的标准,大多数现代应用程序有一个指望的弹性SLA水平,一般按"9"的数量增长(如,每个月99.9或99.99%可用性)。每一个额外的9变得愈来愈难实现。
让事情更加复杂的是,咱们愈来愈常见地看到:分布式系统的故障表现为间歇性错误或性能降低(俗称的限电)。这些失败模式耗费更多时间来诊断。例如,Joyent经营一些分布式系统做为其云计算基础设施的一部分。在这样一个系统中,包括高可用性、分布式的键/值存储,Joyent最近经历了瞬态应用程序超时。对于大多数用户系统运行正常,其反应延迟也是在SLA范围内。然而,有百分之5 - 10的请求超出了一个预约义的程序超时。这样的失败问题并无重如今开发或测试环境中,他们常常会"消失"几分钟到几小时。排除这个故障的根本是须要大量数据存储的系统分析。
这些系统包括:数据存储API(node . js),RDBMS(关系数据库管理系统)和由系统内部使用(PostgreSQL)以及操做系统和终端用户应用程序依赖于的键/值系统。最终,致使过分的根本问题是在应用程序语义锁定,但肯定以前须要至关大的数据收集和相关性工做,包括工程师耗费大量工做时间以及学习不一样领域的专业知识。
分布式系统由两个物理因素的限制:
这两个约束致使下面值得挑战的状况发生:
适用于分布式系统架构的最多见的一个术语是SOA(面向服务架构)。SOA能够避免不愉快的CORBA(公共对象请求代理体系结构),经过WS - *标准,一套松散耦合的Web服务完成独立的小功能,而且彼此独立,他们是一个有弹性的分布式系统的基础。对比上一代,服务是新流程,他们是正确的抽象层次系统中的离散功能。
构建面向服务架构的第一步是肯定每一个函数功能如何构成总体业务目标,将这些业务映射到离散的服务,且具备独立的断层边界、扩展性和数据负载量。肯定为每一个服务时,您必须考虑下列事项:
一般,咱们最熟悉的模式(例如,一个分布式系统上实现共享内存抽象)是太昂贵了。一个分布式系统越弱势越能保证其中元素有更大的行动自由,从而焕发潜在的更大的性能- 但它也可能致使很难管理。这就须要咱们有极大智慧,不能以牺牲性能换来管理的方便性。所以,试图将分布式系统当作一个统一的单一系统的思惟会阻碍分布式系统的扩展。
分布式系统遵循CAP定律,在高一致性 高可用性和分区容错性之间三选二:
对于一个数据集有两种设计方式:
分布式系统针对计算和存储的策略是不一样的,对于数据的存储主要是分区和复制,而对于计算主要是保证事件的顺序,由于分布式计算任务是由事件驱动的,好比Storm等等。那么事件的顺序表明了业务逻辑的顺序,事件有时是树形嵌套事件,可靠性就是必须保证一个树形集合全部事件都获得网站执行是一个事务原子的。