Spring微服务的引领介绍讲解

Java中单体架构与分布式架构的优缺点。

单体架构:

优点:

  1. 开发简单: 所有模块在一个项目中,开发和调试都比较方便。
  2. 部署简单: 只需要部署一个应用即可。
  3. 性能相对较好: 所有模块在同一进程内,通信开销小。
  4. 易于测试: 可以进行端到端的完整测试。

缺点:

  1. 可扩展性差: 随着系统变大,难以横向扩展。
  2. 可靠性较低: 一个模块的问题可能影响整个系统。
  3. 技术栈固定: 难以采用不同的技术栈。
  4. 开发效率降低: 随着系统变大,构建和部署时间增加。

分布式架构:

优点:

  1. 高可扩展性: 可以通过增加服务器来提高系统容量。
  2. 技术栈灵活: 不同服务可以使用不同的技术栈。
  3. 故障隔离: 单个服务故障不会影响整个系统。
  4. 开发效率高: 不同团队可以并行开发不同服务。

缺点:

  1. 系统复杂度高: 需要处理网络通信、服务发现等问题。
  2. 数据一致性难保证: 分布式事务处理复杂。
  3. 测试难度大: 需要模拟分布式环境进行测试。
  4. 运维成本高: 需要管理多个服务和服务器。

微服务的架构特征:

  1. 单一职责:
    • 每个微服务专注于一个特定的业务功能。
    • 这种方式使得服务更容易理解、开发和维护。
    • 有助于团队更快地交付价值,因为可以独立地开发和部署每个服务。
  2. 自治:
    • 团队独立:每个微服务可以由独立的团队负责,提高开发效率。
    • 技术独立:每个服务可以选择最适合其需求的技术栈。
    • 数据独立:每个服务管理自己的数据存储,避免数据耦合。
    • 独立部署:服务可以独立部署,不影响其他服务的运行。
  3. 面向服务:
    • 服务通过统一的接口(如RESTful API)进行通信。
    • 这种方式使得服务之间的集成更加简单和标准化。
    • 允许使用不同编程语言开发的服务之间进行无缝通信。
  4. 隔离性强:
    • 服务间的故障不会直接影响其他服务。
    • 可以实现更好的容错机制,如断路器模式。
    • 允许针对不同服务实施不同的扩展策略。

总结

  • 单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统
  • 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝
  • 微服务:一种良好的分布式架构方案
    ①优点:拆分粒度更小、服务更独立、耦合度更低
    ②缺点:架构非常复杂,运维、监控、部署难度提高
  • SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件

SpringCloud底层是依赖于SpringBoot的,并且有版本的兼容关系

Spring Cloud 版本 Spring Boot 版本
2022.0.x (也称为 Kilburn) 3.0.x
2021.0.x (也称为 Jubilee) 2.6.x, 2.7.x (从 2021.0.3 开始)
2020.0.x (也称为 Ilford) 2.4.x, 2.5.x
Hoxton 2.2.x, 2.3.x
Greenwich 2.1.x
Finchley 2.0.x
Edgware 1.5.x
Dalston 1.5.x

总结

单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统

分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝

微服务:一种良好的分布式架构方案

①优点:拆分粒度更小、服务更独立、耦合度更低

②缺点:架构非常复杂,运维、监控、部署难度提高

SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件

服务拆分和远程调用

服务拆分:

  1. 概念: 服务拆分是将一个大型单体应用拆分成多个小型、独立的服务的过程。
  2. 拆分原则:
    • 单一职责:每个服务只负责一个特定的业务功能。
    • 高内聚低耦合:服务内部功能紧密相关,服务之间尽量减少依赖。
    • 业务驱动:根据业务领域进行拆分,而不是技术层面。
    • 数据驱动:考虑数据的所有权和访问模式。
  3. 拆分方法:
    • 按业务能力拆分:例如订单服务、用户服务、支付服务等。
    • 按子域拆分:基于领域驱动设计(DDD)的概念。
    • 按资源拆分:例如将文件处理、邮件发送等作为独立服务。
  4. 拆分步骤:
    • 分析业务流程和数据流。
    • 识别边界上下文。
    • 定义服务接口。
    • 设计数据模型。
    • 实现服务。
  5. 注意事项:
    • 避免过度拆分,导致服务过于碎片化。
    • 考虑服务间的通信成本。
    • 注意数据一致性问题。

远程调用:

  1. 概念: 远程调用是指在分布式系统中,一个服务调用另一个服务的过程。
  2. 调用方式:
    • REST (HTTP/HTTPS):最常用的方式,使用HTTP方法如GET、POST等。
    • RPC (Remote Procedure Call):如gRPC,通常性能更好。
    • 消息队列:适用于异步通信场景。
  3. 实现技术:
    • Spring Cloud Feign:声明式REST客户端。
    • Spring Cloud OpenFeign:Feign的升级版。
    • RestTemplate:Spring提供的REST客户端。
    • WebClient:响应式编程的HTTP客户端。
  4. 调用流程:
    • 服务发现:找到目标服务的地址。
    • 负载均衡:选择一个具体的服务实例。
    • 请求发送:发送HTTP请求或RPC调用。
    • 结果处理:处理响应或异常。
  5. 关键考虑点:
    • 超时处理:设置合理的超时时间。
    • 重试机制:在失败时进行重试。
    • 熔断降级:防止级联失败。
    • 异步调用:提高系统响应性。
  6. 安全性:
    • 服务间认证:如OAuth2、JWT。
    • 传输加密:使用HTTPS。
    • 访问控制:实施细粒度的权限控制。
  7. 性能优化:
    • 使用连接池。
    • 实施缓存策略。
    • 考虑批量调用。
  8. 监控和追踪:
    • 实现分布式追踪:如使用Spring Cloud Sleuth和Zipkin。
    • 监控关键指标:如响应时间、错误率等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值