使用基于远程过程调用 (RPI) 的进程间通信机制时, 客户端假定响应及时到达.

远程过程调用原理:

image.png

image.png

3.2.1 使用 REST

RESTful 风格

REST 成熟度模型

image.png
image.png

定义 REST API

REST IDL 是 Open API.

在一个请求中获取多个资源的挑战

如果要获取不同对象, 纯 REST API 要求使用不同 API, 这增加了延迟.

解决方案:

  • 允许在获取资源时检索相关资源
  • GraphQL
  • Netflix Falcor

把操作映射为 HTTP 动词的挑战

操作不能很好的映射, 导致 REST 替代方案的普及:

  • gRPC

REST 的好处和弊端

好处:

image.png

弊端:

image.png

3.2.2 使用 gRPC

好处:

image.png

弊端:

image.png

gRPC 是一种同步通信机制, 因此存在局部故障的问题.

3.2.3 使用断路器模式处理局部故障

image.png

image.png

避免故障的传导和扩散:

  • 让远程过程调用代理有正确处理无响应服务的能力
  • 需要决定如何从失败的远程服务中恢复

开发可靠的远程过程调用代理

当一个服务同步调用另一个服务时, 应该使用 Netflix 描述的方法来保护自己:

image.png
image.png

从服务失效故障中恢复

  • 向客户端返回错误
  • 返回备用值 (fallback value)

image.png

  • 可以返回缓存或不返回无响应服务的数据

3.2.4 使用服务发现

现代应用程序更具动态性:

  • 网络位置
  • 自动扩展
  • 故障
  • 升级

image.png

什么是服务发现

关键组件: 服务注册表

实现服务发现的方式:

  • 服务及其客户直接与服务注册表交互
  • 通过部署基础设施来处理服务发现

应用层服务发现模式

image.png

image.png

image.png

好处:

  • 多平台部署
    • 同时适用于遗留环境和 Kubernetes

弊端:

  • 为使用的每种编程语言提供服务发现库
  • 开发者负责设计和管理服务注册表

平台层服务发现模式

服务注册, 服务发现, 请求路由完全有部署平台处理.

image.png

image.png

好处:

  • 服务和客户端都不包含任何服务发现代码

弊端:

仅限于支持使用该平台部署的服务