浅识分布式系统

文章目录


一、为什么要使用分布式

分布式系统并非灵丹妙药,解决问题的关键还是看你对问题本身的了解。通常我们需要使用分布式的常见理由是:

  1. 为了性能扩展——系统负载高,单台机器无法承载,希望通过使用多台机器来提高系统的负载能力。
  2. 为了增强可靠性——软件不是完美的,网络不是完美的,甚至机器本身也不可能是完美的,随时可能会出错,为了避免故障,需要将业务分散开保留一定的冗余度。

在以提供 Service 为主的服务端软件开发过程中常常遇到这些问题。


二、分布式系统的本质

所谓分布式,无非就是”将一个系统拆分成多个子系统并散布到不同设备“的过程而已。

本质上而言,实现一个分布式系统,最核心的部分无非有两点:

  1. 如何拆分——可以有很多方式,核心依据一是业务需求,二是成本限制。这是实践中构建分布式系统时最主要的设计依据。
  2. 如何连接——光把系统拆开成 Process 还不够,关键是拆开后的 Process 之间还要能通信,因此涉及通信协议设计的问题,需要考虑的因素很多,好消息是这部分其实成熟方案很多。

三、分布式的基础要点

分布式主要有如下要点:

  1. Process(进程):在分布式系统中,进程是基本单元。

  2. 通信协议: Process 间需要相互配合才能完成工作,因此通信协议是最基本要解决的问题。这部分其实挺复杂,牵涉面光,不过核心还是抓住两方面,一是存在哪些需求,二是各个协议如何满足这些需求。

  3. 命名法: 两个 Process 要通信,必须相互知道对方的名字,名字可以是数字,也可以是结构化的字符串。例如众所周知域名系统就是一种命名方案,但是方案还有很多,各有特点。

  4. 协作: 上面都在谈 Process 之间的通信,可是为什么要通信?因为要协作。协作是个复杂的主题,其中最基本最基本的一个问题就是同步问题。

上面几点是最基础的知识。了解了这些其实就算入门了。可是如何进阶呢?那么必然要开始学习下面的问题:

  1. 一致性: 数据存储时,最基本的问题。其实也是实际设计系统时常常需要反复考虑的问题。
  2. 容错: 冗余是容错的基础,但并不是全部,分布式本身为实现容错提供了一些便利,这也是实际设计系统时常常需要考虑的问题。

参考资料:
https://www.cnblogs.com/yangzhenlong/p/5121065.html

上一篇:sql server请求状态


下一篇:并发编程 — 进程