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. 演进式设计

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

详细讲解

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

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

相关推荐
这周也會开心1 分钟前
云服务器安装JDK、Tomcat、MySQL
java·服务器·tomcat
hrrrrb1 小时前
【Spring Security】Spring Security 概念
java·数据库·spring
小信丶1 小时前
Spring 中解决 “Could not autowire. There is more than one bean of type“ 错误
java·spring
翰林小院2 小时前
【RabbitMQ】 RabbitMQ Overview
分布式·rabbitmq
周杰伦_Jay2 小时前
【Java虚拟机(JVM)全面解析】从原理到面试实战、JVM故障处理、类加载、内存区域、垃圾回收
java·jvm
摇滚侠3 小时前
Spring Boot 3零基础教程,IOC容器中组件的注册,笔记08
spring boot·笔记·后端
蓁蓁啊3 小时前
GIT使用SSH 多账户配置
运维·git·ssh
程序员小凯5 小时前
Spring Boot测试框架详解
java·spring boot·后端
程序猿小三5 小时前
Linux下基于关键词文件搜索
linux·运维·服务器
豐儀麟阁贵6 小时前
基本数据类型
java·算法