浅谈分布式系统及其中间件

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 需要说明的是,截止目前,我对分布式系统的了解还很表面,所以以下也只是我了解到的概念和我的主观推测,如有错误,还请各位大佬指出哈~
本文首发于稀土掘金。该平台的作者 逐光而行 也是本人。

学校教的或书本上写的,仅仅是一个领域的基本概念和皮毛,要想真正领悟,得多实践(多做lab敲代码)、多思考。否则这些概念不过是废纸一张、雁过无痕而已。有机会一定去做一做6.824。

谈及分布式系统,人们第一个想到的可能更多是计算机网络,但实际上,它和操作系统也紧密相关。
因为它也是有层次的,底层靠操作系统支撑,而上层则依赖于计算机网络的协议等得以组织和发展。

需要说明的是,截止目前,我对分布式系统的了解还很表面,所以以下也只是我了解到的概念和我的主观推测,如有错误,还请各位大佬指出哈~

————写在最前面。

背景

多处理机系统分为三种:

  • 共享存储器,称为“共享存储器多处理机”(multiprocessor,简称多处理机)
  • 共享CPU,简称为“多计算机”
  • 所有计算机通过广域网连接,称为“分布式系统”。

本文重点讨论分布式系统。

通过举例理解分布式系统及其特性

  • 设想你和你来自世界各地的小伙伴想要同步完成一个工作,你们各自的主机就是一个结节点。

所以,每个节点都是一台完整的计算机,且物理距离不限,只要能通过网络连接上就行。

  • 大家都想要通过自己的计算机运行某一套系统,但不同的计算机是不一样的。比如你用Windows11,你的小伙伴用Ubuntu。因此结点本身可以运行不同的操作系统,也有自己的文件系统。

那如何解决冲突问题,使得整体的系统看上去是一致的呢?

这就需要在计算机本机的操作系统之上提供一层抽象,称为“中间件”。

分布式系统展示给用户看的是一个统一的接口和标准,所以从某种意义上说。中间件像是分布式系统的操作系统

分布式系统的中间件

中间件有四种类型:

  • 基于文档
  • 基于文件系统
  • 基于对象
  • 基于协作

基于文档

web是一个由文档构成的巨大的有向图。

当用户在搜索栏键入URL并按下回车时,发生了如下事情:

  • 浏览器向DNS询问目标URL的ip地址,DNS响应结果
  • 浏览器建立一个到该ip地址端口80的TCP连接
  • 服务器发送网址后缀中的文件
  • 浏览器显示该文件的所有内容,并获取并显示该页面的所有图像
  • 释放TCP连接

类似地,基于文档的中间件也是希望使得分布式系统看起来像一个巨大的、超链接的集合

基于文件系统的中间件

有如下三个方面需要考虑:

传输模式

  • 上传/下载模式

需要访问系统上的文件时,若本地没有该文件就下载下来,若需要修改,改好了再传上去。

  • 远程访问模式

文件就是放在服务器上,是通过在本地远程访问服务器,远程操作文件。

(我说说我的体会和理解,不一定准确哈:
现在的分布式系统应该是两种模式并存的,不同的功能用不同的模式。
对于工作集群的结点来说,结点本身就存放着数据,它本身就是文件系统的一部分,它在本地肯定是存有文件的,那它的访问模式应该就是上传/下载;同时,对于某些结点或者说纯用户,远程访问并操作就已经足以完成任务了。所以具体要看业务需求。

想判断某个功能采用的是哪种模式,我个人认为有个简单的方法:
如果突然断网,还能成功保存的就是先在本地改好之后再传上去的;如果改不了,就是必须时刻同步、断开了连接就不得的)

目录问题

关于不同用户看见的文件目录视图是否应该相同的问题,我想用自己的经历谈谈看法。

我租了一个轻量应用服务器,当我在网页上用webshell登陆的时候,默认就是在lighthouse下的,当我在电脑本地ssh登录上去的时候,默认是以我服务器的Linux版本命名的目录下;但是当我申请root权限的时候,我能看到根目录下有这两个名字的文件夹。

所以,现在的分布式系统应该也是如此,如果你的权限不高,那应该只能看见自己的那部分;但是如果能够再往上一级翻翻,有了根目录的前缀,如/server/path,你就能看到文件分门别类地放好。

不过确实也存在在所有结点看来都相同的文件目录视图,之前好像在课程中接触过,说是系统会自动根据结点资源情况分配文件存储。文件存储的物理位置改变了,但是在分布式系统层面看到的依然是一样的(或者相反)。
因为分布式系统本身也无需知道物理机的确切位置,资源分配任由系统调度,只需要保证能提供服务即可。

语义问题————session semantic

问题背景

在多用户同时修改同一个文件时,该如何保证数据一致性呢?(比如在线协作文档)

解决方法

将文件共享的语义修改为:某进程正在修改文件时,修改只对其可见;修改完成并关闭文件后,修改才对其他进程可见。(我觉得诸如在线协作文档中 关闭文件 并不是我们用户感知到的关闭文件,而是类似于间隔xx时间没有再输入之类,因为很多时候我在输入的时候能看到别人同步输入的过程和结果,这显然不是在我关闭文档再重新打开后才出现的)

这就引入了 会话语义的概念。

处理会话语义中的矛盾

  • 如果两个客户机同时修改并关闭同一个文件,系统将会随机选择一个作为先关闭者处理。
  • 使用上传/下载模式访问文件期间对其加锁。

基于对象

  • 概念:将计算机上的事物不再看作文件,而是看作对象。客户机与服务器之间通过网络以及其上的IIOP协议(Internet Inter Object Request Broker protocol )传输数据。

image.png

  • 缺点:每个CORBA对象(Common object request broker architecture)只存在于一个服务器上,如果在很大范围内都被频繁使用,性能将会很差。

基于协作

有一个叫Linda的系统,论文发表于1986年前后,是和数据库设计相关的,但相关思想启发了分布式系统设计。论文链接如下:
LINDA:a system for loosely integrated databases

看了原论文,我认为它的核心思想在于以下三点:

image.png

发布/订阅模型是受其思想影响的基于协作的代表模型之一。

  • 发布:生产者将信息作为 元组 在网络上广播。
  • 订阅:对元组中的特定信息感兴趣的进程可以通过一个元组守护进程 订阅 信息。
  • 传播:每个局域网中有一台机器用作信息路由器,搜集所有发布的元组并转送至其他局域网。
  • 特点:完全将生产者和消费者隔离开来。

参考资料

相关文章
|
消息中间件 存储 缓存
分布式中间件核心原理与RocketMQ最佳实践
随着互联网业务的不断扩展和复杂化,分布式系统的需求也越来越迫切。为了满足这一需求,分布式中间件应运而生。在分布式系统中,中间件的角色是协调和管理各个节点之间的通信和数据交换,它起到了桥梁的作用。本文将介绍分布式中间件的核心原理和RocketMQ最佳实践,帮助读者更好地理解和应用分布式中间件。
575 10
|
3月前
|
存储 缓存 监控
分布式链路监控系统问题之kywalking在后期维护过程中可能会遇到中间件版本升级的问题如何解决
分布式链路监控系统问题之kywalking在后期维护过程中可能会遇到中间件版本升级的问题如何解决
|
存储 Java 中间件
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
944 5
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
|
3月前
|
运维 安全 Cloud Native
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
|
6月前
|
消息中间件 运维 Linux
运维最全Linux 命令大全之scp命令_linux scp 指令(1),2024年最新从消息中间件看分布式系统的多种套路
运维最全Linux 命令大全之scp命令_linux scp 指令(1),2024年最新从消息中间件看分布式系统的多种套路
|
6月前
|
算法 NoSQL Java
2023年阿里高频Java面试题:分布式+中间件+高并发+算法+数据库
又到了一年一度的金九银十,互联网行业竞争是一年比一年严峻,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里、字节、美团、腾讯.....)
|
消息中间件 开发框架 搜索推荐
49分布式电商项目 - 消息中间件
49分布式电商项目 - 消息中间件
68 0
2023年阿里高频Java面试题:分布式+中间件+高并发+算法+数据库
又到了一年一度的金九银十,互联网行业竞争是一年比一年严峻,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里、字节、美团、腾讯.....)
2023年阿里高频Java面试题:分布式+中间件+高并发+算法+数据库
又到了一年一度的金九银十,互联网行业竞争是一年比一年严峻,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里、字节、美团、腾讯.....)
|
存储 Kubernetes 网络协议
【分布式技术专题】「OSS中间件系列」从0到1的介绍一下开源对象存储MinIO技术架构
【分布式技术专题】「OSS中间件系列」从0到1的介绍一下开源对象存储MinIO技术架构
711 8
【分布式技术专题】「OSS中间件系列」从0到1的介绍一下开源对象存储MinIO技术架构