微服务模式语言
微服务模式语言
下面总结了微服务架构的模式语言
应用架构模式
您应该为应用选择哪种架构?
分解
如何将应用程序分解为服务?
数据管理
如何保持数据一致性并实现查询?
- 独立数据库 - 每个服务都有自己的私有数据库
- 共享数据库 - 服务间共享数据库
- Saga - 使用sagas(一系列本地事务)来维护服务之间的数据一致性
- API Composition - 通过调用拥有数据的服务并执行内存中连接来实现查询
- 命令查询职责分离 CQRS - 通过维护一个或多个可以有效查询的物化视图来实现查询
- 领域事件 -每当数据发生变化时发布事件
- 事件溯源 -将聚合作为一系列事件持久化
事务消息
如何将消息作为数据库事务的一部分发布?
测试
如何使测试更容易?
部署模式
如何部署应用程序的服务?
- 每个主机有多个服务实例 - 在单个主机上部署多个服务实例
- 每个主机的单个服务实例 - 在每个主机中部署单个服务实例
- 每个VM的单个服务实例 - 在每个VM中部署单个服务实例
- 每个Container的单个服务实例 - 在每个容器中部署单个服务实例
- 无服务器部署 - 使用无服务器部署平台部署服务
- 服务部署平台 - 使用提供服务抽象的高度自动化部署平台部署服务
需要关注的边界问题
如何处理服务实例与外界交互的问题?
通讯模式
风格
应该选择怎样的通信机制来进行服务间通讯和外部客户端通讯?
外部 API
如何处理外部客户端与服务之间的通讯?
- API 网关 -为每一类客户端提供一个访问服务的独特接口
- 服务前端的后端(BFF) - 为每一类客户端都提供一个独立的 API 网关
服务发现
一个基于 RPI 的客户端如何在网络上发现服务实例的位置?
- 客户端服务发现 - 客户端通过直接查询服务注册表获取服务实例的位置
- 服务器端服务发现 - 路由模块通过查询服务注册表获取服务实例的位置
- Service registry - 一个记录了服务实例位置的数据
- Self registration - 服务实例自己完成向服务注册表的注册
- 3rd party registration - 通过第三方模块来进行服务实例信息到服务注册表的注册过程
可靠性
如何避免由于服务故障或网络中断所引起的故障蔓延到其他服务?
- 断路器- 当远端服务返回的故障率超过一定的阀值时,客户端代理(比如 API 网关)对远程服务的调用将立刻返回失败的信息
安全
如何向服务实例传递访问客户端的身份信息?
- 访问令牌 - 服务实例通过访问令牌来安全地传递客户端的身份信息
可观测性
如何掌握一个运行中微服务应用的行为并进行有效的故障排错?
- 应用日志 - 聚合应用程序产生的日志文件
- 应用指标 -在代码中实现收集应用运营过程中各类指标的功能
- 审计日志 - 把用户行为记录在数据库中供日后核查
-
分布式追踪 - 在服务代码中针对每一个外部访问,都分配一个唯一的标识符,并在跨服务访问时传递这个标识符以供追踪分布式引发的问题。例如,当通过一个集中式服务处理外部请求时,记录请求本身的信息以及请求的开始和结束时间。
-
异常追踪 - 把所有服务程序代码触发的异常信息都汇聚到集中的异常追踪服务,并根据一定的逻辑对开发者或运维人员发出通知。.
-
健康检查 API- 一个监控服务可调用的 API,通常返回服务健康度信息,或对 ping 等心跳检查请求做出响应。
- Log deployments and changes
UI 模式
如何将源自多个服务的信息组织在一起生成 UI 界面或 Web 页面?
-
服务器端页面碎片化元素构建 - 在服务器端通过编排由多个业务或领域相关后端服务生成的 HTML 片段来构建前端输出的页面内容
-
客户端 UI 构建 - 在客户端通过编排由多个业务或领域相关 UI 组件生成的 HTML 片段来构建前端输出的页面内容
以上内容翻译自https://microservices.io/patterns/ 网站的微服务模式,编写的书籍链接地址为:
链接: https://pan.baidu.com/s/1lPTSjI4ePxLmTyKQ2zoS_A 提取码: 61j2
链接: https://pan.baidu.com/s/1ZoCEm81LY0ZFBmcSteSK4A 提取码: 6605
posted on 2019-08-03 09:24 yaofengspark 阅读(677) 评论(0) 编辑 收藏 举报