AIGC革命已来,如何在企业场景落地?如何选择模型、怎样应用RAG、需要哪些组织流程配套? 了解详情
写点什么

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

  • 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:307069

评论

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

八月最新首发!这份Dubbo 3.0 分布式实战笔记由阿里巴巴P8亲自撰写真是大厂offer收割机

了不起的程序猿

Java 分布式 dubbo java程序员 java编程

兆骑科创国内外创新创业服务平台,创业大赛,企业落地孵化

兆骑科创凤阁

洞见商业新机,云原生数据库GaussDB让企业决策更科学

华为云开发者联盟

数据库 后端 华为云

如何编写有效的常见问题解答页面?

Geek_da0866

如何区分透明LED显示屏种类及应用领域

Dylan

LED显示屏 led显示屏厂家

泄露了,Alibaba697页的MySQL应用实战与性能调优手册,太强了

冉然学Java

Java MySQL 编程 性能优化 构架

7 天找个 Go 工作,Gopher 要学的条件语句,循环语句 ,第3篇

梦想橡皮擦

Python 爬虫 8月月更

Alibaba最新发布的Spring Boot项目实战文档,Github标星78k

Java面试那些事儿

Java Java 面试 java程序员 Java工程师 spring-boot

Linux C/C++后台开发高级架构师进阶指南-剑指腾讯T9

C++后台开发

后台开发 后端开发 linux开发 Linux服务器开发 C/C++开发

2022上半年PMP考试通过率得多低,才能换来一次免费补考机会

索隆

如何开发一款基于 vite+vue3 的在线表格系统(下)

葡萄城技术团队

Vue 前端 vite

种草 Vue3 中几个好玩的插件和配置

江南一点雨

Java Vue

满足你对 Api 的所有幻想

Liam

Postman API API接口管理 开放api API接口工具

PMP考试经验分享

索隆

项目管理 pmp 考试经验

开源一夏 | 在STM32L051上使用RT-Thread (一、无线温湿度传感器 之 新建项目)

矜辰所致

开源 RT-Thread 8月月更 STM32L051

渲染与云渲染——渲染行业的新趋势

Finovy Cloud

云渲染 GPU算力

HUAWEI内网最新发布了一份452页网络协议手册,GitHb百万收藏

小柴说Java

Java 网络协议 java程序员 TCP/IP Java工程师

兆骑科创创新创业大赛,双创活动,赛事承办,三招三引

兆骑科创凤阁

软件测试100天上岸1-测试就是找茬游戏

和牛

测试 8月月更

GitHub破百万访问的阿里神作:并发实现原理JDK源码笔记

冉然学Java

Java 编程 jdk 源码刨析 JDK 1.5

微信官方kbone,Web端同构的福音

Geek_99967b

小程序

秒验丨Android客户端集成指南

MobTech袤博科技

android Android Studio Gradle

「望繁信科技」完成过亿元A+轮融资,全面加速流程智能产品建设

望繁信科技

从GitHub火到了InfoQ!共计1658页的《Java岗面试核心MCA版》,拿走不谢

收到请回复

Java 程序员 金九银十 Java面试八股文 常见面试题

谁在构建超云?

Kent Yao

超云

参与openEuler社区不到1年,我成为了Maintainer……

openEuler

开源 成长 openEuler 开源社区 开发者说

画一手好的架构图是码农进阶的开始

阿里技术

经验分享 构架

EMAS Serverless到底有多便利?

hum建应用专家

云计算 Serverless emas

【Java】:程序流程的控制

翼同学

Java 学习 编程语言 分享 8月月更

XSKY星辰天合与观测云完成产品兼容性互认证 构建全业务链路的可观测性

观测云

对话张星亮,洞察本质,SaaS首先是一种商业模式

B Impact

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