分布式系统介绍

淡淡的烟草味﹌ 2022-06-10 14:37 352阅读 0赞

首先在这里帮之前的同事大牛宣传他的博客文章。

经常和一些业内的朋友讨论分布式系统,发现每个人对分布式系统的理解都不太一样,这里说一下我个人对分布式系统的一些理解和看法。

百度百科上,对于分布式系统是这样描述的:

分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统。透明性是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。在分布式数据库系统中,用户感觉不到数据是分布的,即用户不须知道关系是否分割、有无副本、数据存于哪个站点以及事务在哪个站点上执行等。

是不是感觉说了等于没说,看了还是不知道什么是分布式系统?

和分布式同时提到最多的另一个概念就是集群,那分布式和集群到底有什么区别呢?

分布式和集群的区别

开始划重点:

分布式指的是同一个业务功能拆分成不同的子功能,并且这些子功能被分配到不同的子系统上执行。

集群指的是把同一个业务功能分散到不用的服务器上执行,但是每台服务器执行的功能是相同的。

举个栗子:

作为一个程序员你天天加班,哪有时间做家务,家里太乱怎么办?请个阿姨来打扫卫生、洗衣服、做饭;好吧,这就是一个集中式系统。

天天加班的你升职加薪了,买了150平的大房子,家里大了,一个阿姨每天打算的时间明显变长,你没有这么多时间盯着阿姨打扫了,怎么办?那就请两个阿姨来打扫卫生、洗衣服、做饭,但是每个阿姨做的是同样的事;好吧,这就是一个集群。

天天加班的你出任CTO,走上人生巅峰了,又换了500平的豪宅,两个阿姨也需要很长的时间来做家务,你空余的时间更少了,怎么办?那就请个阿姨专门打扫卫生,请个阿姨专门洗衣服,请个阿姨专门负责做饭,这样打扫卫生、洗衣服、做饭可以并行,时间节约了;好吧,这就是一个分布式系统。

天天加班的你终于被“马爸爸”认做干儿子了,住上了2000平大大大豪宅,一个阿姨专门打扫卫生,一个阿姨专门洗衣服,一个阿姨专门负责做饭也跟不上节奏了,怎么办?那就只能请N个阿姨专门打扫卫生,N个阿姨专门洗衣服,N个阿姨专门负责做饭;好吧,这是一个分布式集群系统。

如何开始一个分布式系统

前面说了什么是分布式系统,这么高大上的名词,让人一听就觉得“逼格满分”,那怎么开始一个分布式系统呢?也许有人会问,我们目前的项目是一个集中式系统,怎么才能把他变成分布式系统呢?

其实很简单,只需要3步就可以完成,没错,和把大象放进冰箱里一样。

1.把你的整一个系统(不管有多复杂)拆分成若干个功能模块,每个功能模块复杂干一种或几种事。

2.把你拆分的若干个功能模块分别部署到不同的服务器上。

3.确定每个功能模块之间交互的协议。

完成上述3步,一个集中式系统改造成简单分布式系统的工作就完成了,你没看错,就是这么简单!

0_wx_fmt_gif_tp_webp_wxfrom_5_wx_lazy_1

这里有一个误区,分布式系统是不是只能完成并行任务?

答案当然是否定的,很多人经常把分布式系统和分布式计算混淆起来,还是举把大象放进冰箱的栗子吧:

把大象放进冰箱有三个步骤

1.打开冰箱门

2.把大象放进去

3.关上冰箱门

很明显,这三步是不能并行的,但我们同样可以搭建一个分布式系统来实现,将“打开冰箱门”这个功能单独部署到一台服务器,将“把大象放进去”这个功能单独部署到一台服务器,将“关上冰箱门”单独部署到一台服务器,创建一个“操作人”的协议来协调3个功能模块,这样就是一个分布式系统。

当然,我们在构建分布式系统时,还是应该尽可能的往并行任务的方向努力,做到用户的请求能在最短时间能获得响应。

分布式系统的本质

分布式系统的本质就是一个“切分-连接”的过程。

构建一个分布式系统最重要的就是两点核心逻辑。

1.如何切分业务模块?业务模块切分颗粒度需要多大,需要通过实际业务需求、实际项目的复杂度、成本分析等要素来作为设计依据。

2.如何选择通讯协议?通讯协议是分布式系统中一个重要的组件,通讯协议的选择影响到整个分布式系统的性能、可用性、以及维护成本等方面,幸好目前有很多成熟的通讯协议供我们选择,如:hessian,rmi,http等。

为什么我们要使用分布式系统

也许有人会问:为什么我们要使用分布式系统,喝集中式系统相比,增加了工作量,增加了故障节点,增加了维护成本。

我理解分布式系统能给我们提供帮助的地方主要有:

  1. 传统集中式系统只要有任何一个模块的任何一个功能出现问题,就可能导致整个服务不可用。而分布式系统恰恰可以完美解决这个问题,做到某个功能模块不可用,不会影响其他的功能模块提供服务。

还是上面阿姨的栗子:

在集中式阿姨系统里,某个阿姨今天生病请假,势必影响到打扫卫生、洗衣服、做饭,所有的流程都会停滞。但是在分布式阿姨系统里,打扫卫生的阿姨请假,不会影响到洗衣服和做饭阿姨的工作。

  1. 大部分系统都存在各个功能模块负载不均衡的情况,某些模块并发压抑大,某些模块无人问津,为了解决个别模块的负载压力,横向扩展会造成大量的资源浪费。而分布式系统可以将所有的资源合理的利用,对于压力大的模块提高服务器配置或者资源倾斜,对于压力小的模块进行资源收缩。

又是阿姨的栗子:

在集中式阿姨系统里,今天家里来了客人,做饭的压力突然增大,你只能再请个阿姨来做饭,但是打扫卫生和洗衣服的工作量并没有增加, 所以新请的阿姨的部分工资浪费了。但是在分布式阿姨系统里,你只需要再请一个专门负责做饭的阿姨就行了。

0_wx_fmt_gif_tp_webp_wxfrom_5_wx_lazy_1

其实设计一个分布式系统远远没有上述说的那么简单,还有很多细节的方面需要我们去考虑,如:

  1. 子模块间通讯的安全性保证;
  2. 数据的一致性保证;
  3. 系统整体的扩展性;
  4. 子模块间的事务如何保证;

这些我会在后续为大家一一介绍,请关注我的公众号!

同事的博客地址。

发表评论

表情:
评论列表 (有 0 条评论,352人围观)

还没有评论,来说两句吧...

相关阅读

    相关 介绍一下分布式计算系统ray

    分布式计算系统 Ray 是一个用于进行分布式计算的开源库。它可以帮助用户轻松地在分布式环境中运行并行计算任务。Ray 可以自动处理资源管理、任务调度和状态管理等问题,使用户能够

    相关 分布式系统介绍

    首先在这里帮之前的同事大牛宣传他的博客文章。 经常和一些业内的朋友讨论分布式系统,发现每个人对分布式系统的理解都不太一样,这里说一下我个人对分布式系统的一些理解和看法。 百