读发布!设计与部署稳定的分布式系统(第2版)笔记16_握手和考验机

1. 握手

1.1. 发送方和接收方之间的信号传递过程

1.2. 模拟调制解调器使用一种握手形式,协商两个设备都能接受的速度和信号编码

1.3. TCP使用三次握手建立套接字连接

1.4. TCP握手还允许接收方发信号告诉发送方:在接收方准备好之前不要发送数据

1.5. EIA-232C(以前称为RS-232)的串行协议,是从接收方那里知道它何时能准备好接收数据

1.6. 握手在低层通信协议中无处不在,但几乎很少出现在应用程序层

1.7. 握手是一种未被充分利用的技术,在应用层协议中拥有巨大的优势

1.7.1. HTTP并不擅长握手

2. 创建基于合作的需求控制机制

2.1. 客户端和服务器之间的握手,允许将需求的流量调节到可服务的级别

2.2. 在构建客户端和服务器时,两者都必须实现握手

2.3. 让服务器通过限制自己的工作量保护自己

2.3.1. 服务器应该有办法拒绝执行发来的工作,而不是成为满足任何要求的“受气包”

2.3.2. 基于HTTP的服务器需要依赖负载均衡器与Web服务器或应用程序服务器之间的合作关系实现“握手”

3. 健康状况检查

3.1. 在集群或负载均衡服务中,使用健康状况检查实现实例与负载均衡器握手

3.2. 当失衡的系统容量导致响应缓慢时,“握手”可能是最有价值的

3.3. 当调用缺乏握手机制的服务时,断路器是一种可以使用的权宜之计

3.4. 在层叠失效情况下,握手是一种防止裂纹跨层蔓延的有效方法

4. 在自己的低层协议中构建握手

4.1. 如果创建了基于套接字的协议,那么可以在其中构建握手机制

4.2. 端点就可以在未准备好接受工作时,通知其他端点

5. 考验机

5.1. 分布式系统的失效方式很难在开发环境或QA环境中显现

5.2. 可以创建考验机来模拟每个集成点另一端的远程系统

5.2.1. 硬件工程师和机械工程师一直使用考验机

5.2.2. 软件工程师虽然也已经在使用,但其考验机过于简单

5.2.3. 像设计应用程序服务器一样来设计考验机,其中与真实应用程序相关的那些测试,可以设计为可插拔的形式

5.3. 优秀的考验机严格测试系统,像现实世界的系统一样“恶毒”

5.4. 考验机应该给被测系统留下“伤疤”,它的意义就是让被测系统做到不信有好事

5.4.1. 考验机应该像一个小“黑客”,尝试各种不良行为来给调用方搞破坏

5.5. 考验机会引出混沌工程

5.6. 考验机作为一台单独的服务器运行,没有义务遵循任何接口规范,可以激发网络错误、协议错误或应用程序级错误

5.6.1. 每个系统最终都会偏离接口规范,因此在远程系统无法使用时,测试本地系统的行为就变得至关重要

5.6.2. 模拟偏离接口规范的系统失效方式

5.7. 远程调用使用网络,套接字连接容易出现的失效

5.7.1. 网络传输问题

5.7.2. 网络协议问题

5.7.3. 应用程序协议问题

5.7.4. 应用程序逻辑问题

5.8. 考验机知道其存在的意义是且仅是进行测试

5.8.1. 真正的应用程序不会直接调用低层网络API,但考验机可以

5.8.2. 其字节发送速度能快能慢

5.8.3. 能建立极长的监听队列

5.8.4. 能与套接字绑定却从不发起连接

5.9. 考验机仅是补充,不能取代其他测试方法

5.10. 考验机有助于验证非功能性行为,同时又与远程系统保持隔离

6. mock对象

6.1. mock对象只能产生符合已定义接口的行为

6.2. mock对象通过切断所有外部连接改进单元测试的隔离性,通常在系统层级之间的边界处使用

posted @ 2023-06-30 07:14  躺柒  阅读(68)  评论(0编辑  收藏  举报