聊一下分布式与微服务

文章目录

  • 一、分布式
  • 二、微服务(Spring Boot)
    • 2.1 自动配置与起步依赖
      • 自动配置
      • 起步依赖
    • 2.2 启动流程
    • 2.3 配置加载机制
    • 2.4 集成Spring MVC
      • Spring MVC
      • RESTful API
    • 2.5 集成Spring Data JPA与Mybatis整合
      • Spring Data JPA
      • Mybatis
    • 2.6 安全与监控
      • Spring Security
      • Spring Boot Actuator
  • 三、微服务(Spring Cloud)
      • 3.1 服务注册与发现
      • 3.2 配置中心
      • 3.3 断路器
      • 3.4 网关


一、分布式

分布式系统是由多个独立的计算机通过网络连接在一起,协同完成一个共同的任务。它具有以下特点和优势:

  • 1 高可靠性:由于系统由多个节点组成,即使某个节点出现故障,整个系统仍可以继续运行。例如,在一个分布式存储系统中,如果一个存储节点发生故障,数据可以从其他正常的节点中恢复,确保数据的可用性。
  • 2 可扩展性:可以通过添加更多的节点来轻松扩展系统的性能和容量。比如,当一个电商平台的用户量和交易量不断增长时,可以增加服务器节点来处理更多的请求,而无需对整个系统进行大规模的重构。
  • 3 资源共享:分布式系统可以实现资源的共享,提高资源利用率。例如,多个计算任务可以共享同一组服务器资源,根据任务的优先级和资源需求进行动态分配。

在分布式系统的设计和实现中,需要考虑以下关键问题:

  • 1 数据一致性与分布式事务:在分布式环境下,确保多个节点上的数据一致性是一个挑战。常见的解决方案包括分布式事务、最终一致性等。例如,在一个分布式数据库系统中,需要采用合适的一致性协议来保证不同节点上的数据在更新时的一致性。
  • 2 通信机制:分布式系统中的节点之间需要进行高效的通信。常见的通信方式包括远程过程调用(RPC)、消息队列等。例如,使用消息队列可以实现异步通信,提高系统的吞吐量和可靠性。
  • 3 负载均衡:为了充分利用系统资源,需要将请求均匀地分配到各个节点上。负载均衡算法可以根据节点的性能、负载情况等因素进行动态调整。例如,在一个分布式 Web 服务中,可以使用硬件负载均衡器或软件负载均衡算法来分配用户请求。

二、微服务(Spring Boot)

  • 定义: 微服务架构是一种将单个应用程序开发为一组小型服务的架构风格。每个微服务都可以独立部署,独立扩展,并拥有自己独立的业务逻辑和数据存储。

2.1 自动配置与起步依赖

Spring Boot通过自动配置(Auto-configuration)和起步依赖(Starters)极大地简化了Spring应用的搭建和配置过程。

自动配置

Spring Boot的自动配置机制能够在项目启动时自动检测并配置项目所需的各种组件。这得益于Spring Boot的@EnableAutoConfiguration或@SpringBootApplication注解,它们会告诉Spring Boot基于添加的jar依赖自动配置Spring应用。Spring Boot会查看类路径下的jar包和配置文件,自动配置Spring容器中的Bean。开发者可以通过添加或排除特定的自动配置类来微调自动配置过程。

起步依赖

起步依赖本质上是一组Maven或Gradle的依赖描述符,它们包含了构建Spring Boot应用所需的所有基本依赖。这些依赖是预先配置好的,确保了依赖之间的兼容性和正确性。例如,spring-boot-starter-web包含了Spring MVC、Tomcat以及Jackson等依赖,用于开发Web应用。使用起步依赖可以极大地简化项目的依赖管理,开发者只需在项目的pom.xml或build.gradle文件中添加相应的起步依赖即可。

2.2 启动流程

2.3 配置加载机制

2.4 集成Spring MVC

Spring MVC

Spring MVC是Spring框架提供的一个用于构建Web应用的模块。它采用模型-视图-控制器(MVC)设计模式,将Web应用的输入、处理和输出分离。在Spring Boot中,Spring MVC的配置被进一步简化,开发者只需添加spring-boot-starter-web起步依赖即可使用Spring MVC的所有功能。

RESTful API

在Spring Boot中,通过@RestController和@RequestMapping等注解可以方便地创建RESTful API。@RestController注解是@Controller和@ResponseBody的组合,表示该类中的所有方法都返回JSON或XML等格式的数据,而不是视图。@RequestMapping注解用于将HTTP请求映射到相应的处理函数上,支持GET、POST、PUT、DELETE等HTTP方法,是构建RESTful API的关键。

2.5 集成Spring Data JPA与Mybatis整合

Spring Data JPA

Spring Data JPA是Spring Data项目的一部分,它通过提供一套基于JPA(Java Persistence API)的抽象层,简化了数据访问层的开发。Spring Data JPA提供了强大的查询构造器、分页和排序功能,并且可以与Spring的声明式事务管理无缝集成。但是,Spring Data JPA的灵活性相对较弱,对于复杂的SQL查询和性能调优可能需要额外的努力。

Mybatis

Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。Mybatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。Mybatis使用XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,简单的Java对象)映射成数据库中的记录。Mybatis的灵活性很高,可以编写复杂的SQL语句,并且易于维护和调试。

在Spring Boot项目中整合Mybatis进行数据库操作,通常需要在项目的pom.xml文件中添加mybatis-spring-boot-starter依赖。然后,在application.yml或application.properties文件中配置数据源和Mybatis的相关属性。接下来,创建Mapper接口和对应的XML映射文件或注解SQL语句,并在服务层调用Mapper接口进行数据操作。

2.6 安全与监控

Spring Security

Spring Security是Spring Boot的底层安全模块默认的技术选型,用于提供全面的安全解决方案。它支持认证(Authentication)和授权(Authorization)等安全控制。在Spring Boot项目中,只需添加spring-boot-starter-security起步依赖,使用@EnableWebSecurity注解开启 Spring Security,并通过实现WebSecurityConfigurerAdapter类来进行安全配置,即可实现强大的安全管理功能。

Spring Boot Actuator

Spring Boot Actuator是Spring Boot的一个子项目,用于提供准生产环境下的应用监控和管理功能。通过Actuator,可以轻松地查看应用的健康状态、环境属性、配置属性、日志信息等。在Spring Boot项目中,只需添加spring-boot-starter-actuator起步依赖,并配置相应的端点(Endpoints),即可通过HTTP、JMX或SSH协议进行监控和管理。例如,可以通过/actuator/health端点查看应用的健康状态,/actuator/metrics端点获取应用的性能指标

三、微服务(Spring Cloud)

Spring Cloud 是一个基于 Spring Boot 的微服务开发框架,它提供了一系列的工具和组件,帮助开发者快速构建分布式、弹性和可扩展的微服务架构。

3.1 服务注册与发现

Spring Cloud 中的 Eureka 或 Consul 等组件可以实现服务的自动注册和发现。服务提供者在启动时将自己的信息注册到服务注册中心,服务消费者可以从注册中心获取可用的服务列表,并通过负载均衡机制选择一个服务进行调用。这样可以提高系统的可维护性和灵活性,当服务提供者发生变化时,服务消费者可以自动感知并调整调用策略。

3.2 配置中心

Spring Cloud Config 可以实现集中式的配置管理。开发者可以将应用的配置信息存储在一个中央仓库中,各个服务可以从配置中心获取自己的配置信息。这样可以方便地进行配置的更新和管理,避免了在每个服务中手动修改配置文件的繁琐过程。

3.3 断路器

Spring Cloud Hystrix 提供了断路器模式的实现。当一个服务出现故障时,断路器会自动切断对该服务的调用,避免连锁反应导致整个系统崩溃。同时,断路器还可以提供降级策略,当服务不可用时,返回一个预设的默认值或执行一个备用的逻辑。

3.4 网关

Spring Cloud Gateway 可以作为系统的统一入口,实现请求的路由、负载均衡, 对外部请求进行统一的认证、授权和监控等功能, 提高系统的安全性和可管理性。

这些组件可以帮助开发者快速构建微服务应用,并实现服务的注册与发现、配置管理、容错处理、负载均衡等功能。

你可能感兴趣的:(分布式,微服务,spring,cloud)