重学分布式(一) 三千字长文与你一起走进分布式的大门

503 阅读9分钟
我是分布式初学者, 虽然查阅了很多资料, 但可能还是有许多不准确的地方, 敬请指正.

一, 什么是分布式系统?

定义: 分布式系统是若干独立计算机的集合, 这些计算机对于用户来说就像是单个相关系统

您可能不太理解这句话的意思, 那么我来通俗的为您解释一下: 分布式系统是由独立的计算机所组成的, 但是它又同时隐藏了其中单个计算机在系统里面所承担任务的细节. 即使分布式系统中某些部分可能暂时发生了故障, 但是其整体在通常情况下还是高可用的, 对于用户而言, 并不会觉察到哪些部分正在进行替换和维修, 以及加入了哪些新的部分来为更多的用户和程序提供服务.

二, 分布式系统的类型

1. 分布式计算系统

分布式系统的一个重要的分类就是用于高性能计算任务的系统, 它又有两个分类.

1.1 集群计算系统

底层是由类似的工作站或者PC集组成, 通过高速的局域网紧密的联系起来, 每个节点都是相同的操作系统, 所以它的突出特征就是它的同构性, 即大多数情况下, 集群中的计算机都是相同的, 它们都具有相同的操作系统, 都通过同一网络连接起来. 在某种意义下, 它们可以被看作一台超级计算机

1.2 网格计算系统

网格管理系统具有高度的异构性, 它的硬件, 操作系统, 网络, 管理域以及安全策略都有所不同. 它通过虚拟组织的方式, 把来自不同计算机组织的资源集中到一起.

1.3集群计算与网格计算的区别:
  1. 简单地,网格与传统集群的主要差别是网格是连接一组相关并不信任的计算机,它的运作更像一个计算公共设施而不是一个独立的计算机。网格通常比集群支持更多不同类型的计算机集合。
  2. 网格本质上就是动态的,集群包含的处理器和资源的数量通常都是静态的。在网格上,资源则可以动态出现,资源可以根据需要添加到网格中或从网格中删除。
  3. 网格天生就是在本地网、城域网或广域网上进行分布的。网格可以分布在任何地方。而集群物理上都包含在一个位置的相同地方,通常只是局域网互连。集群互连技 术可以产生非常低的网络延时,如果集群距离很远,这可能会导致产生很多问题。物理临近和网络延时限制了集群地域分布的能力,而网格由于动态特性,可以提供 很好的高可扩展性。
  4. 集群仅仅通过增加服务器满足增长的需求。然而,集群的服务器数量、以及由此导致的集群性能是有限的:互连网络容量。也就是说如果一味地想通过扩大规模来提高集群计算机的性能,它的性价比会相应下降,这意味着我们不可能无限制地扩大集群的规模。 而网格虚拟出空前的超级计算机,不受规模的限制,成为下一代Internet的发展方向。
  5. 集群和网格计算是相互补充的。很多网格都在自己管理的资源中采用了集群。实际上,网格用户可能并不清楚他的工作负载是在一个远程的集群上执行的。
  6. 尽管网格与集群之间存在很多区别,但是这些区别使它们构成了一个非常重要的关系,因为集群在网格中总有一席之地—— 特定的问题通常都需要一些紧耦合的处理器来解决。然而,随着网络功能和带宽的发展,以前采用集群计算很难解决的问题现在可以使用网格计算技术解决了。

2. 分布式事务处理系统

比如我们对数据库的操作就是以事务处理的形式来运行的, 关键点就是要么所有请求都被运行, 要么所有请求都不被运行. 事务处理这种全是或者全非的属性是其4个突出属性之一. 具体的说, 事务处理具有以下四个属性(ACID):

  • 原子性: 意味着分布式事务要么完全被运行, 要么完全不被运行, 而且, 如果被运行, 那么就是在单个不可分割的, 瞬间的动作之中进行的. 当某个事务在处理的过程中, 其他的进程都不能看到任何中间的状态
  • 一致性: 事务处理不会违反系统的不变性, 这意味着, 如果系统具有某些必须维持的不变性, 那么在事务处理之前与之后, 这个不变性都将继续保持着, 可能在事务处理的过程的某个瞬间, 这种不变性被破坏了, 但是外部看不见这个过程, 在处理完成之后, 外界所看到的是不变性任然保持
  • 独立性: 并发的事务处理并不会相互干扰. 着意味着如果有多个事务同时运行, 那么它们相互之间看上去仿佛隔离了一样, 不会对其他事务的处理产生干扰
  • 持久性: 它表明, 一旦事务提交, 那么不论发生了什么, 该事务处理都将往前进行下去, 而且其结果是永久性的, 事务处理结束之后, 不能回滚或者丢弃结果

三, 分布式系统的指标

现如今, 摩尔定律已经不受用, 单机性能上限已经到达了瓶颈, 所以分布式系统用大量的廉价的机器去解决单个高性能机器处理大规模任务时的性能瓶颈问题, 以及可用性与可扩展性的问题. 故我们衡量一个分布式系统的指标应当是, 性能, 资源占用, 可用性与可扩展性.

1. 性能

不同的系统, 对于它所要完成的业务不同, 它所追求的性能指标也就不同, 但常见的性能指标有以下几个.

  • 吞吐量
  • 响应时间
  • 完成时间

下面我们依次来分析以下这几个不同的性能指标:

1.1 吞吐量

吞吐量反映的是一个系统在一定的时间内能够处理的任务数量, 比如说一个学生在一定时间内做出来的题目的数量, 当然, 这个也不太准确, 毕竟有的题目难, 有的题目简单嘛, 所以我们又要在吞吐量之下分三个不同的指标

1) QPS: 即查询数每秒, 如果一个系统的读操作很多, 那么这个指标将是这个系统所重点考虑的, 越高表示对读操作的支持越好
2) TPS: 即事务数每秒, 这个指标通常对应于写操作.
3) BPS: 即比特数每秒, 用于衡量一个系统每秒处理的数据量, 对于一些特殊的系统, 我们不能够仅仅按请求数或者事务数来衡量其吞吐量, 因为请求与请求, 事务与事务之前存在着很大的差异, 这种情况下, BPS能更好的反映系统的吞吐量.
1.2 响应时间

响应时间是客户端发出请求到接受响应之间的时间. 这是一个非常重要的指标, 因为它涉及到用户的体验, 对于时延敏感的业务非常重要.

延迟和响应时间通常用作同义词, 但它们并不一样. 响应时间是客户所看到的, 除了实际的处理请求的时间外, 还包括网络延迟和排队延迟. 而延迟是某个请求等待处理的持续时长, 在此期间它处于休眠状态, 并等待服务.

1.3 完成时间

完成时间指的是系统处理请求所需要的时间, 通常任务并行就是为了缩短完成时间

2. 资源占用

这个概念比较容易理解, 就是一个系统在提供服务是所需要的的硬件资源, 比如磁盘空间, 内存的占用.

3. 可用性

可用性是衡量一个分布式系统在允许部分组件失效的情况下, 仍能够正常工作的概率, 反映了系统的鲁棒性, 即一个系统的容错能力.

4. 可扩展性

可扩展性是用来描述系统应对未来负载增长时的能力的术语.

人们经常讨论的扩展有:

  • 纵向扩展: 即增强单台机器的性能, 很显然, 单台高性能机器远贵于多台普通性能的机器, 而且现在单台机器的性能也已经到达了瓶颈
  • 横向扩展: 即增加集群内机器的数量.

现代世界的优秀架构通常将这两种方法结合起来, 通过扩展集群机器规模提高系统性能 (吞吐、响应时间、 完成时间)、存储容量、计算能力.

衡量系统可扩展性的常见指标是加速比(Speedup),也就是一个系统进行扩展后相对扩展前的性能提升。

  • 如果你的扩展目标是为了提高系统吞吐量,则可以用扩展后和扩展前的系统吞吐量之比进行衡量。
  • 如果你的目标是为了缩短完成时间,则可以用扩展前和扩展后的完成时间之比进行衡量。

参考文献:

分布式计算、并行计算及集群、网格、云计算的区别

分布式系统原理与范型 第二版