微服务常用的模式语言:统一交流术语

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: 模式语言提供了讨论问题的交流术语,它明确了特定场景、特定问题的解决方案和延伸性思考。模式语言主要目的是帮助开发者解决在设计和编程中遇到的共同的问题,即清晰的问题陈述、体现问题的解决方案以及推动解决方案的力量(Force)的清晰表述。微服务架构作为一个现在流行的服务架构,也有一套属于自己的模式。这篇文章是微服务架构相关模式语言的一个提纲。Chris Richardson 从不同的角度,对相关的模式进行了分类。可以点击链接查看每个模式的详细描述。下图通过虚线框细分了不同的微服务模式。

模式语言提供了讨论问题的交流术语,它明确了特定场景、特定问题的解决方案和延伸性思考。模式语言主要目的是帮助开发者解决在设计和编程中遇到的共同的问题,即清晰的问题陈述、体现问题的解决方案以及推动解决方案的力量(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 片段来构建前端输出的页面内容
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
4月前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
4月前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
4月前
|
Go 数据处理 API
Go语言在微服务架构中的应用与优势
本文摘要采用问答形式,以期提供更直接的信息获取方式。 Q1: 为什么选择Go语言进行微服务开发? A1: Go语言的并发模型、简洁的语法和高效的编译速度使其成为微服务架构的理想选择。 Q2: Go语言在微服务架构中有哪些优势? A2: 主要优势包括高性能、高并发处理能力、简洁的代码和强大的标准库。 Q3: 文章将如何展示Go语言在微服务中的应用? A3: 通过对比其他语言和展示Go语言在实际项目中的应用案例,来说明其在微服务架构中的优势。
|
4月前
|
JavaScript Java Go
探索Go语言在微服务架构中的优势
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出。本文将深入探讨Go语言在构建微服务时的性能优势,包括其在内存管理、网络编程、并发模型以及工具链支持方面的特点。通过对比其他流行语言,我们将揭示Go语言如何成为微服务架构中的一股清流。
172 53
|
4月前
|
存储 缓存 监控
探索微服务架构中的API网关模式
探索微服务架构中的API网关模式
68 2
|
4月前
|
缓存 监控 API
探索微服务架构中的API网关模式
随着微服务架构的兴起,API网关成为管理和服务间交互的关键组件。本文通过在线零售公司的案例,探讨了API网关在路由管理、认证授权、限流缓存、日志监控和协议转换等方面的优势,并详细介绍了使用Kong实现API网关的具体步骤。
73 3
|
5月前
|
Cloud Native Go API
Go语言在微服务架构中的创新应用与实践
本文深入探讨了Go语言在构建高效、可扩展的微服务架构中的应用。Go语言以其轻量级协程(goroutine)和强大的并发处理能力,成为微服务开发的首选语言之一。通过实际案例分析,本文展示了如何利用Go语言的特性优化微服务的设计与实现,提高系统的响应速度和稳定性。文章还讨论了Go语言在微服务生态中的角色,以及面临的挑战和未来发展趋势。
|
5月前
|
运维 Go 开发者
Go语言在微服务架构中的应用与优势
本文深入探讨了Go语言在构建微服务架构中的独特优势和实际应用。通过分析Go语言的核心特性,如简洁的语法、高效的并发处理能力以及强大的标准库支持,我们揭示了为何Go成为开发高性能微服务的首选语言。文章还详细介绍了Go语言在微服务架构中的几个关键应用场景,包括服务间通信、容器化部署和自动化运维等,旨在为读者提供实用的技术指导和启发。
|
5月前
|
负载均衡 Go API
探索Go语言在微服务架构中的应用与优势
在这篇技术性文章中,我们将深入探讨Go语言(又称为Golang)在构建微服务架构时的独特优势。文章将通过对比分析Go语言与其他主流编程语言,展示Go在并发处理、性能优化、以及开发效率上的优势。同时,我们将通过一个实际的微服务案例,详细说明如何利用Go语言构建高效、可扩展的微服务系统。
|
5月前
|
消息中间件 监控 Go
Go语言在微服务架构中的优势与实践
【10月更文挑战第10天】Go语言在微服务架构中的优势与实践