微服务架构中的进程间通信
简介 在单体应用中,各模块之间的调用是通过编程语言级别的方法或者函数来实现的。而基于微服务的分布式应用是运行在多台机器上的;一般来说,每个服务实例都是一个进程。 因此,如下图所示,服务之间的交互必须通过进程间通信(IPC)来实现。 后面我们将会详细介绍 IPC 技术,现在我们先来看下设计相关的问题。 交付模式 当为某个服务选择 IPC 时,首先需要考虑服务之间的交互问题。客户端和服务器之间有很多的交互模式,我们可以从两个维度进行归类。第一个维度是一对一还是一对多: • 一对一:每个客户端请求有一个服务实例来响应。 • 一对多:每个客户端请求有多个服务实例来响应。 第二个维度是这些交互式是同步还是异步: • 同步模式:客户端请求需要服务端即时响应,甚至可能由于等待而阻塞。 • 异步模式:客户端请求不会阻塞进程,服务端的响应可以是非即时的。 下表显示了不同交互模式: 一对一的交互模式有以下几种方式: 请求/响应:一个客户端向服务器端发起请求,等待响应,客户端期望此响应即时到达。在一个基于线程的应用中,等待过程可能造成线程阻塞。 通知(也就是常说的单向请求):一个客户端请求发送到服务端,但是并不期望服务端响应。 请求/异步响应:客户端发送请求到服务端,服务端异步响应请求。客户端不会阻塞,而且被设计成默认响应不会立刻到达。 一对多的交互模式有以下几种方式: 发布/ 订阅模式