26、架构-微服务的九个核心特征

1. 围绕业务能力构建

定义:微服务应该根据业务功能划分,而不是根据技术层次或模块划分。

详细讲解

  • 业务能力:每个微服务应该专注于完成一个具体的业务功能,例如用户管理、订单处理、支付处理等。这样,每个服务都有明确的职责,减少了不同服务之间的耦合。
  • 组织结构:根据康威定律,系统的架构趋同于组织的沟通结构。将开发团队按业务能力划分,有助于实现微服务架构的目标。
  • 例子:在电商系统中,可以将系统划分为用户服务、商品服务、订单服务、支付服务等,每个服务分别负责一个完整的业务功能。
2. 产品而非项目

定义:微服务应被视为长期运营的产品,而不是一次性交付的项目。

详细讲解

  • 长期运营:每个微服务都是一个独立的产品,需要持续开发、维护和运营。这样可以保证每个服务的持续改进和优化。
  • 独立生命周期:每个微服务有自己的开发、测试、部署和运维周期,可以独立进行更新和迭代。
  • 例子:在开发一个支付服务时,不仅需要完成基本的支付功能,还需要持续监控、优化性能、修复漏洞和增加新功能。
3. 强终端弱管道

定义:服务之间的通信应尽量简单,复杂的逻辑应由服务端点处理。

详细讲解

  • 强终端:每个微服务应该独立处理复杂的业务逻辑,避免将业务逻辑分散到多个服务中。
  • 弱管道:服务之间的通信应该尽量简单,通常通过轻量级协议(如HTTP/REST、gRPC)进行,不应依赖复杂的中间件或企业服务总线(ESB)。
  • 例子:订单服务直接与支付服务通信,传递订单信息和支付请求,而不通过复杂的中间件进行处理。
4. 独立部署

定义:每个微服务应能够独立部署和升级,不需要依赖其他服务的部署。

详细讲解

  • 独立部署:每个微服务可以单独部署,而不影响其他服务。这提高了系统的灵活性,减少了部署的复杂性和风险。
  • 持续交付:通过持续集成和持续交付(CI/CD)工具,实现快速、频繁的部署和更新。
  • 例子:当支付服务需要更新时,只需重新部署支付服务,而不需要重新部署整个系统。
5. 去中心化治理

定义:采用去中心化的技术治理模式,允许不同服务使用不同的技术栈。

详细讲解

  • 技术多样性:不同的微服务可以使用最适合其功能的技术栈,例如某个服务使用Java开发,另一个服务使用Node.js开发。
  • 自治团队:每个团队可以根据具体需求选择技术栈和工具,增加了技术选择的灵活性。
  • 例子:在一个电商系统中,搜索服务使用Elasticsearch,用户管理服务使用关系数据库,而推荐服务使用NoSQL数据库。
6. 去中心化数据管理

定义:每个微服务应拥有自己的数据库,避免共享数据库带来的耦合问题。

详细讲解

  • 独立数据库:每个微服务管理自己的数据存储,确保数据隔离,减少数据耦合。
  • 数据同步:服务之间通过API进行数据同步,而不是直接访问其他服务的数据库。
  • 例子:用户服务有自己的用户数据库,订单服务有自己的订单数据库,两个服务通过API接口共享必要的数据。
7. 自动化基础设施

定义:采用自动化的基础设施管理手段,如CI/CD工具,实现持续集成和交付。

详细讲解

  • 自动化部署:使用工具如Jenkins、GitLab CI/CD、CircleCI等,实现代码的自动构建、测试和部署。
  • 基础设施即代码(IaC):使用工具如Terraform、Ansible等管理和配置基础设施,实现基础设施的自动化和版本控制。
  • 例子:每次代码提交后,自动触发构建、测试和部署流程,将最新版本的服务部署到生产环境中。
8. 容错性设计

定义:接受服务会出错的现实,通过设计实现自动故障检测和恢复。

详细讲解

  • 容错机制:设计和实现自动重试、断路器、熔断等机制,确保服务在出现故障时能够自动恢复。
  • 故障隔离:通过隔离机制,确保一个服务的故障不会影响到其他服务的正常运行。
  • 例子:订单服务调用支付服务时,设置重试策略和断路器,如果支付服务不可用,可以快速返回错误并尝试使用备用服务。
9. 演进式设计

定义:服务应能够随业务需求变化而演进,而不是一次性设计完美。

详细讲解

  • 渐进改进:采用迭代式开发方法,不断改进和优化服务,随着业务需求的变化进行调整。
  • 灵活应对变化:通过微服务的独立性和灵活性,快速响应业务需求的变化,进行必要的重构和优化。
  • 例子:最初的订单服务只支持基本的订单处理功能,随着业务的发展,逐步增加订单跟踪、订单取消等功能。
总结

微服务架构的九个核心特征为系统的灵活性、独立性和可扩展性提供了强有力的支持。通过围绕业务能力构建、独立部署、去中心化治理和数据管理、自动化基础设施、容错性设计和演进式设计,微服务架构能够有效应对复杂分布式系统的挑战,提升系统的整体性能和维护效率​​

相关推荐
2019一路前行5 分钟前
本地Windows电脑 连接 Windows 服务器
运维·服务器
翠花也老了5 分钟前
linux 中 vi 和 less 命令(超全建议收藏)
linux·运维·less·vi
_Rookie._5 分钟前
java 单例模式
java·开发语言·单例模式
hummhumm20 分钟前
数据结构第08小节:双端队列
java·数据结构·spring boot·spring·java-ee·maven·intellij-idea
纸月28 分钟前
短信服务(二):实现某短信服务商崩溃后自动切换并重试
后端·go
Li&ShuaiShuai29 分钟前
Linux系统编程:信号
linux·运维·服务器·c++·信号
不吃饭的猪36 分钟前
【无标题】
java·开发语言·docker
六月的雨__36 分钟前
二手物品交易小程序的设计
java·sql·学习·小程序
是乐乐啊呀37 分钟前
docker
运维·docker·容器