《深入理解分布式系统》之认识分布式系统

本文是阅读深入理解分布式系统第一章认识分布式系统时的笔记。

分布式系统的特点

  • 多进程
  • 不共享操作系统
  • 不共享时钟

分布式系统

  • 由多个可独立运行的子系统组成。
  • 每个子系统可以独立选择运行平台。
  • 不同的运行平台存在差异,比如操作系统,硬件规格等。
  • 由于底层平台不同,因此无法共享底层基础设施,比如:
    • 通信,无法使用单机常见的通信机制,只能使用消息来通信,比如TCP、消息队列等。
    • 时钟,不同平台的时钟精度不同,或多或少存在一定的误差,且无法完全避免。

传统的单体应用
与分布式系统相比:

  • 所有子系统或者组件在同一个进程内运行。
  • 所有子系统运行于相同的平台上,依赖相同的底层平台。
  • 所有的子系统需要适配共同平台的特点,适应优点和缺点。
  • 所有的子系统共享相同平台的基础设施。
    • 由于在同一个进程内,子系统之间通信时,可选择的方案很多,并且可靠。
    • 在同一个平台上,时钟的误差相对稳定,对所有子系统的影响是相同的。

分布式系统的异构优势
对于分布式系统而言,不同的子系统可以使用不同的底层平台和硬件规格,因此可以依据不同的需求,做出不同的选择。比如:

  • 对于计算密集型的子系统,可以配置核数多、计算频率高的CPU。
  • 对于缓存型业务的子系统,可以配置大的内存,尽可能将数据缓存至内存中,提升缓存的访问效果。
  • 对于网络I/O密集型的子系统,可以配置带宽大、处理能力强的网卡。
  • 对于文件I/O密集且时延敏感的子系统,可以配置SSD盘,降低I/O处理时延,提升I/O吞吐量。
  • 对于文件I/O密集且时延不敏感、吞吐量敏感的子系统,可以配置HDD盘,满足大带宽的访问能力,同时有效降低成本。

使用分布式系统的主要动力
使用分布式系统来承载业务交付的主要动力:

  • 高性能
    简单的堆砌硬件,提升硬件规格,可能已经无法满足客户对业务性能的诉求。
    提升硬件的规格目前面临物理定律的限制,提升的难度和成本快速增长,相比之下提升规格的效益和投入成本越来越不匹配。
    从单机系统迁移至多机的分布式系统,堆砌简单、低成本的硬件,期望换取性能的线性或者准线性增长。
  • 可扩展性
    性能不足时,可以通过向集群中增加新的节点,来提升性能,同时不会显著增加系统复杂度以及各类成本。
  • 高可用
    降低子系统失效时,对业务整体的影响。
  • 必要性
    不同地域,不同业务归属等原因,导致一些业务系统天然具备分布式系统的特征。

个人见解
在做技术选型时,从开发、验证、维护的角度来说,假如单体系统或者单体应用可以满足客户要求的功能、性能、扩展性等要求的话,优先选择单体的方案,快速交付、快速满足客户需求,争取到活下来的机会,然后再依据客户的诉求,业务发展的方向,逐步迁移技术路径,将单体应用逐步改造为分布式系统,支撑业务不断迭代和成长。

常见的分布式系统
依据Google的成功经验,梳理分布式系统的服务,如下:

  • 分布式锁服务
  • 分布式协调服务
  • 分布式缓存服务,键值对
  • 分布式存储服务
    • 分布式块服务
    • 分布式文件服务
    • 分布式对象服务
  • 分布式数据库
    • NoSQL数据库
    • 行式数据库
    • 列式数据库
  • 分布式缓存型数据库
    • 行式数据库
    • 列式数据库
  • 分布式批处理服务
  • 分布式流处理服务
  • 分布式计算服务
  • 分布式图计算服务
  • 分布式调度服务
    • 任务的类型
      • 定时任务
      • 一次性任务
    • 任务的操作
      • 新建
      • 执行
      • 暂停
      • 删除
    • 任务之间的依赖关系
    • 资源的分配和管理
  • 时钟服务
  • DNS服务
  • 集群管理
    • 扩容
    • 缩容
    • 隔离
    • 监控
      • 告警
      • 性能
    • 升级
    • 回退
    • 打补丁

常见的思维误区
设计、交付分布式系统时,常见的思维误区:

  • 网络是可靠的。
  • 子系统间传递信息的延迟为零。
  • 子系统间传递信息时的带宽是无限的。
  • 子系统间通信时的网络是安全的。
  • 网络拓扑结构不会发生改变。
  • 有单一、万能且不会犯错的管理员。
  • 子系统之间传递信息的传输成本为零。
  • 网络是同构的。

网络延迟类的问题
在传递消息时,发送者创建、发送消息,消息通过网络传递至接收者。

  • 从发送者角度来看

    • 消息丢失,即发送消息后,消息没有传递给接收端。
    • 在超时前,没有等到回应,即发送消息后,发送者等待一段时间后没有收到接收者的回应,从而判定消息丢失。但有可能接收者确实收到了消息,但整体上耗时超出发送者的预期。
    • 重试之后,仍然无法按照发送者预期的方式通信,导致发送者判定接收者失效,但接收者可能是正常的。
    • 网络传输消息时,可能无法保证时序,即发送者接收到响应消息,但顺序和预期存在差异。
  • 从接收者的角度来看

    • 发送者可能重复发送了消息,比如发送者设置的超时值太短。
    • 网络在传递消息时,可能由于各种原因,多次传递了消息,导致接收者收到了重复的消息。
    • 网络传输消息时,可能无法保证时序,即接收者收到消息时,消息的顺序和发送时的顺序不同。

部分失效的问题
客户期望分布式系统中个别子系统失效,不影响整体业务的表现。
但在分布式系统中,各子系统可能会以预想不到的方式出现失效,从而显著提升相关问题的定位、修复的难度。

时钟的问题
手表定律

拥有两块以上的手表并不能帮人更准确的判断时间,反而会制造混乱,让看表的人失去对时间的判断。

对于分布式系统而言,由于子系统运行在各种平台上,各自拥有不同的时钟,从而导致无法准确、一致的预计时间,因此判断事件的先后顺序,变成了一件极其有挑战的事情。

常规操作的规格
掌握常见操作的时延,有助于评估分布式系统场景下各业务处理流程的耗时,从而选择最佳的实现方案。

常见的评估指标
比如时延、带宽、吞吐量等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/82424.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/82424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE5 PCG学习笔记

https://www.bilibili.com/video/BV1onUdY2Ei3/?spm_id_from333.337.search-card.all.click&vd_source707ec8983cc32e6e065d5496a7f79ee6 一、安装PCG 插件里选择以下进行安装 移动目录后,可以使用 Update Redirector References,更新下&#xff0…

工业现场ModbusTCP转EtherNETIP网关引领生物现场领新浪潮

生物质发生器是一种能够产生、培养生物的设备。客户现场需要将生物发生器连接到罗克韦尔系统,但是二者协议无法直接通讯,需要通过ModbusTCP转Ethernet/IP网关将两者进行通讯连接,生物质发生器以其独特的工作原理和优势,使得生物的…

宝蓝德中间件部署war包时,配置的绝对路径读取错误。

文章目录 问题场景解决办法宝蓝德是什么??一、基础环境与依赖配置二、自动化部署工具链三、高可用性与集群配置四、安全与合规性措施五、产品线差异化部署六、典型部署流程示例七、运维与优化 原因1. 明确“当前工作目录”与“绝对路径”的关系2. 问题根…

Java、Python、NodeJS等开发环境安装及配置镜像加速到国内源

文章目录 Java1.Windows1.1 scoop方式安装JDK 2.Linux2.1 apt方式安装JDK2.1.1 切换JDK2.1.2 验证版本2.1.3 原理 Python1.Windows1.1 scoop方式安装Python1.2 uv方式安装Python(推荐) 2.Linux2.1 apt方式安装Python2.1.1 配置版本切换2.1.2 切换Python2…

Linux系统管理与编程16:PXE自动化安装部署centos7.9操作系统

兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 0.准备 1)防火墙和SELinux systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i s/^SELINUX.*/SELINUXdisabled/ /etc/selinux/config (很不好的…

MCP(Model Context Protocol)是专为LLM(大语言模型)应用设计的标准化协议

核心定义 MCP(Model Context Protocol)是专为LLM(大语言模型)应用设计的标准化协议,通过安全可控的方式向AI应用暴露数据和功能。主要提供以下能力: 标准化的上下文管理安全的功能调用接口跨平台的数据交…

Fiori学习专题三十四:Responsiveness

在这一步中,我们提高了应用程序的响应能力。SAPUI5应用程序可以在手机、平板电脑和台式机设备上运行,我们可以配置应用程序以充分利用每种场景的屏幕状态。幸运的是,像sap.m.Table这样的SAPUI5控件已经提供了许多我们可以使用的功能。 1.修改…

解决 TimeoutError: [WinError 10060] 在 FramePack项目中连接 Hugging Face 超时的问题

#工作记录 以下是针对 TimeoutError: [WinError 10060] 的完整排查方案,适用于 FramePack项目中。 (一般该错误的发生原因请重点排查Hugging Face模型仓库受限需要登录的情形) FramePack项目参考资料 FramePack部署(从PyCharm解…

obj = null; 赋值null之前没有其他引用指向obj对象,那么,当obj=null时,会被垃圾回收机制立即回收吗?

不会立即回收。 具体原因是: 赋值 obj null; 后,对象变成“不可达”,符合垃圾回收条件,但垃圾回收器并不会立刻回收它。垃圾回收是CLR自动控制的非确定性过程,什么时候执行回收取决于系统内存压力、GC策略、分代情况…

【Ubuntu 安装Docker CE-Jenkins】

安装Docker CE(Ubuntu) Install | Docker Docs官网 使用apt仓库安装 DNS配置(可选) #手动替换 sudo vim /etc/systemd/resolved.conf #典型配置如下 [Resolve] DNS8.8.8.8 DNS114.114.114.114 FallbackDNS1.1.1.1 # 备用 DNS#sed替换 sudo sed -i /^#DNS/ {s/#DNS/DNS8.8.8…

5、开放式PLC梯形图编程组件 - /自动化与控制组件/open-plc-programming

76个工业组件库示例汇总 开放式PLC编程环境 这是一个开放式PLC编程环境的自定义组件,提供了一个面向智能仓储堆垛机控制的开放式PLC编程环境。该组件采用苹果科技风格设计,支持多厂商PLC硬件,具有直观的界面和丰富的功能。 功能特点 多语…

内网和外网怎么互通?外网访问内网的几种简单方式

在企业或家庭网络中,经常会遇到不同内网环境下网络互通问题。例如,当公司本地局域网内有个办公OA网站,在办公室内电脑上网可以登录使用,但在家带宽下就无法直接通信访问到。这就需要我们采取一些实用的内外网互通技巧来解决这个问…

使用大语言模型进行机器人规划(Robot planning with LLMs)

李升伟 编译 长期规划在机器人学领域可以从经典控制方法与大型语言模型在现实世界知识能力的结合中获益。 在20世纪80年代,机器人学和人工智能(AI)领域的专家提出了莫雷奇悖论,观察到人类看似简单的涉及移动和感知的任务&#x…

【计算机视觉】OpenCV实战项目: opencv-text-deskew:实时文本图像校正

opencv-text-deskew:基于OpenCV的实时文本图像校正 一、项目概述与技术背景1.1 核心功能与创新点1.2 技术指标对比1.3 技术演进路线 二、环境配置与算法原理2.1 硬件要求2.2 软件部署2.3 核心算法流程 三、核心算法解析3.1 文本区域定位3.2 角度检测优化3.3 仿射变换…

可视化图解算法33:判断是不是平衡二叉树

1. 题目 描述 输入一棵节点数为 n 的二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 平衡二叉树(Balanced Binary Tree),具有以下性质&#xff1…

【Linux网络】应用层自定义协议与序列化

应用层自定义协议与序列化 应用层 我们程序员写的一个个解决我们实际问题,满足我们日常需求的网络程序,都是在应用层. 协议是一种"约定".Socket的接口,在读写数据时,都是按"字符串"的方式来发送接收的.如果我们要传输一些"结构化的数据"怎么办…

MySQL + Elasticsearch:为什么要使用ES,使用场景与架构设计详解

MySQL Elasticsearch:为什么要使用ES,使用场景与架构设计详解 前言一、MySQL Elasticsearch的背景与需求1.1 为什么要使用Elasticsearch(ES)?1.2 为什么MySQL在某些场景下不足以满足需求?1.3 MySQL Elas…

PPL困惑度的计算

1. 公式 PPL(Perplexity)困惑度 是自然语言处理(NLP)中常用的评估语言模型(Language Model)性能的指标。PPL 用于衡量语言模型对语言序列的预测能力,数值越小,说明模型的预测能力越…

MegaCLI Raid管理工具

整理在CentOS 7.9和Ubuntu 24.04上,MegaCLI 工具的安装与常用命令。 1. 参考 下载和安装MegaCLI工具 MegaCli RAID管理工具 Megacli 批量磁盘巡检 ubuntu24.04 No such file libncursesw.so.5 dell服务器硬盘的状态变成外来(foreign)命…

HTML9:页面结构分析

页面结构分析 元素名描述header标题头部区域的内容(用于页面或页面中的一块区域)footer标记脚部区域的内容(用于整个页面或页面的一块区域)sectionWeb页面的一块独立区域article独立的文章内容aside相关的内容或应用(…