分布式系统是什么

简介: 分布式系统是什么

在技术领域中,分布式系统越来越成为绕不过去的一个名词。原因在于,这个时代的数据尺度与单机存储、处理能力的不匹配。于是有两条路子:机器大型化和机器互联。前者成本高昂且不灵活,于是后者越来越受青睐。根据代价守恒定律,代价不会凭空消失,硬件成本降下来了,软件设计成本便会提升。而分布式系统理论,则是帮我们降低这个软件成本的钥匙。

是什么

分布式系统奠基者 Leslie Lamport [1] 在其最重要的论文之一 ”Time, Clocks, and the Ordering of Events in a Distributed System“ [2] 中提到:

A system is distributed if the message transmission delay is not negligible compared to the time between events in a single process.

Lamport 用类似相对论的思想来阐释这个问题。我们考虑两个时间尺度:进程消息传递延迟和进程内事件间隔,如果前者相对后者不可忽略,则这组进程就是一个分布式系统。

理解这个定义,需要理解几个重要的概念(形式化的定义总是这样,摊手):进程(process)、消息(message)和事件(event)。为了避免套娃,这里不做过多展开,仅给出一个形象的理解:进程就是一个负责干活的劳工,其干的活可以分解为多个步骤,每个步骤就是一个事件,消息便是劳工交流的方式。

这也印证了维基百科中 distributed computing [3](分布式系统又称分布式计算)给的定义:

  1. There are several autonomous computational entities ( computers or nodes ), each of which has its own local memory.
  2. The entities communicate with each other by message passing.

这里面涉及到了计算机系统中最重的几种资源:计算(computational),存储(memory),以及沟通他们的网络(network)。

总结下,我们可以从另一个角度来对分布式系统进行描述:

对外,分布式系统表现为一个整体,基于总体的存储和计算能力,提供特定功能。

对内,分布式系统表现为一组个体,基于网络消息进行通信,分工合作。

而分布式系统的设计目标是,最大化整体资源利用率的同时,处理局部错误、保持对外可用性。

作者:青藤木鸟 https://www.qtmuniao.com/2021/10/10/what-is-distributed-system, 转载请注明出处

有什么特点

在构建分布式系统时,在逻辑上要注意以下这些方面:

  1. 可扩展性:可扩展性是对分布式系统最本质的要求,即系统设计允许我们只通过增加机器来应对不断增长的外部需求。
  2. 容错性\可用性:这是可扩展性所带来的一个副作用,即在系统规模不断变大之后,单个机器故障便会成为常态。系统需要自动处理这些故障,对外保持可用性。
  3. 并发性:由于没有全局时钟进行协调,分散的机器天然处在“平行宇宙”中。系统需要引导这些并发变为协作,以拆解并执行集群任务。
  4. 异构性(对内):系统需要处理进群内部不同硬件、不同操作系统、不同中间件的差异性,并且能够容纳新的异构组件加入系统。
  5. 透明性(对外):对外屏蔽系统复杂性,提供逻辑上的单一性。

有几种类型

在组织分布式系统时,在物理上可以有以下几种类型:

  1. 主从架构(master-workers):有一个负责指挥的机器,其他机器负责干活,如 Hadoop。好处是设计和实现相对容易,坏处是单点瓶颈和故障。
  2. 点对点架构(peer-to-peer):所有机器逻辑等价。如亚马逊 Dynamo,好处是没有单点故障,坏处是机器协调不好做、一致性也不好保证。不过,如果系统是无状态的,则这种架构很合适。
  3. 多层架构(multi-tier):这是一种复合架构,实际中也最常用,比如近年来常说存储计算分离。每一层可以根据不同特点(IO 密集型、计算密集型)进行设计,甚至可以复用现有组件(云原生)。

有哪些优劣

再次明确,分布式系统是由于单机能力不匹配数据尺度的一种无奈之举。因此,在做系统设计时,优先考虑单机系统。毕竟,分布式系统的复杂度是指数上升的。

现在来归纳下分布系统的优缺点。

优点

高可用、高吞吐、高可扩展性

  1. 无限扩展:只要设计的好,可以通过线性的增加机器资源来应对不断增长的需求。
  2. 低延迟:多地部署,将用户请求按地理路由到最近机房处理。
  3. 高可用容错:一部分机器坏掉,仍可以正常对外提供服务。

缺点

最大的问题是复杂性。

  1. 数据的一致性。考虑到大量的机器故障:宕机、重启、关机,数据可能丢失、陈旧、出错,如何让系统容纳这些问题,对外保证数据的正确性,需要相当复杂的设计。
  2. 网络和通信故障。网络的不可靠,消息可能丢失、早到、迟到、Hang 住,这给机器间的协调带来了极大的复杂度。像 TCP 等网络基础协议,能解决部分问题,但更多的需要系统层面自己处理。更不用说,开放式网络上可能存在的消息伪造。
  3. 管理复杂度。机器数量到达一定数量级时,如何对他们进行有效监控、收集日志、负载均衡,都是很大挑战。
  4. 延迟。网络通信延迟要比机器内通信高出几个数量级,而组件越多、网络跳数越多,延迟便会更高,这些最终都会作用于系统对外服务质量上。

参考

  1. 维基百科 Leslie Lamport:https://en.wikipedia.org/wiki/Leslie_Lamport
  2. Leslie Lamport Time, Clocks, and the Ordering of Events in a Distributed System https://lamport.azurewebsites.net/pubs/time-clocks.pdf
  3. 维基百科,分布式计算:https://en.wikipedia.org/wiki/Distributed_computing
  4. confluent 分布式系统完全指南:https://www.confluent.io/learn/distributed-systems/
  5. splunk 什么是分布式系统:https://www.splunk.com/en_us/data-insider/what-are-distributed-systems.html
相关文章
|
存储 编解码 缓存
视频平台技术成本控制的量化方法
在线视频平台为用户提供服务时,面临的一个严重的挑战是,如何保证在为用户提供流畅 且稳定播放服务的前提下,尽量降低整体运营成本。本篇文章将围绕上述问题,重点讨论技术实践中的成本控制手段。
视频平台技术成本控制的量化方法
|
12月前
|
前端开发 JavaScript 测试技术
前端工程化:构建高效、可维护的现代Web应用
【10月更文挑战第5天】前端工程化:构建高效、可维护的现代Web应用
|
12月前
|
存储 Docker 容器
docker中挂载数据卷到容器
【10月更文挑战第13天】
400 2
|
Java Spring API
Spring框架与GraphQL的史诗级碰撞:颠覆传统,重塑API开发的未来传奇!
【8月更文挑战第31天】《Spring框架与GraphQL:构建现代API》介绍了如何结合Spring框架与GraphQL构建高效、灵活的API。首先通过引入`spring-boot-starter-data-graphql`等依赖支持GraphQL,然后定义查询和类型,利用`@GraphQLQuery`等注解实现具体功能。Spring的依赖注入和事务管理进一步增强了GraphQL服务的能力。示例展示了从查询到突变的具体实现,证明了Spring与GraphQL结合的强大潜力,适合现代API设计与开发。
268 0
|
网络安全 C#
FTP 被动模式配置
FTP 被动模式配置
187 0
FTP 被动模式配置
|
搜索推荐 JavaScript Java
基于SpringBoot+Vue+uniapp的个性化美食推荐系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的个性化美食推荐系统的详细设计和实现(源码+lw+部署文档+讲解等)
371 1
|
Java 网络安全
springboot集成feign
springboot集成feign:如果觉得好用,不要忘记点赞关注加收藏哟!!!绝对干货
604 0
|
SQL 存储 监控
基于PHP的英语四六级在线模拟考试平台(论文+源码)_kaic
基于PHP的英语四六级在线模拟考试平台(论文+源码)_kaic
|
数据采集 运维 监控
被报警大量骚扰?来看看治理方法论
本文记录了作者组内监控治理过程和治理心得。