Contents

分布式缘何而起(01)

分布式起源

单机模式

所谓单机模式是指,所有应用程序和数据均部署在一台电脑或服务器上,由一台计算机完成所有的处理。 以铁路售票系统为例: https://static001.geekbang.org/resource/image/9b/33/9b57d43a105675d931d43cbf03576d33.jpg 单机模式的主要问题是:性能受限,存在单点失效问题。

数据并行或数据分布式

为解决单机模式的问题,并行计算得到了发展,进而出现了数据并行(也叫作数据分布式)模式。并行计算采用消息共享模式使用多台计算机并行运行或执行多项任务,核心原理是每台计算机上执行相同的程序,将数据进行拆分放到不同的计算机上进行计算。

  • 第一步,将应用与数据分离,分别部署到不同的服务器上: https://static001.geekbang.org/resource/image/22/ac/22f41598926f58bb47533e30007c8cac.jpg

  • 第二步,对数据进行拆分,比如把同一类型的数据拆分到两个甚至更多的数据库中,这样应用服务器上的任务就可以针对不同数据并行执行了。 https://static001.geekbang.org/resource/image/56/a0/568c3fba1bac04aa320db2f1cf0258a0.jpg

这种模式的好处是,可以利用多台计算机并行处理多个请求,使得我们可以在相同的时间内完成更多的请求处理,解决了单机模式的计算效率瓶颈问题。 但这种模式仍然存在如下几个问题:

  • 相同的应用部署到不同的服务器上,当大量用户请求过来时,如何能比较均衡的转发到不同的应用服务器上,解决这个问题需要设计一个负载均衡器。
  • 当请求量较大时,对数据库的频繁读写操作,使得数据库的IO访问成为瓶颈。解决这个问题的方式是读写分离,读数据库只接收读请求,写数据库只接收写请求,读写数据库之间需要进行数据同步,以保证数据一致性。
  • 当部分数据成为热点数据时,会导致数据库访问频繁,压力增大。解决这个问题的方法是引入缓存机制,将热点数据加载到缓存中,一方面可以减轻数据库的压力,另一方面也可以提升查询效率。

由此可见,数据并行模式的主要问题是:对提升单个任务的执行性能及降低时延无效

任务并行或任务分布式

任务并行指的是,将单个复杂的任务拆分为多个子任务,从而使得多个子任务可以在不同的计算机上并行执行。 https://static001.geekbang.org/resource/image/59/f2/59f6e43fcd6a6d28741841fc312c10f2.jpg

任务并行模式完成一项复杂任务主要有两个核心步骤:首先将单任务拆分成多个子任务,然后让多个子任务并行执行。

由于多个子任务可以在多台计算机上运行,因此通过将同一任务待处理的数据分散到多个计算机上,在这些计算机上同时进行处理,就可以加快任务执行的速度。因为,只要一个复杂任务拆分出的任意子任务执行时间变短了,那么这个任务的整体执行时间就变短了。

总结

单机模式指的是,所有业务和数据均部署到同一台机器上。这种模式的好处是功能、代码和数据集中,便于维护、管理和执行,但计算效率是瓶颈。也就是说单机模式性能受限,也存在单点失效的问题。

数据并行(也叫作数据分布式)模式指的是,对数据进行拆分,利用多台计算机并行执行多个相同任务,通过在相同的时间内完成多个相同任务,从而缩短所有任务的总体执行时间,但对提升单个任务的执行性能及降低时延无效。

任务并行(也叫作任务分布式)模式指的是,单任务按照执行流程,拆分成多个子任务,多个子任务分别并行执行,只要一个复杂任务中的任意子任务的执行时间变短了,那么这个业务的整体执行时间也就变短了。该模式在提高性能、扩展性、可维护性等的同时,也带来了设计上的复杂性问题,比如复杂任务的拆分。

数据并行和任务并行的选择

任务执行时间短,数据规模大、类型相同且无依赖,则可采用数据并行;如果任务复杂、执行时间长,且任务可拆分为多个子任务,则考虑任务并行。