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

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

详细讲解

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

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

相关推荐
在肯德基吃麻辣烫3 分钟前
《Redis》缓存与分布式锁
redis·分布式·缓存
亲爱的非洲野猪6 分钟前
Kafka消息积压全面解决方案:从应急处理到系统优化
分布式·kafka
Seven9711 分钟前
了解GC吗?什么是GC?
java
雷渊12 分钟前
微服务中为什么要设计不同的服务和不同的数据对象,体现了一个什么样的设计思想?
后端
Edingbrugh.南空25 分钟前
Flink ClickHouse 连接器维表源码深度解析
java·clickhouse·flink
Charlene Fung36 分钟前
vs code远程自动登录服务器,无需手动输入密码的终极方案(windows版)
运维·服务器·vscode·ssh
碣石潇湘无限路38 分钟前
【部署与总结】从本地运行到公网服务器的全过程
运维·服务器
无奈何杨41 分钟前
CoolGuard风控中新增移动距离和移动速度指标
前端·后端
Java烘焙师43 分钟前
架构师必备:业务扩展模式选型
mysql·elasticsearch·架构·hbase·多维度查询
掘金-我是哪吒1 小时前
分布式微服务系统架构第157集:JavaPlus技术文档平台日更-Java多线程编程技巧
java·分布式·微服务·云原生·架构