微服务架构中的进程间通信
1、交互方式
1.1 一对一交互
每个客户端请求由一个服务实例处理
- 请求/响应:发起请求,等待响应。等待过程可能造成线程阻塞
- 异步请求/响应:客户端发请求,服务端异步响应请求,非阻塞。
- 单向通知:只发请求,不期望服务端响应
1.2 一对多交互
每个客户端请求由多个服务实例处理
- 发布/订阅:客户端发通知,被零个或多个感兴趣的服务订阅
- 发布/异步响应:客户端发通知,等待被感兴趣的服务发回响应
2、同步远程调用模式
2.1 REST API
REST 中的关键概念是资源,使用HTTP动词来操作资源,使用URL引用这些资源
GET:请求返回资源 GET/orders/{orderId}
POST:请求创建资源 POST/order
PUT:更新资源 PUT/orders/{orderId}
2.2 gRPC
gRPC使用Protocol Buffers作为消息格式,支持请求/响应方式,还支持流式RPC
2.3 同步通信的可靠性问题
- 网络超时策略
- 限制访问数量
- 断路器
2.4 服务发现策略
- 客户端发现策略:应用层服务发现,如Eureka
- 平台层服务发现:Docker和Kubernetes
3、异步通信模式
3.1 交互方式
-
无代理
image.png -
消息代理:Kafka、RabbitMQ
image.png
3.2 并发和消息顺序
- 消息分片:每个分片类似于一个通道
3.3 重复消息
- 幂等处理:幂等处理程序、跟踪并丢弃重复消息
3.4 事务性消息
-
使用数据库作为消息队列,与业务表在同一事务中保存
image.png
3.5 消除同步交互
- 使用异步交互模式
- 复制数据
网友评论