英文原文出自:https://www.nginx.com/blog/introduction-to-microservices/
笔记首发于个人语雀,有空来帮我点个稻谷呀。html
一般有两种调用方式java
API网关不能够由于下游的失败而block住,它要根据场景来决定如何处理错误。node
若是你按照一直等待去设计,那么颇有可能会消耗掉你全部的线程,致使产品详情服务完全挂掉linux
下面有4条由Netflix推荐的部分失败错误处理策略。nginx
异步、基于消息的IPC机制git
用消息机制的优势:github
用消息机制的缺点:web
同步、请求/响应型的IPCdocker
基于HTTP方式的协议(Rest)的好处:数据库
基于HTTP方式的协议(Rest)的坏处:
Thrift
消息格式
优势:
概念详解
其余的服务注册中心们还有
自注册模式
三方注册模式
ACID原则
你可使用事件来实现跨越多个服务的事务,这样的一个事务,包括的许多步骤,每一个步骤包括一个微服务更新本身的业务逻辑entity,而且发出一个事件通知下一些微服务。来看下面这个流程:
- 这里面须要假设 - 每一个服务自动地更新数据库,而且发布事件 - 消息代理必须保证事件至少都被交付了一次
【解决查询问题】你还可使用事件来维护一个额外"物料化视图",这个视图包含的预先join好的,来自多个微服务的数据。例如能够专门有一个“客户订单视图”服务,来专门订阅相关事件(客户服务产生的事件、订单服务产生的事件等),而后更新这个视图。
事件驱动架构的优势
事件驱动架构的缺点
【背景】在事件驱动架构里,你还会遇到一个原子性问题
使用本地事务完成发送事件
借助本地事务,其实就是你要一个本服务的事件表,它的做用相似消息队列:
挖掘数据库事务日志
使用数据溯源
优点:
这种模式还有不少变种,例如
每个服务实例是一个或一组进程
在同一个进程或进程组运行多个服务实例
优点
劣势
每一个虚拟机一个服务实例
优点
劣势
每一个容器一个服务实例模式
优点
劣势
你有这么些方法能够调用一个函数
劣势
这个策略主要思路是,帮你分离展现层和业务逻辑层以及数据访问(DAO)层,从而作到让原来的monolithic应用缩小一些。一般一个典型的企业级应用有这些组件层:
有一种常见的作法,你能够把你的应用按照下图,拆分红两个子应用:
策略优点
转换成微服务的优先级
如何抽取一个模块
在上面的例子中,模块Z是要被抽象出来的模块。它的组件被模块X和模块Y使用了,因此