模式语言提供了探讨问题的交换术语,它明确了特定场景、特定问题的解决方案和延伸性思考。模式语言次要目标是帮忙开发者解决在设计和编程中遇到的独特的问题,即清晰的问题陈说、体现问题的解决方案以及推动解决方案的力量(Force)的清晰表述。
微服务架构作为一个当初风行的服务架构,也有一套属于本人的模式。这篇文章是微服务架构相干模式语言的一个提纲。Chris Richardson 从不同的角度,对相干的模式进行了分类。能够点击链接查看每个模式的详细描述。下图通过虚线框细分了不同的微服务模式。
微服务模式
外围模式(Application architecture patterns)
您为应用程序抉择哪一种架构?
- 单体架构(Monolithic architecture)采纳繁多部署单元的形式架构利用
- 微服务架构(Microservices architecture)– 采纳一组松耦合服务的形式架构利用
服务拆分(Decomposition)
如何把利用拆分为若干个服务?
- 依据业务能力拆分(Decompose by business capability)- 依据业务能力界定服务的范畴
- 依据畛域的子域拆分(Decompose by subdomain)- 依据畛域驱动设计中子域的概念界定服务的范畴
部署模式(Deployment patterns)
如何部署应用程序的服务?
- 单主机上部署服务的多个实例(Multiple service instances per host)– 把服务的多个实例部署在一台主机上
- 单主机上部署服务的单个实例(Single service instance per host)- 把服务的繁多实例部署在它独享的主机上
- 服务实例与虚拟机一一对应(Service instance per VM)- 把服务的繁多实例部署在它独享的虚拟机上
- 服务实例与容器一一对应(Service instance per Container)- 把服务的繁多实例部署在它独享的容器上
- 无服务器部署(Serverless deployment)- 应用无服务器部署平台部署服务实例
- 服务部署平台(Service deployment platform)– 应用提供服务形象能力的高度自动化部署平台部署服务实例
须要关注的边界问题(Cross cutting concerns)
如何解决服务实例与外界交互的问题?
- 微服务的基底(Microservice chassis)- 一个用于服务实例与外界交互和简化服务开发的框架
- 配置信息内部化(Externalized configuration)- 把相似数据库连贯、拜访密钥等配置信息内部化
通信模式(Communication patterns)
格调
应该抉择怎么的通信机制来进行服务间通信和内部客户端通信?
- 近程过程调用(Remote Procedure Invocation)- 应用基于 RPI 协定的服务间通信形式
- 音讯(Messaging)- 应用异步音讯进行服务间通信
- 畛域独用协定(Domain-specific protocol)– 应用特定畛域的通信协定(如 SIP,等)
内部 API
如何解决内部客户端与服务之间的通信?
- API 网关(API gateway)– 为每一类客户端提供一个拜访服务的独特接口
- 服务前端的后端(Backend for front-end)– 为每一类客户端都提供一个独立的 API 网关
服务发现
一个基于 RPI 的客户端如何在网络上发现服务实例的地位?
- 客户端服务发现(Client-side discovery)- 客户端通过间接查问服务注册表获取服务实例的地位
- 服务器端服务发现(Server-side discovery)- 路由模块通过查问服务注册表获取服务实例的地位
- 服务注册表(Service registry)- 一个记录了服务实例地位的数据
- 自注册(Self registration)- 服务实例本人实现向服务注册表的注册
- 第三方注册(3rd party registration)– 通过第三方模块来进行服务实例信息到服务注册表的注册过程
可靠性
如何防止因为服务故障或网络中断所引起的故障蔓延到其余服务?
- 断路器(Circuit Breaker)– 当远端服务返回的故障率超过肯定的阀值时,客户端代理(比方 API 网关)对近程服务的调用将立即返回失败的信息
数据管理(Data management)
如何实现数据一致性和查问?
- 独享数据库 - 每个服务都领有它公有的数据库
- 共享数据库(Shared database)- 服务之间共享同一个数据库
- 事件驱动架构(Event-driven architecture)– 应用事件来保护服务间的数据一致性
- 事件溯源(Event sourcing)– 以一连串事件的形式来长久化聚合
- 事务日志跟踪(Transaction log tailing)- 跟踪数据库的日志变更并由此对外公布音讯
- 数据库触发器(Database triggers)– 应用触发器来捕捉对数据的批改应用程序事件(Application events)– 应用程序从音讯队列获取事件并插入数据库中
- 命令查问职责拆散(CQRS)- 保护一个或者多个重要的数据视图以供高效率的查问
平安(Security)
如何向服务实例传递拜访客户端的身份信息?
- 拜访令牌(Access Token)– 服务实例通过拜访令牌来平安地传递客户端的身份信息
测试(Testing)
如何更便捷的测试?
- 服务组件测试(Service Component Test)– 一个测试套件,它应用它调用的任何服务的测试替身来独自测试服务
- 服务集成协定测试(Service Integration Contract Test – 由应用它的另一个服务的开发人员编写的服务的测试套件
可观测性(Observability)
如何把握一个运行中微服务利用的行为并进行无效的故障排查?
- 利用日志(Log aggregation)- 聚合应用程序产生的日志文件
- 利用指标(Application metrics)- 在代码中实现收集利用经营过程中各类指标的性能
- 审计日志(Audit logging)– 把用户行为记录在数据库中供日后核查
- 分布式追踪(Distributed tracing)– 在服务代码中针对每一个内部拜访,都调配一个惟一的标识符,并在跨服务拜访时传递这个标识符以供追踪分布式引发的问题。例如,当通过一个集中式服务解决内部申请时,记录申请自身的信息以及申请的开始和完结工夫。
- 异样追踪(Exception tracking)– 把所有服务程序代码触发的异样信息都汇聚到集中的异样追踪服务,并依据肯定的逻辑对开发者或运维人员发出通知。
- 健康检查 API(Health check API)– 一个监控服务可调用的 API,通常返回服务衰弱度信息,或对 ping 等心跳查看申请做出响应。
UI 模式(UI patterns)
如何将源自多个服务的信息组织在一起生成 UI 界面或 Web 页面?
- 服务器端页面碎片化元素构建(Server-side page fragment composition)– 在服务器端通过编排由多个业务或畛域相干后端服务生成的 HTML 片段来构建前端输入的页面内容
- 客户端 UI 构建(Client-side UI composition)– 在客户端通过编排由多个业务或畛域相干 UI 组件生成的 HTML 片段来构建前端输入的页面内容
关注我
本站所有文章和资源仅为集体工作和学习中的记录,局部观点有肯定主观性,若有不妥,欢送斧正。
欢送指出网站中有问题的中央,我会尽快修改,谢谢!
欢送转载谢谢!