当前位置: 首页 > news >正文

读发布!设计与部署稳定的分布式系统(第2版)笔记25_互联层之路由和服务

 

1. 控制请求数量

1.1. 这个世界可以随时摧毁我们的系统

1.1.1. 要么拒绝工作

1.1.2. 要么扩展容量

1.1.3. 没有人会在与世隔绝的环境中使用服务,现在的服务大多必须处理互联网规模的负载

1.2. 系统的每次失效,都源自某个等待队列

1.3. 每个请求都会在它所经过的每一层上占用一个套接字,当请求被实例处理后,该实例就临时少了一个处理其他新请求的套接字

1.4. 可用套接字数量与服务每秒可以处理的请求数量之间存在一定关系,这取决于请求处理的持续时间

1.5. 服务完成请求处理的速度越快,其可处理的吞吐量就越高

1.6. 以太网本质上就是一个串行协议

1.6.1. 把数据包“放到”导线上需要时间,在端口繁忙时,任何待发送的数据包都必须排队

1.6.2. 当写入缓冲区已满时,TCP协议栈将不会接受任何新的写入,并且write调用将被阻塞

1.7. 服务器套接字上的“监听队列”

1.7.1. 如果监听队列已满,那么尝试连接的客户端会进行一系列的重试,最终放弃连接

1.8. 甩负载

1.8.1. 是控制传入请求数量的首要方式

1.8.2. 在高负载情况下最好把那些无法及时完成的工作“挡在门外”

1.8.3. 当套接字监听队列已满时,就可以快速进行甩负载,快速拒绝胜于慢速超时

1.8.4. 尽可能在网络的边缘拒绝额外的请求

1.8.4.1. 能尽早甩负载,从而避免在拒绝请求之前就已经占满多个层级上的资源

1.8.4.2. 请求进入系统越深,占用的资源就越多

1.8.5. 提供健康状况检查,允许负载均衡器保护应用程序

1.8.6. 服务可以通过度量自身响应时间,来协助解决高负载的问题

1.8.6.1. 检查自身的运维状态,查看是否能及时回复请求

1.8.7. 在因响应时间过长引发访问重试时,开始拒绝请求

1.8.8. 服务也应该有相对较短的监听队列

1.8.8.1. 每个请求都会在监听队列中等待一些时间,并花一些时间进行处理,称这两个时间之和为“驻留时间”

1.8.8.2. 监听队列是串行的,而处理是多线程的,所以排队时间最终会比处理时间要长

1.8.9. 需要知道该服务是直接面向互联网(适用于所有实用场景,请求数量无限),还是仅向内部开放(请求数量有限)

1.9. TIME WAIT

1.9.1. 关闭的套接字会在TIME_WAIT状态下保持一段时间,来让所有在互联网上游荡的“掉队”的包超时,或在其到达时被丢弃

1.9.2. 由于当前客户端并没有发送这些数据,因此导致TCP流不再同步。这样的数据包就被称为bogon

1.9.2.1. IME_WAIT则可以防止系统出现这种情况

2. 网络路由

2.1. 服务器必须要知道使用哪个接口才能访问特定的目标IP地址

2.1.1. 服务器的前端网络接口接入一个虚拟局域网与Web服务器通信

2.1.2. 服务器的后端网络接口接入另一个虚拟局域网与数据库服务器通信

2.1.3. 当涉及远程服务时(可能是第三方服务),路由就会变得更复杂

2.2. 现代操作系统力图使路由自动发生且不可见

2.2.1. 当一台服务器启动其主网卡时(只要操作系统认定其为主网卡),会将该网卡的主IP地址当作其“默认网关”,并将这个网关作为这台主机的路由表中的第一个条目

2.3. 总会出现的错误比间歇性的成功要好得多

2.4. 静态路由定义

2.4.1. 网络管理员对外都不赞同使用静态路由,但有时这是唯一可行的方法

2.5. 软件定义网络

2.5.1. 与虚拟化基础设施和基于容器的基础设施密切相关

2.5.2. 容器和虚拟机使用虚拟IP地址、虚拟局域网标记和虚拟交换机来创建一种“网络上的网络”

2.5.3. 数据包仍然在相同的网线上流动,但主机的IP地址不再牵涉其中,这就实现了虚拟交换机在物理交换机之外独立运维

2.6. 错误地配置路由,不仅会降低系统的可用性,还会泄露客户数据

2.7. 所有远程系统连接都应该使用电子表格或数据库来记录目标主机名字、地址和所需路由

2.7.1. 有人会需要这些信息来编写防火墙规则

3. 发现服务

3.1. 组织有太多的服务,使用DNS管理

3.2. 部署环境高度活跃

3.3. 调用方至少需要知道一个IP地址,才能访问某个特定服务

3.4. 可以在分布式数据存储(例如Apache ZooKeeper或etcd)上创建服务发现机制

4. 迁移虚拟IP地址

4.1. 虚拟IP地址意味着一个IP地址不会与一个以太网MAC地址严格绑定

4.2. 负载均衡器会使用虚拟IP地址将多个服务(每个都有自己的IP地址)复用到数量较少的物理接口上

4.3. IP地址的迁移通常用于通过主动方式和被动方式实现的数据库集群

4.3.1. 不能迁移应用程序内存中的状态

4.3.2. 所有非持久化的交互状态都将丢失

4.3.3. 任何通过虚拟IP地址调用数据库的应用程序,都应做好在发生此类故障转移时收到SQLException的“心理准备”

相关文章:

读发布!设计与部署稳定的分布式系统(第2版)笔记25_互联层之路由和服务

1. 控制请求数量 1.1. 这个世界可以随时摧毁我们的系统 1.1.1. 要么拒绝工作 1.1.2. 要么扩展容量 1.1.3. 没有人会在与世隔绝的环境中使用服务,现在的服务大多必须处理互联网规模的负载 1.2. 系统的每次失效,都源自某个等待队列 1.3. 每个请求都会…...

AI面试官:LINQ和Lambda表达式(二)

AI面试官:LINQ和Lambda表达式(二) 当面试官面对C#中关于LINQ和Lambda表达式的面试题时,通常会涉及这两个主题的基本概念、用法、实际应用以及与其他相关技术的对比等。以下是一些可能的面试题目,附带简要解答和相关案…...

Mysql原理篇--第二章 索引

文章目录 前言一、mysql的索引是什么?1.1 索引的结构:1.2 b树特性:1.3 b树每个节点的结构:1.4 b树 键值的大小排序:1.4 b树 存储(InnoDB): 二、索引类型2.1 主要的索引类型&#xff…...

保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识

1.简介 有的小伙伴或者童鞋们可能会好奇地问,不是讲解和分享抓包工具了怎么这里开始讲解HTTP和HTTPS协议了。这是因为你对HTTP协议越了解,你就能越掌握Fiddler的使用方法,反过来你越使用Fiddler,就越能帮助你了解HTTP协议。 Fid…...

【iOS】单例、通知、代理

1 单例模式 1.1 什么是单例 单例模式在整个工程中,相当于一个全局变量,就是不论在哪里需要用到这个类的实例变量,都可以通过单例方法来取得,而且一旦你创建了一个单例类,不论你在多少个界面中初始化调用了这个单例方…...

从Vue2到Vue3【五】——新的组件(Fragment、Teleport、Suspense)

系列文章目录 内容链接从Vue2到Vue3【零】Vue3简介从Vue2到Vue3【一】Composition API(第一章)从Vue2到Vue3【二】Composition API(第二章)从Vue2到Vue3【三】Composition API(第三章)从Vue2到Vue3【四】C…...

PostgreSQL——sql文件导入

Windows方式: 进入PostgreSQL安装目录的bin,进入cmd 执行命令: psql -d 数据库名 -h localhost -p 5432 -U 用户名 -f 文件目录 SQL Shell: 执行命令: \i 文件目录(Windows下要加引号和双斜线)...

[SQL挖掘机] - 全连接: full join

介绍: 在sql中,join是将多个表中的数据按照一定条件进行关联的操作。全连接(full join)是一种连接类型,它会返回所有满足连接条件的行,同时还包括那些在左表和右表中没有匹配行的数据。 在进行全连接时,会…...

SpringDataJpa 实体类—主键生成策略

主键配置 IdGeneratedValue(strategy GenerationType.IDENTITY)Column(name "cust_id")private Long custId;//主键 Id:表示这个注解表示此属性对应数据表中的主键GeneratedValue(strategy GenerationType.IDENTITY) 此注解表示配置主键的生成策…...

【LeetCode 算法】Parallel Courses III 并行课程 III-拓扑

文章目录 Parallel Courses III 并行课程 III问题描述:分析代码拓扑 Tag Parallel Courses III 并行课程 III 问题描述: 给你一个整数 n ,表示有 n 节课,课程编号从 1 到 n 。同时给你一个二维整数数组 relations ,其…...

进行消息撤回功能的测试时,需要考虑哪些?

进行消息撤回功能的测试时,可以考虑以下测试点: 1. 功能可用性测试:确认消息撤回功能是否能够正常使用,并且在不同的场景下(例如单聊、群聊)是否表现一致。 2. 撤回时限测试:检查消息撤回的时…...

C语言动态内存管理(三)

目录 五、C/C程序的内存开辟1.图解2.关键点 六、柔性数组1.什么是柔性数组2.两种语法形式3.柔性数组的特点4.柔性数组的创建及使用在这个方案中柔性数组的柔性怎么体现出来的? 5.不用柔性数组,实现数组可大可小的思路6.对比 总结 五、C/C程序的内存开辟 1.图解 &a…...

通过cmake工程生成visual studio解决方案

1、前言 visual studio是一个很强大的开发工具,这个工具主要是通过解决方案对我们的源码进行编译等操作。但是我们很多时候拿到的可能并不是一个直接的解决方案,可能是是一个cmake工程,那么这个时候我们就需要通过cmake工程生成解决方案&…...

STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL库开发)

时钟配置HSI主频配置64M 勾选打开8个通道的ADC 使能连续转换模式 添加DMA DMA模式选择循环模式 使能DMA连续请求 采样时间配置160.5 转换次数为8 配置好8次转换的顺序 配置好串口,选择异步模式配置好需要的开发环境并获取代码 修改main.c 串口重定向 #include &…...

Vue入门项目——WebApi

Vue入门——WebApi vue3项目搭建组合式API响应式APIreactive()ref() 生命周期钩子computed计算属性函数watch监听函数父子通信模板引用组合选项 vue3项目搭建 简单看下Vue3的优势吧 下载安装npm及node.js16.0以上版本(确保安装成功可用如下代码检查版本&#xff0…...

【电源专题】电量计参数RSOC/RM/FCC定义

在文章【电源芯片】电量计(Gauge)介绍中我们讲到电量计的功能就是监测电池、计量电量。 那么电量计其实也是有很多算法的,比如【电源专题】电量计估计电池荷电状态方法(开路电压法及库仑计法)的差别文章所说的开路电压法和库仑计法。当然还有如阻抗跟踪法、CEDV算法等。 …...

实际开发中,React应用常见问题【持续更新中】

实际开发中,React应用常见问题【持续更新中】 实际开发中,React应用常见问题【持续更新中】 一、路由相关 “react-router-dom”: “^6.14.2”, “react”: “^18.2.0”, 1、监听路由 import { useLocation } from react-router-domexport default func…...

HTML5前端开发工程师的岗位职责说明(合集)

HTML5前端开发工程师的岗位职责说明1 职责 1、根据产品设计文档和视觉文件,利用HTML5相关技术开发移动平台的web前端页面; 2、基于HTML5.0标准进行页面制作,编写可复用的用户界面组件; 3、持续的优化前端体验和页面响应速度,并保证兼容性和…...

Go编写服务监管程序

前言 程序的目的:一个基于Linux系统下的进程监控与管理工具,它能够监控指定的进程或服务的运行情况,并在发现它们不存在或出现异常时自动进行重启操作。这个程序就像一个可靠的看门狗,时刻守护着系统的稳定运行。 程序的本身是周期…...

API商品详情:详尽呈现产品信息的利器

API商品详情:详尽呈现产品信息的利器 随着电子商务的迅速发展,越来越多的企业和开发者开始关注和利用API来实现灵活、高效的商品展示和推广。而在这一领域中,API商品详情成为了无可替代的利器,为用户提供了极为详尽的产品信息。 …...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

CSS | transition 和 transform的用处和区别

省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

LRU 缓存机制详解与实现(Java版) + 力扣解决

📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...