What's Distributed System

QA

  • “分布式系统”等于 SOA、ESB、微服务这些东西吗?
  • “分布式系统”是各种中间件吗?
  • 中间件起到什么作用?
  • 单程序+单数据库,是一个分布式系统吗?

核心点

  • 分而治之
  • 高内聚,低耦合
  • 中间件是一个标准化的结果
  • “分布式” 这个词只是意味着形态上是散列状的,而“一分为二”和“一分为 N”本质上并没有区别

中间件起到什么作用?

中间件起到的是标准化的作用。中间件只是承载这些标准化想法的介质、工具,可以起到引导和约束的效果,以此起到大大降低系统复杂度和协作成本的作用。

中间件都具备的一个价值:为了在软件系统的迭代过程中,避免将精力过多地花费在某个子功能下众多差异不大的选项中。

  • MQ 框架标准化了不同应用程序间非实时异步通信的方式。
  • RPC 框架标准化了不同应用程序间实时通讯的方式。
  • DAL(Data Access Layer,数据访问层)框架标准化了应用程序和数据库之间通讯的方式。

所以,虽然分布式系统中会运用中间件,但分布式系统却不仅仅停留在用了什么中间件上。你需要清楚每一类中间件背后是对什么进行了标准化,它的目的是什么,带来了哪些副作用,等等。只有如此,你才能真正识别不同技术框架之间的区别,找到真正适合当前系统的技术框架。

软件的本质

软件的本质是一套代码,而代码只是一段文字,除了提供文字所表述的信息之外,本身无法“动”起来。

但是,想让它“动”起来,使其能够完成一件我们指定的事情,前提是需要一个宿主来给予它生命。这个宿主就是计算机,它可以让代码变成一连串可执行的“动作”,然后通过数据这个“燃料”的触发,“动”起来。

这个持续的活动过程,又被描述为一个运行中的“进程”。

分布式系统的本质

维基百科:分布式系统是一种其组件位于不同的联网计算机上的系统,然后通过互相传递消息来进行通信和协调。为了达到共同的目标,这些组件会相互作用。

用一句话来总结,涉及多个进程协作才能提供一个完整功能的系统就是“分布式系统”。

关键两点:分治和冗余

分治

过程分解:分解 -> 治理 -> 归并

这么做的好处是:问题越小越容易被解决,并且,只要解决了所有子问题,父问题就都可以被解决了。

但是,这么做的时候,需要满足一个最重要的条件:不同分支上的子问题,不能相互依赖,需要各自独立。因为一旦包含了依赖关系,子问题和父问题之间就失去了可以被“归并”的意义。

在软件开发领域,我们把这个概念称为“耦合度”和“内聚度”,这两个度量概念非常重要。

耦合度,指的是软件模块之间相互依赖的程度。比如,每次调用方法 A 之后都需要同步调用方法 B,那么此时方法 A 和 B 间的耦合度是高的。
内聚度,指的是模块内的元素具有的共同点的相似程度。比如,一个类中的多个方法有很多的共同之处,都是做支付相关的处理,那么这个类的内聚度是高的。
内聚度通常与耦合度形成对比。低耦合通常与高内聚相关,反之亦然。

Refer

https://www.infoq.cn/article/pdCpOo*AcZ0xuI3LP45a
https://www.infoq.cn/article/lw_Ax10OXkL2zcIDRkJ1