【Distributed System】分布式系统

Posted by 西维蜀黍 on 2019-07-11, Last Modified on 2022-12-10

背景

集中式系统(Central Systems)

在学习分布式之前,先了解一下与之相对应的集中式系统(Central Systems)是什么样的。

**集中式系统(Central Systems)**用一句话概括就是:一个主机带多个终端。终端没有数据处理能力,仅负责数据的录入和输出。而运算、存储等全部在主机上进行。现在的银行系统,大部分都是这种集中式的系统,此外,在大型企业、科研单位、军队、政府等也有分布。集中式系统,主要流行于上个世纪。

集中式系统的最大的特点就是部署结构非常简单,底层一般采用从IBM、HP等厂商购买到的昂贵的大型主机。因此无需考虑如何对服务进行多节点的部署,也就不用考虑各节点之间的分布式协作问题。但是,由于采用单机部署。很可能带来系统大而复杂、难于维护、发生单点故障(单个点发生故障的时候会波及到整个系统或者网络,从而导致整个系统或者网络的瘫痪)、扩展性差等问题。

分布式系统(Distributed Systems)

根据《Distributed systems- principles and paradigms》,分布式系统是由若干独立的计算机组成的集合,这些计算机对于用户来说只是一个单独的计算机

含义:

  • 一个分布式系统由多个独立的计算机组成,这些独立的计算机之间需要相互协作,以组成这个具有完整功能的分布式系统
  • 在这些独立的计算机中,他们可能是一个具备高性能的大型计算机(mainframe computer),也可以只是传感器网络(sensor networks)中的一个小节点
  • 对于用户而言,他们只会感受到他们只在和一个单一独立的系统进行交互

为了将不同规格或形态(heterogeneous)的计算机连接在一起,并构成一个单一的系统,我们需要增加一层软件中间件(software middleware),这层中间件位于更高层的用户应用层之下,又位于这些计算机的操作系统(这些操作系统提供了中间件进行的网络通讯的基础)之上。如下图所示:

在上图的例子中,Application B同时运行于Computer 2和Computer 3,

分布式系统的类型

分布式计算系统

分布式信息系统

普适系统(Pervasive Systems)

传感器网络(Sensor Networks)

典型的一个传感器网络又几千或者几万的小节点组成,每一个小节点都是一个传感器。绝大部分传感器网络使用无线通信且每个节点经常是电池供电,即无线传感器网络(Wireless Sensor Networks),这意味着节点拥有极其有限的计算能力和通讯能力。

传感器网络很像一个分布式的数据库。因为很多传感器网络被用于通过向传感器网络中的节点发送查询以提取特定信息,最终计算一个特定数据。比如,当前高速公路X上向北方向的车流量为多少,这时,传感器网络中部分节点会得到请求查询(类似于传统数据库那样),此后,这些节点返回的数据会被聚合到一个处理中心并计算出一个结果。

分布式系统的属性(Property)

Liveness - “Good things” happen eventually

In concurrent computing, liveness refers to a set of properties of concurrent systems, that require a system to make progress despite the fact that its concurrently executing components (“processes”) may have to “take turns” in critical sections, parts of the program that cannot be simultaneously run by multiple processes. Liveness guarantees are important properties in operating systems and distributed systems.

Example

More generally, a liveness property states that “something good will eventually occur”, contrasting a safety property which states that “something bad does not occur”. If a safety property is violated there is always a finite execution that shows the violation (the “bad” event occurring), but a liveness property cannot be violated in a finite execution of a distributed system because the “good” event might still occur at some later time.

  • Starvation freedom: process 1 can eventually enter a critical section as long as process 2 terminates
  • Eventual consistency: if a value in an application doesn’t change, two servers will eventually agree on its value

Safety - “Bad things” don’t happen

In distributed computing, safety properties informally require that “something bad will never happen” in a distributed system or distributed algorithm. In a database system, a promise to never return data with null fields is an example of a safety guarantee. Another example is that of deadlock freedom—it should never occur that all processes or a distributed system are unable to continue because they are waiting for action from another process.

Examples

  • Mutual exclusion: two processes can’t be in a critical section at the same time

  • Bounded overtaking: if process 1 wants to enter a critical section, process 2 can enter at most once before process 1

常用的分布式方案

分布式应用和服务

将应用和服务进行分层和分割,然后将应用和服务模块进行分布式部署。这样做不仅可以提高并发访问能力、减少数据库连接和资源消耗,还能使不同应用复用共同的服务,使业务易于扩展。

  • 分布式的服务(比如Web服务、数据库、缓存等)

分布式静态资源

对网站的静态资源如JS、CSS、图片等资源进行分布式部署可以减轻应用服务器的负载压力,提高访问速度。

分布式数据和存储

大型网站常常需要处理海量数据,单台计算机往往无法提供足够的内存空间,可以对这些数据进行分布式存储。

分布式计算

随着计算技术的发展,有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成。分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。这样可以节约整体计算时间,大大提高计算效率。

  • 分布式的计算能力(Hadoop、Spark、MapReduce等)

分布式系统的优缺点

单体架构

优点

  • 易于开发:开发的方式简单,方便运行也容易调试
  • 易于测试
  • 易于部署
  • 简单

缺点

  • 项目过于臃肿,维护成本大,出现bug难定位。
  • 资源无法隔离:共享一个数据库,或者一块内存。
  • 如果一个功能模块突然访问量过大,可能影响整个系统的性能。
  • 无法灵活扩展:单体系统也可以集群部署,但是不够灵活,我明明只是订单系统遇到了瓶颈,
  • 交付周期长:所有功能得一起上线,一起构建,一起部署。
  • 任何一个环节出错,都可能影响交付。

那分布式的优点自然就和单体架构就对立了~

分布式架构

再谈谈分布式架构的缺点:

  • 性能,分布式系统是跨进程,跨网络的,性能会受网络延迟和带宽的影响。
  • 可靠性:由于高度依赖网络状况,任何一次远程调用都可以失败。随着服务的增多,还会出现更多的潜在故障点。
  • 异步:引入各种中间件,异步通信大大增加了功能实现的复杂度。
  • 数据一致性:分布式系统必然会有分布式事务的出现,这时对数据的一致性,需要在C(一致性)A(可用性)P(分区容错性)中做出选择。
  • 运维成本:一个系统拆成了多个服务,每个服务都得配置,部署,监控,日志处理。得到的同时也意味着失去,权衡与取舍 始终是架构的魅力
  • 稳定性不足,把所有Web服务器、数据库都运行在一台PC上。当这个PC崩时,整个系统就崩溃了,同时也没有任何备份,简直灭顶之灾。
  • 可扩展性不足,任何的主机(哪怕是小型机、超级计算机)都会有性能的极限。而分布式系统可以通过不断扩张主机的数量以实现横向水平性能的扩展。

Reference