登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
每日签到
每天签到奖励2圆-6圆
发帖说明
VIP申请
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
VIP申请
VIP网盘
网盘
联系我们
每日签到
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
读发布!设计与部署稳定的分布式系统(第2版)笔记17_中 ...
读发布!设计与部署稳定的分布式系统(第2版)笔记17_中间件、背压和调速器
[ 复制链接 ]
尹疋
2025-6-6 20:55:03
1. 完全的解耦
1.1. 各台服务器、层级和应用程序解耦得越彻底,集成点、层叠失效、响应缓慢和线程阻塞等问题就越少
1.2. 应用程序解耦后,系统可以单独更改其他应用程序的所有配件,因此也更具适应性
2. 中间件
2.1. 在极其杂乱无章的环境中,集成原本就不在一起工作的系统
2.2. 中间件既可以做到将其集成,又可以做到将其解耦
2.3. 由于集成点是导致系统不稳定的首要原因,因此“既可集成,又能解耦”是件好事
2.4. 松耦合的中间件允许调用系统和接收系统在不同的地点和时间处理消息
2.4.1. IBM MQSeries
2.4.2. 所有基于队列或发布-订阅机制的消息传递系统
2.4.3. 实现系统间消息传递的SMTP或SMS系统
2.4.3.1. SMTP和SMS系统通常由人(而不是服务器)充当消息代理,且系统延迟往往很高
2.5. 面向消息的中间件,在空间和时间上实现端点解耦
2.5.1. 发出请求的系统不会“坐等回复”
2.5.2. 不会导致层叠失效
2.6. 从同步的“请求-回复”到异步的通信方式的转变,需要完全不同的设计
2.6.1. 需要考虑转换成本
2.6.2. 中间件解耦是架构决策
2.6.2.1. 相关的实施会波及系统的每个部分
2.6.3. 应该在最后责任时刻到来时,尽早做出这种几乎不可逆转的决策
3. 背压机制
3.1. 每个性能问题都源于其背后的一个等待队列
3.1.1. 套接字的监听队列
3.1.2. 操作系统的运行队列
3.1.3. 数据库的I/O队列
3.2. 如果队列无限长,那么它就会耗尽所有可用的内存
3.3. 随着队列长度的增加,完成队列中某项工作的时间也会增加
3.3.1. 当队列长度达到无穷大时,响应时间也会趋向无穷大
3.4. 要想获得有限的响应时间,就需要构建有限长度的等待队列
3.5. 如果队列的长度是有限的,那么当队列已满且生产者仍试图再塞入一个新请求时,必须立刻采取应对措施
3.5.1. 假装接受新请求,但实际上将其抛弃
3.5.2. 确实接受新请求,但抛弃队列中的某一个请求
3.5.2.1. 随着时间的推移价值迅速降低的数据,抛弃队列中最先发出的请求可能是最佳选择
3.5.3. 拒绝新请求
3.5.4. 阻塞生产者,直至队列出现空的位置
3.5.4.1. 一种流量控制手段,允许队列向发送数据包的上游系统实施“背压”措施
3.5.4.2. 消费者必须当心,不要永久阻塞
3.6. TCP在每个数据包中都采用额外的字段构建背压机制
3.6.1. 来自TCP接收方窗口的背压,会让发送方填满其发送缓冲区,这时后续写入套接字的调用将被阻塞
3.7. 背压机制通过让消费者放慢工作来实现安全性
3.8. 背压机制会导致线程阻塞
3.9. 背压机制最适合异步调用和编程
3.9.1. Rx框架、actor或channel工具实现这个机制
3.10. 在系统边界内运用背压机制效果最好
3.10.1. 在系统边界之间,还是需要使用卸下负载模式和异步调用
4. 卸下负载
4.1. 服务、微服务、网站和开放式API都有一个共同特点:无法控制其需求量
4.1.1. 总能对某个系统施加超出其处理能力的负载
4.2. 服务应该模仿TCP的做法
4.2.1. 当负载过高时,就开始拒绝新的工作请求
4.2.2. 当请求花费的时间超过SLA规定的响应时长时,就可以卸下一些负载
4.2.2.1. 让系统的响应时间得到控制,而不是任其让调用方超时
4.3. 将负载均衡器用作减震器
4.4. 运用背压机制会更有效
5. 自动化机制
5.1. 自动化机制缺乏判断能力,一旦出错,就错得惊人
5.2. 自动化机制处理人类不擅长的事情
5.2.1. 重复的任务和快速的响应
5.3. 自动化机制不擅长的事情
5.3.1. 自动化机制不擅长的事情
6. 调速器
6.1. 使用调速器限制发动机的速度,即使动力源可以更快地驱动,调速器也可以防止它以不安全的转速运转
6.2. 调速器可以感知状态和时间,知道一段时间以来自身执行的操作
6.3. 调速器往往是不对称的
6.3.1. 在不安全的方向上施加阻力
6.3.2. 一旦超出范围,就可以运用调速器增加操作阻力
6.4. 使用调速器的意义在于放缓做事的速度,以便人工干预
6.4.1. 需要监控响应曲线的两端,当有情况发生时能够提醒人们,并给他们足够的可视化信息理解所发生的事情
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
2版
调速
背压
中间件
笔记
相关帖子
CMake构建学习笔记20-iconv库的构建
复健笔记 - 前言
CMake构建学习笔记22-libxml2库的构建
[信号与系统个人笔记]第三章 连续时间信号与系统的频域分析
VTK开发笔记(三):熟悉VTK开发流程,编写球体,多半透明球体Demo
Power BI学习笔记-周报销售数据分析
CMake构建学习笔记23-SQLite库的构建
CMake构建学习笔记24-使用通用脚本构建PROJ和GEOS
CMake构建学习笔记25-SpatiaLite库的构建
3月22日第2版密码1
vip免费申请,1年只需15美金$
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
CMake构建学习笔记20-iconv库的构建
0
740
驳嗦
2025-08-26
安全
复健笔记 - 前言
0
848
睿哝
2025-08-27
业界
CMake构建学习笔记22-libxml2库的构建
0
740
饮邺谲
2025-08-29
业界
[信号与系统个人笔记]第三章 连续时间信号与系统的频域分析
0
630
汇干环
2025-08-31
业界
VTK开发笔记(三):熟悉VTK开发流程,编写球体,多半透明球体Demo
0
806
邰怀卉
2025-09-01
业界
Power BI学习笔记-周报销售数据分析
0
839
恐肩
2025-09-01
业界
CMake构建学习笔记23-SQLite库的构建
0
427
涣爹卮
2025-09-02
业界
CMake构建学习笔记24-使用通用脚本构建PROJ和GEOS
0
700
左丘平莹
2025-09-03
业界
CMake构建学习笔记25-SpatiaLite库的构建
0
101
虽裘侪
2025-09-04
程序
3月22日第2版密码1
0
27
新程序
2025-09-04
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
尹疋
2025-6-6 20:55:03
关注
0
粉丝关注
14
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9984
杭环
9988
凶契帽
9988
4
氛疵
9988
5
黎瑞芝
9988
6
猷咎
9986
7
里豳朝
9986
8
肿圬后
9986
9
蝓俟佐
9984
10
虽裘侪
9984
查看更多