写点什么

白话解析分布式系统,小白也能看懂

  • 2019-02-27
  • 本文字数:2678 字

    阅读完需:约 9 分钟

白话解析分布式系统,小白也能看懂

西方诗歌有云,无人是孤岛,你我心相系。今天,这句话同样适用于计算机。我们身边的服务器,个人电脑以及数据存储一直都在彼此通信。其实,我们每天使用的(和在开发的)应用和服务也都是构成完整系统的计算元素,彼此进行着交互,尽管很多时候我们感知不到。


对这些系统及其运行原理的研究属于分布式计算的一部分,而分布式计算又是分布式系统的核心所在。一方面,我们可以把分布式系统看作计算机科学的扩展或继续,它通常涉及问题解决、任务离散分解以及数据的处理、存储等。


但另一方面,分布式系统又完全不像计算机科学,因为分布式计算几乎不考虑计算机本身的运行方式。在处理单机问题时,我们可能觉得一切都很简单,但是如果涉及到多台计算机,这将会变成一个非常棘手的问题。

万物始于一

为了更好的理解分布式系统,我们最好换一个角度,一个完全相反的视角,那就是看一下哪些不是分布式系统。事先声明,即便是非分布式系统,其概念也存在很多争论。理论上,我们可以用很多方式来定义一个分布式系统的否集,因为分布式系统的定义很大程度上依赖于它是的组成元素。


对于非分布式系统,我们首先会想到的是单一系统,一个完全不与其他系统通讯并且只依靠自己的系统。



什么不是分布式系统(图译:不与其它系统交互的单一处理器或计算机就是非分布式系统)



我们电脑上的一个独立运行的处理器就是一个单一系统。如果一个处理器并不与其他处理器通信,那自然也就不能把它归到其它系统中。我们也可以把这个概念放大到计算机范畴,如果把它断网,则也可以认为是单一系统。但是也有研究做了相反的验证(论文:你的电脑早已经是分布式系统了,为什么你的系统还不是?)


分布式这个词,意思是分散、离散,将某些东西分散到某一个空间里。如果我们只是考虑字面意思,那么我们可以很自然的将只依靠自己的单一系统归为非分布式系统,毕竟只有一台机器在工作,我们不能将这个单系统再细分。


那在这种情形下,究竟什么才算是分布式系统呢?当然,如果我们考虑到现实中电脑的交互方式,我们就会意识到,大多数的电脑其实都属于分布式系统的范畴。电脑只有在很少的情形下单独运行,我们几乎总是在用自己的电脑来访问外部的程序或服务。


如果你玩过多玩家在线游戏,预定过一张机票,转发了一个猫咪的动画,或者观看了一部 Netflix 上的节目,又或者在 Amazon 上买了一件连体衣,所有的这一切其实都是通过分布式系统完成的。


其实,你几乎每天都在操作一个最大的分布式系统,那就是互联网。而分布式系统却不一定很大。实际上,大型化根本就算不上分布式的本质特征。



分布式系统定义(图译:分布式系统是指由既能同其他交互又能自主运行的个体所组成的系统)


某种程度上,分布式系统只不过是相互交流的多个个体,这些个体同时又在执行自己的一些操作。这样的系统可以简单如你房子里智能传感器或无线接口,或是一个能连接你笔记本电脑的无线键盘或鼠标。


只要系统里的处理器具有自主性,可以执行自己的功能操作,然后又可以同系统中其它的处理器交互,那我们就可以说这个系统是分布式的。

相互支持的节点

到这里,相信大家已经对分布式系统比较熟悉了。让我们更进一步,来看一下它的主要组成,也就是系统里的个体们。


你可能已经留意到,我使用了电脑,处理器甚至是机器来代指分布式系统的个体。具体用什么术语来描述这个分布式系统还要取决于系统本身。如果系统是一大堆分布式服务器,那么这个个体就是服务器,如果这个系统是指互相交流的处理器,那个体们就是处理器了。


为了避免术语使用上出入过大,我们需要采用一些更宽泛的专业名字。我们可以将分布式系统里的单独个体通称为节点。



分布式系统中节点的定义


(图译:分布式系统中的单个个体成为节点)


如果你觉得节点似曾相识,并让你想起了图论,那你的直觉还是挺厉害的,这两者之间确实是有联系的。如果我们把计算机网络当成分布式系统(他们其实也是),那么我们就可以把网络里不同节点的连接看成一个图。


我们知道分布式系统和其规模并没有直接联系,而不同规模的系统中的节点本质上也不相同。节点既可以是一个硬件设施(传感器),也可以是一款软件(客户端或服务端)。节点本身也不需要在同一个地方,因此系统是分布式的,他们可以分布在相距很远的地方。

节点新视角

尽管分布式系统的节点同图论中的节点非常相似,但分布式系统的节点还要相对麻烦一些,在处理非分布式系统的单一系统时,我们也需要对节点做一些假设。面对分布式计算,几乎我们能遇到的所有的障碍最后都归结到了一点:节点间的通讯。



节点中的操作 (图译:分布式系统中,节点里的操作很快,但节点间的通讯很慢)


分布式系统中的节点具有自治的特点,他们可以运行自己的操作而不需要依赖外部环境。换句话说,分布式系统中的某个节点可以独立运行,而不需要其他节点。节点可以非常快速地运行自己的任务。


节点里的操作很快,但是节点间的通讯却很慢


我们都知道,系统里的节点可以放置到不同地点,他们依靠系统以及网络来实现相互间的通讯,当然这也是一个完全不同的话题,我们不在这里展开。我们要求节点里的操作必须快速,但是我们对节点间的通讯却不作这样的要求。实际上,这种通讯通常非常缓慢,而且也不可靠,这也是分布式计算中最大的问题。



节点里的操作总是被顺序执行


节点里的任务不仅要求快速,而且要求顺序执行。我们可能一开始并没有想太多,毕竟事情总是有先后顺序的,但在分布式系统中情形就不一定了。


尽管节点内的操作需要顺序执行,但是节点接入到系统的那一刻,事情就变得复杂了。一旦我们把一个单节点接入分布式系统,所有节点的操作就有可能被乱序执行。


部分原因是系统中的每个节点都是根据自己的时钟进行操作的。



节点操作依赖其内部时钟


如果我们考虑分布式系统里的是不同的节点:传感器、处理器、服务端或者数据库,那么结果会很清楚。但是,我们也可以猜猜这在分布式系统中是如何成为潜在问题的?这其实是分布式计算里的另一大问题,我会在本系列的后续文章中予以介绍。


我们一旦把某个节点放入分布式系统,那么它可能就没那么令人喜爱了。但这何尝不是学习的乐趣呢,我们需要改变自己看待系统的方式,重新认识系统是如何作为整体来运行的,以及思考不同节点如何共同协作来快速完成任务,这的确是一个学习新知识的好方式。

更多资源

关于分布式系统,我们有太多的东西要学习,下面是一些入门补充资料:


1. 分布式系统简介, Maarten van Steen & AndrewS . Tanenbaum


2. 分布式系统高手进阶, MedianRawashdeh


3. 分布式系统入门, Professor Frank Eliassen


查看英文原文https://medium.com/baseds/many-nodes-one-distributed-system-9921f85205c4


2019-02-27 08:307458

评论

发布
暂无评论
发现更多内容

抖音春晚活动背后的 Service Mesh 流量治理技术

火山引擎开发者社区

微服务 后端 后端技术

CorelDRAW2022无限使用安装下载

茶色酒

cdr2022

如何调节鼠标的灵敏度?

InfoQ IT百科

前端食堂技术周刊第 34 期:Node.js v18 、Nuxt 3 RC1、Parcel v2.5.0、计算机程序的构造和解释、Linux 命令行世界生存指南

童欧巴

JavaScript 前端 技术周刊

【网络安全】8个网络安全名词解释看这里!

行云管家

网络安全 防火墙 数据安全 堡垒机

云小课|教你如何使用RDS for PostgreSQL插件

华为云开发者联盟

postgresql 插件 开源数据库 RDS for PostgreSQL

库存管理与资产管理的区别是什么?

低代码小观

低代码 企业管理 资产管理 资产安全 WMS仓库管理

不用加盟费也能加盟自助洗车吗?

共享电单车厂家

自助洗车加盟 自助洗车加盟费 车白兔自助洗车 加盟自助洗车多少钱

电脑分区C盘格式化会怎样?

InfoQ IT百科

Java中使用Spring-security(一)

爱好编程进阶

Java 面试 后端开发

一文深入Java浅拷贝和深拷贝

芝士味的椒盐

Java 大数据 Java 开发 深拷贝 浅拷贝

Windows操作系统升级后会出现与CPU不兼容情况吗?

InfoQ IT百科

24小时自助洗车机价格一般多少

共享电单车厂家

自助洗车机价格 自助洗车加盟 自助洗车设备多少钱 车白兔自助洗车机

聊一聊龙蜥硬件兼容性 SIG 那些事儿 | 龙蜥 SIG

OpenAnolis小助手

开源 sig 硬件兼容 龙蜥操作系统

通过 SingleFlight 模式学习 Go 并发编程

万俊峰Kevin

微服务 并发编程 web开发 go-zero Go 语言

所以,我们依然要读书!

博文视点Broadview

自动洗车加盟选择哪家比较好?

共享电单车厂家

自助洗车机价格 自助洗车加盟 自助洗车机厂家 车白兔自助洗车

Camtasia2022汉化版本屏幕录像软件

茶色酒

Camtasia2022

跟我读CVPR 2022论文:基于场景文字知识挖掘的细粒度图像识别算法

华为云开发者联盟

图像识别 推理 视觉 文字检测 语义信息

电脑内存越大处理速度就越快吗?

InfoQ IT百科

OneFlow学习笔记:从Python到C++调用过程分析

OneFlow

c++ Python Relu 调用过程分析

自助洗车机利润怎么样?加盟靠谱否

共享电单车厂家

自助洗车加盟 自助洗车机利润 车白兔自助洗车

想代理加盟自助洗车要怎么做?

共享电单车厂家

自助洗车机价格 自助洗车加盟 车白兔自助洗车机 自助洗车代理

Java中return和finally到底哪个先执行

爱好编程进阶

Java 面试 后端开发

Java并发关键字-volatile

爱好编程进阶

Java 面试 后端开发

纯 JS 实现 WebRTC 视频通话

杨成功

音视频 WebRTC

焱融 YRCloudFile 跨云多源数据管理,直击自动驾驶 “割裂式存储”痛点

焱融科技

自动驾驶 云计算 分布式 高性能 文件存储

java程序员的AI之路-大数据篇 hadoop安装

爱好编程进阶

Java 面试 后端开发

破浪人丨国内首位 Envoy Maintainer!王佰平独家讲述四年开源之路

网易数帆

开源 云原生 Service Mesh 服务网格 envoy

Kubernetes家族容器小管家Pod在线答疑?

囧么肥事

Kubernetes 云原生 k8s #Kubernetes# 容器服务

【等保】二级等保常见问题解答汇总

行云管家

网络安全 等保 等保2.0 二级等保

白话解析分布式系统,小白也能看懂_架构_Vaidehi Joshi_InfoQ精选文章