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

简介: 需要说明的是,截止目前,我对分布式系统的了解还很表面,所以以下也只是我了解到的概念和我的主观推测,如有错误,还请各位大佬指出哈~
本文首发于稀土掘金。该平台的作者 逐光而行 也是本人。

学校教的或书本上写的,仅仅是一个领域的基本概念和皮毛,要想真正领悟,得多实践(多做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最佳实践,帮助读者更好地理解和应用分布式中间件。
925 95
|
存储 Java 中间件
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
1423 95
【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南
|
8月前
|
消息中间件 存储 Kafka
分布式消息中间件设计与实现
本文深入探讨了消息中间件的核心功能实现与高并发、高可用设计。在生产者设计中,涵盖消息构造、序列化、路由策略及可靠性保障(如ACK机制)。消费者部分分析了拉取/推送模式、分区分配与消息确认机制。同时,Broker作为核心组件,负责消息路由、存储和投递,并通过索引技术实现快速检索。 高并发设计方面,重点讨论了文件存储(顺序写入、分段存储)、日志结构存储及负载均衡策略(如哈希分区、轮询分区)。为确保高可用性,文章详细解析了主从复制、故障转移机制以及同城/异地多活容灾方案。
|
4月前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的"神经网络",强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
|
8月前
|
消息中间件 存储 中间件
分布式消息中间件基础
消息中间件是一种基于异步消息传递的分布式系统通信工具,核心功能包括消息传输、存储、路由与投递,能够实现系统解耦、异步处理和流量削峰。其主要组件包括生产者、消费者、Broker、主题/队列等,支持点对点和发布-订阅两种消息模型。主流中间件如Kafka(高吞吐)、RabbitMQ(灵活路由)、RocketMQ(事务支持)各有特色,适用于不同场景。此外,中间件还涉及多种协议(AMQP、MQTT等)、可靠性传输机制(持久化、确认机制)、顺序性与重复性问题解决以及事务支持(两阶段提交、本地消息表等)。选择中间件需根据业务需求权衡性能、功能和运维成本。
|
存储 缓存 监控
分布式链路监控系统问题之kywalking在后期维护过程中可能会遇到中间件版本升级的问题如何解决
分布式链路监控系统问题之kywalking在后期维护过程中可能会遇到中间件版本升级的问题如何解决
190 1
|
运维 安全 Cloud Native
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
核心系统转型问题之分布式数据库和数据访问中间件协作如何解决
|
Java 中间件 API
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)
778 88
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)
|
存储 Kubernetes 网络协议
【分布式技术专题】「OSS中间件系列」从0到1的介绍一下开源对象存储MinIO技术架构
【分布式技术专题】「OSS中间件系列」从0到1的介绍一下开源对象存储MinIO技术架构
1723 91
【分布式技术专题】「OSS中间件系列」从0到1的介绍一下开源对象存储MinIO技术架构
|
关系型数据库 中间件 分布式数据库
阿里云互联网中间件五剑客之——分布式关系型数据库服务DRDS
阿里云互联网中间件五剑客之——分布式关系型数据库服务DRDS自制脑图, Distribute Relational Database Service(DRDS)是分布式关系型数据库,它主要是一种水平拆分、可平滑扩容、读写分离的在线分布式数据库服务。
553 77
阿里云互联网中间件五剑客之——分布式关系型数据库服务DRDS