使用基于远程过程调用 (RPI) 的进程间通信机制时, 客户端假定响应及时到达.
远程过程调用原理:
3.2.1 使用 REST
REST 成熟度模型
定义 REST API
REST IDL 是 Open API.
在一个请求中获取多个资源的挑战
如果要获取不同对象, 纯 REST API 要求使用不同 API, 这增加了延迟.
解决方案:
- 允许在获取资源时检索相关资源
- GraphQL
- Netflix Falcor
把操作映射为 HTTP 动词的挑战
操作不能很好的映射, 导致 REST 替代方案的普及:
- gRPC
REST 的好处和弊端
好处:
弊端:
3.2.2 使用 gRPC
好处:
弊端:
gRPC 是一种同步通信机制, 因此存在局部故障的问题.
3.2.3 使用断路器模式处理局部故障
避免故障的传导和扩散:
- 让远程过程调用代理有正确处理无响应服务的能力
- 需要决定如何从失败的远程服务中恢复
开发可靠的远程过程调用代理
当一个服务同步调用另一个服务时, 应该使用 Netflix 描述的方法来保护自己:
从服务失效故障中恢复
- 向客户端返回错误
- 返回备用值 (fallback value)
- 可以返回缓存或不返回无响应服务的数据
3.2.4 使用服务发现
现代应用程序更具动态性:
- 网络位置
- 自动扩展
- 故障
- 升级
什么是服务发现
关键组件: 服务注册表
实现服务发现的方式:
- 服务及其客户直接与服务注册表交互
- 通过部署基础设施来处理服务发现
应用层服务发现模式
好处:
- 多平台部署
- 同时适用于遗留环境和 Kubernetes
弊端:
- 为使用的每种编程语言提供服务发现库
- 开发者负责设计和管理服务注册表
平台层服务发现模式
服务注册, 服务发现, 请求路由完全有部署平台处理.
好处:
- 服务和客户端都不包含任何服务发现代码
弊端:
仅限于支持使用该平台部署的服务