AICon日程100%就绪,9折倒计时最后一周 了解详情
写点什么

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

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

评论

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

表格集算表高性能原理——怎样实现纯前端百万行数据秒级响应

葡萄城技术团队

Rewrite sqllogictest framework in rust

Databend

SOA 和微服务有何区别?

江南一点雨

Java 微服务 springboot SOA

简单谈谈Redis中的几种java客户端以及优缺点!

风铃架构日知录

Java redis 程序员 程序人生 客户端

Java Netty框架自建DNS代理服务器教程

小小怪下士

Java 程序员 Netty DNS

前端二面经典vue面试题指南

bb_xiaxia1998

Vue

从零手写react-router

helloworld1024fd

JavaScript

京音平台-一起玩转SCRM之电销系统

京东科技开发者

架构设计 系统 scrm 企业号 1 月 PK 榜 电销

一文了解 Go time 包的时间常用操作

陈明勇

Go golang time

醉三皇成为第12届北京国际网络电影展官方指定用酒品牌

联营汇聚

带你用20张图了解什么是 JVM 运行时数据区

风铃架构日知录

Java 程序员 JVM 码农 内存

《隐私计算白皮书(2022年)》概览

京东科技开发者

技术 安全 隐私保护 白皮书 企业号 1 月 PK 榜

排障定位时间缩短一半, 博睿数据如何赋能青岛住房公积金管理中心

博睿数据

APM AIOPS 智能运维 博睿数据 精选案例

如何使用API Hub 实现一个图片列表

Towify

如何实现发送评论时总数自动加一?

Towify

WWW 是否应该属于 URL?

devpoint

Cookie url SEO www

前端必会手写面试题合集

helloworld1024fd

JavaScript

那些炫酷的CSS文字效果之诗词《兔》

南城FE

CSS css3 前端 动画

从零开始实现一个Promise

helloworld1024fd

JavaScript

阿里云开源大数据平台EMR全面升级 性能最高可提升6倍

阿里云大数据AI技术

大数据 云原生 大数据 开源

社招前端react面试题整理

beifeng1996

React

每日一题之Vue的异步更新实现原理是怎样的?

bb_xiaxia1998

Vue

EMQX+阿里云飞天洛神云网络NLB:MQTT消息亿级并发、千万级吞吐性能达成

EMQ映云科技

阿里云 物联网 IoT mqtt 企业号 1 月 PK 榜

Spring项目中用了这种解耦模式,经理对我刮目相看

JAVA旭阳

Java spring

百度前端经典vue面试题整理

bb_xiaxia1998

Vue

高级前端常考手写面试题合集

helloworld1024fd

JavaScript

年终盘点丨最受开发者欢迎的文章 TOP20

阿里巴巴云原生

阿里云 云原生

Kstry流程编排框架

lykan

软件架构 模块化 流程编排 高并发编程 业务可视化

每日一题之Vue数据劫持原理是什么?

bb_xiaxia1998

Vue

安畅携手阿里云共建Landing Zone方案,助力企业上云无忧

云布道师

阿里云

程序员该如何用“高科技”智能地教狗狗上厕所

风铃架构日知录

人工智能 深度学习 程序人生 后端 系统架构

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