当前位置: 首页 > 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商品详情成为了无可替代的利器,为用户提供了极为详尽的产品信息。 …...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...