这是一本关于微服务架构设计方面的书,这是本人阅读的学习笔记。首先对一些符号作些说明:数据库
()为补充,通常是书本里的内容;
[]符号为笔者笔注;编程
微服务架构将应用程序构建为一组服务,这些服务必须常常协做才能处理各类外部请求。而服务的实例一般是在多台机器上运行的进程,因此它们必须使用进程间通讯进行交互。api
当前有多种进程间通讯机制,比较流行的是REST(使用JSON)。选择合适的进程间通讯机制是一个重要的架构决策,它影响应用程序的可用性。浏览器
进程间通讯技术有:基于同步请求/响应、异步的基于消息的通讯机制等。缓存
MAJOR.MINOR.PATCH
;消息格式会影响进程间通讯的效率、API的可用性和可演化新。使用跨语言的消息格式尤其重要;服务器
指客户端使用同步的远程过程调用协议(如REST)来调用服务。网络
图解:客户端业务逻辑调用代理接口,这个接口由远程过程调用代理适配器类实现。远程过程调用代理向服务器发送请求,该请求由远程过程调用服务器适配器类处理,该类经过接口调用服务的业务逻辑。而后它将恢复发送回远程过程调用代理,该代理将结果返回给客户端的业务逻辑。架构
REST是一种(老是)使用HTTP协议的进程间通讯机制。并发
特色:负载均衡
好处:
弊端:
gRPC是一个用于编写跨语言客户端和服务端的框架,是一种二进制协议。
特色:
好处:
弊端:
客户端和服务端是独立的进程,服务端极可能没法在有限的时间内对客户端的请求做出响应。
图解:当Order Service无响应时,OrderServiceProxy将无限期地阻塞,等待响应。会消耗时间、浪费线程等资源。最终API Gateway将资源消耗,没法处理请求,整个API不可用。
解决方法是:
服务及其客户直接与服务注册表交互;
经过部署基础设施来处理服务发现;
使用消息机制时,服务之间的通讯采用异步交换消息的方式完成。
基于消息机制的应用程序一般采用消息代理;另外一种选择是使用无代理架构。
消息由消息头部和消息主体组成;
有如下两种类型的消息通道:
介绍下面四种交互方式的消息机制:
服务的异步API规范必须制定消息通道的名称、经过每一个通道交换的消息类型及其格式。
在无代理的架构中,服务能够直接交换信息。
好处:
弊端:
举例:
消息代理是全部消息的中介节点;发送方将消息写入消息代理,消息代理将消息发送给接收方。
好处:
弊端:
举例:
问题描述:在横向扩展多个消息接收方的实例的状况下,消息的顺序可能会错位。
解决方法:使用分片消息通道扩展接收方;
图解:
问题描述:客户端、网络或消息代理的故障可能致使消息被屡次传递。
有如下两种解决办法:
服务须要使用库来发送和接收消息。
有两种方法:
采用同步通讯机制处理请求,会对系统的可用性带来影响。所以,应尽量选择异步通讯机制来处理服务之间的调用。
使用异步交互模式:
复制数据: