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

news2024/9/25 11:18:54

 

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的“心理准备”

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

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

相关文章

【雕爷学编程】Arduino动手做(97)---10段LED光柱模块2

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

C#,数值计算——逻辑斯谛分布(logistic distribution)的计算方法与源程序

逻辑斯谛分布即增长分布,增长分布的分布函数是“增长函数”,亦称“逻辑斯谛函数”(logistic function),故增长分布亦称做“逻辑斯谛分布”。逻辑斯谛分布(logistic distribution)是一种连续型的概率分布,记为L(μ,γ),…

#systemverilog# 说说Systemverilog中《automatic》那些事儿

前面我们学习了有关systemverilog语言中有关《static》的一些知识,同static 关系比较好的哥们,那就是 《automatic》。今天,我们了解认识一下。 在systemveriog中,存在三种并发执行语句,分别是fork..join,fork...join_any和fork..join_none,其中只有fork...join_none不…

OSPF路由协议(红茶三杯CCNA)

链路状态路由协议 OSPF(开放式最短路径优先)Open Shortest Path First 是一种链路状态路由协议,无路由循环(全局拓扑),RFC2328 “开放”意味着非私有的 管理型距离:110 OSPF采用SPF算法计算到达…

vmware虚拟机屏幕太小怎么办

虚拟机里面安装Ubuntu有时候屏幕会自动调整,有时会不会自动调整。 当遇到屏幕太小怎么办? 调整Ubuntu屏幕分辨率就可以了。 我不能说不能通过设置虚拟机达到同样的效果, 但是我可以告诉你设置Ubuntu系统的分辨率可以解决这个问题。 具体…

python爬虫(一)_爬虫原理和数据抓取

关于Python爬虫,我们需要学习的有: Python基础语法学习(基础知识)HTML页面的内容抓取(数据抓取)HTML页面的数据提取(数据清洗)Scrapy框架以及scrapy-redis分布式策略(第三方框架)爬虫(Spider)、反爬虫(Anti-Spider)、反反爬虫(Anti-Anti-Spider)之间的斗…

VIS for AI :ConvNetJS

1.简单介绍: ConvNetJS是由斯坦福大学计算机科学系的Andrej Karpathy开发的一个深度学习框架,用于在浏览器中运行卷积神经网络(ConvNet)。ConvNetJS可以帮助开发人员在客户端(浏览器)上进行深度学习任务&a…

NLP From Scratch: 生成名称与字符级RNN

NLP From Scratch: 生成名称与字符级RNN 这是我们关于“NLP From Scratch”的三个教程中的第二个。 在<cite>第一个教程< / intermediate / char_rnn_classification_tutorial ></cite> 中&#xff0c;我们使用了 RNN 将名称分类为来源语言。 这次&#xff…

算法竞赛入门【码蹄集新手村600题】(MT1060-1080)

算法竞赛入门【码蹄集新手村600题】(MT1060-1080&#xff09; 目录MT1061 圆锥体的体积MT1062 圆锥体表面积MT1063 立方体的体积MT1064 立方体的表面积MT1065 长方体的表面积MT1066 射线MT1067 线段MT1068 直线切平面MT1069 圆切平面MT1070 随机数的游戏MT1071 计算表达式的值M…

[vue] 新项目配置整理(没写完,回头有空继续)

省流版(vue2项目)&#xff1a; 脚手架&#xff1a;vue create xxxx vuex&#xff1a;npm i vuex3 router : npm install vue-router3 vue cli创建项目 vue create xxxx(项目名称) 添加基本配置 module.exports {lintOnSave: false, // 关闭eslint检查publicPath:./, //…

Python(四十七)列表对象的创建

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

JiaYu说:如何做好IT类的技术面试?

IT类的技术面试 面试IT公司的小技巧IT技术面试常见的问题嵌入式技术面试嵌入式技术面试常见的问题嵌入式软件/硬件面试题 JiaYu归属嵌入式行业&#xff0c;所以这里只是以普通程序员的角度去分析技术面试的技巧 当然&#xff0c;也对嵌入式技术面试做了小总结&#xff0c;友友们…

python 源码中 PyId_stdout 如何定义的

python 源代码中遇到一个变量名 PyId_stdout&#xff0c;搜不到在哪里定义的&#xff0c;如下只能搜到引用的位置&#xff08;python3.8.10&#xff09;&#xff1a; 找了半天发现是用宏来构造的声明语句&#xff1a; // filepath: Include/cpython/object.h typedef struct …

MIPI D-PHY 2.1协议(学习笔记)

1~3 简介/术语/参考文档 这三章属于介绍性内容&#xff0c;包括缩略语等名词术语解释内容&#xff0c;不再赘述。 直接进入以下正文部分 4 D-PHY概述 D-PHY描述了一种Source同步、高速、低功耗、低成本的PHY&#xff0c;特别适用于移动应用。这个D-PHY规范主要是为了将相机…

持续部署CICD

目录 &#xff08;1&#xff09;CICD的开展场景 &#xff08;2&#xff09;项目实际应用 CICD 是持续集成&#xff08;Continuous Integration&#xff09;和持续部署&#xff08;Continuous Deployment&#xff09;简称。指在研发过程中自动执行一系列脚本来降低开发引入 bug…

【雕爷学编程】Arduino动手做(175)---机智云ESP8266开发板模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

【KVC补充 Objective-C语言】

一、KVC补充 好,那么接下来,再给大家说一下这个KVC 1.首先我们说,这个KVC,就是指的什么 key value coding 吧 全称就是叫做(Key Value Coding),这是它的全称 那么,你在帮助文档里面搜的时候,你就搜key-value coding 是不是这个啊,key-value coding 然后点击,进…

HashMap中hash方法的作用(详解)

首先&#xff0c;hash方法用来干什么&#xff1f; 在搞清楚原理之前&#xff0c;我们先站在巨人的肩膀浅浅了解一下hash方法的本质作用。 实质上&#xff0c;它的作用很朴素&#xff0c;就是用key值通过某种方式计算出一个hash码 而且这个hash码我们后面要用来计算key存在底…

数据链路层是如何传递数据的

数据链路层是如何传递数据的 数据链路层功能概述封装成帧透明传输差错控制 数据链路层功能概述 数据链路层的主要作用就是加强物理层传输原始比特流的功能。其负责将物理层提供的可能出错的物理连接&#xff0c;改造成逻辑上无差错的数据链路。 数据链路层包括三个基本问题&a…

ICML 2023 | 拓展机器学习的边界

编者按&#xff1a;如今&#xff0c;机器学习已成为人类未来发展的焦点领域&#xff0c;如何进一步拓展机器学习技术和理论的边界&#xff0c;是一个极富挑战性的重要话题。7月23日至29日&#xff0c;第四十届国际机器学习大会 ICML 2023 在美国夏威夷举行。该大会是由国际机器…