微服务知识总结

1、概念总览

Spring Cloud 是一套基于 Spring Boot 实现的微服务工具集,它为开发者提供了在分布式系统和微服务架构中快速构建和部署服务的一站式解决方案。Spring Cloud 集成了众多成熟的第三方组件,并通过统一的 Spring Boot 风格进行了封装和抽象,极大简化了服务发现注册、配置管理、服务间调用、熔断器、路由、消息总线、分布式追踪、服务安全等诸多分布式系统基础设施的开发和运维工作。

发展历程:

  • 起源与发展:Spring Cloud 项目起源于2014年左右,由 Pivotal 团队主导开发,旨在简化基于Spring Boot的应用在云环境下的部署和管理。随着微服务架构的流行,Spring Cloud 在微服务领域的地位日益凸显,成为了事实上的微服务开发标准之一。

  • 早期版本:2016年初,Spring Cloud 发布了首个正式版本Angel.SR5,随后持续迭代,陆续推出了 Brixton、Camden、Dalston、Edgware、Finchley、Greenwich、Hoxton 等一系列版本,每个版本都会增加新的功能并升级底层依赖的组件版本。

  • Netflix 组件的变化:Spring Cloud 原始版本中大量采用了 Netflix OSS 组件(如 Eureka、Zuul、Hystrix 等),这些组件在当时是构建微服务架构的基石。然而,随着时间推移,部分Netflix组件停止更新或进入维护模式,Spring Cloud 对应的子项目也做出调整,转向了替代方案,如使用Spring Cloud Gateway替代Zuul,以及拥抱OpenFeign、Spring Cloud LoadBalancer等项目。

  • 新增与拓展:随着云原生时代的到来,Spring Cloud 不断吸收和完善云环境下的新技术,例如增加了对 Kubernetes、Istio 等服务网格的支持,以及对国内流行的中间件产品(如阿里巴巴的Nacos、Sentinel等)的支持,形成Spring Cloud Alibaba等分支。

  • 持续演化:截至2024年,Spring Cloud 经历了多次大的版本更新,始终致力于与Spring Boot的最新版本兼容,不断引入新的特性,优化现有组件,以适应云计算和微服务架构的快速发展需求。同时,Spring Cloud也在探索与Serverless架构的结合,以满足未来的软件开发趋势。

2、创建模块方法

·创建新模块

找个配置好的 例如 ruoyi-system 直接copy一份

将 pom 名称改掉

输入图片说明

服务启动类 名称改掉

输入图片说明

application.yml 配置服务应用名 改掉

输入图片说明

nacos 新建一份新的 对应新模块名称的 配置文件

输入图片说明

更改 nacos 上的 ruoyi-gateway.yml 增加新服务路由
新服务访问路径 网关ip:端口/服务路径/controller路径/接口路径
例子: http://localhost:8080/system/user/list

输入图片说明

输入图片说明

注意事项:如果是两个不同包名的模块 需要修改如下配置

输入图片说明

输入图片说明

如果新服务需要使用 seata 分布式事务
需要在 nacos 上的 seata-server.properties 文件内增加服务组

输入图片说明

3、微服务各个模块负责功能(以ruoyi-cloud-plus说明):

1、ruoyi-api:提供远程调用接口,具体实现类需要在不同模块进行实现,例如ruoyi的system-api模块是在ruoyi-system模块下使用@DubboService注解进行实现,该远程调用接口是通过RPC协议进行远程调用,调用速度、稳定性比通过http调用的feign接口快速、稳定;

定义远程接口:

通过@dubboService调用远程服务

2、ruoyi-auth:提供认证功能包括令牌下发、令牌刷新、令牌注销、生成验证码以及相关的认证配置等功能;

3、ruoyi-common:ruoyi提供的通用方法模块,该模块包含系统的所有通用功能,在依赖关系上,该模块可以作为其它模块的依赖进行引用,具体包含:

ruoyi-common-alibaba-bom     // alibaba 依赖管理
 ruoyi-common-bom             // common 依赖管理
 ruoyi-common-core            // 核心功能模块
 ruoyi-common-dict            // 字典集成模块
 ruoyi-common-doc             // 文档集成模块
 ruoyi-common-dubbo           // dubbo集成模块
 ruoyi-common-elasticsearch   // ES集成模块
 ruoyi-common-encrypt         // 数据加解密模块
 ruoyi-common-excel           // excel集成模块
 ruoyi-common-idempotent      // 幂等功能模块
 ruoyi-common-job             // job定时任务集成模块
 ruoyi-common-json            // json集成模块
 ruoyi-common-loadbalancer    // 团队负载均衡集成模块
 ruoyi-common-log             // 日志集成模块
 ruoyi-common-logstash        // elk日志集成模块
 ruoyi-common-mail            // 邮件集成模块
 ruoyi-common-mybatis         // mybatis数据库相关集成模块
 ruoyi-common-oss             // oss相关集成模块
 ruoyi-common-prometheus      // prometheus监控
 ruoyi-common-redis           // redis集成模块
 ruoyi-common-satoken         // satoken集成模块
 ruoyi-common-seata           // seata分布式事务集成模块
 ruoyi-common-security        // 框架权限鉴权集成模块
 ruoyi-common-sensitive       // 脱敏功能模块
 ruoyi-common-sentinel        // sentinel集成模块
 ruoyi-common-skylog          // skywalking日志收集模块
 ruoyi-common-sms             // 短信集成模块
 ruoyi-common-social          // 社交三方功能模块
 ruoyi-common-tenant          // 租户功能模块
 ruoyi-common-translation     // 通用翻译功能
 ruoyi-common-web             // web服务集成模块
 ruoyi-common-websocket       // websocket服务集成模块

4、ruoyi-gateway:该模块提供了网关功能,它作为所有外部请求和服务内部微服务交互的统一入口点和出口点。在微服务架构中提供相当于大门的功能,隐藏了复杂的内部微服务结构和网络地址。客户端只需要与网关通信,而无需知道每个微服务的具体位置。同时项目需要的负载均衡、身份鉴权、安全防护等功能皆由网关实现;

5、ruoyi-modules:该模块可以作为业务具体实现的模块,所有新增的业务模块可以放在该目录下,同时ruoyi-system(用户模块)、ruoyi-gen(代码生成功能)、ruoyi-resource(资源管理)、ruoyi-job(定时任务功能)都在modules模块下;

4、全局过滤器的一些配置

1、全局异常处理:GlobalExceptionHandler,提供全局的异常处理,可以自定义异常信息,如数值转换异常(NumberFormatException)、sql异常(SqlHandleExpection)、以及处理API成批分配的JackConvertHandleExpection(反序列化异常)等错误信息均可以在此配置,避免线上环境报错时大片红色报错信息直接返回到浏览器的的尴尬;

2、全局鉴权处理AuthFilter:可以在此配置哪些请求接口需要鉴权,哪些可以直接放行,开发环境下如果不需要用户登录的情况下可以直接在此配置放行所有接口不进行鉴权,方便开发(建议该部分代码在git中设置为忽略);

5、谈谈中间件

1、注册中心中间件

Nacos 是一款阿里巴巴开源的、针对云端应用的动态服务发现、配置管理和服务管理平台。它旨在帮助用户更方便地构建、交付和管理云原生应用,尤其是微服务架构中的服务治理和服务配置问题。Nacos 主要提供了以下几个核心功能:

  1. 服务注册与发现

    • 服务提供方可以通过Nacos注册自身的服务实例,而服务消费方则可以通过Nacos发现和订阅目标服务实例,实现服务间的自动寻址和负载均衡。
    • 支持基于DNS和基于RPC的服务发现方式,并且提供了服务健康检查机制,确保仅将请求转发至健康的实例。
  2. 配置管理

    Nacos作为配置中心,可以集中管理所有环境的应用配置和服务配置,支持动态推送配置变更,使得应用程序无需重启即可获取最新的配置信息。提供版本管理和历史回滚功能,支持金丝雀发布(Canary Release)、配置灰度发布等高级场景。
  3. 动态DNS服务

    可以为服务分配动态域名,并根据服务的健康状况和权重策略动态解析出IP:PORT列表,便于实施更精细的流量控制和路由策略。
  4. 服务元数据管理

    支持服务级别的元数据管理,包括但不限于服务描述、生命周期管理、服务依赖关系、SLA指标、性能统计等。
  5. 运维控制台

    提供友好的Web控制台界面,方便用户查看和管理所有的服务、配置、集群状态、服务健康状态以及相关的运维操作。
  6. 扩展性与兼容性

    Nacos设计上具备良好的扩展性,可以很好地与各种主流的微服务框架(如Spring Cloud、Dubbo等)集成,同时支持跨平台部署,在Windows、Linux、MacOS等操作系统上运行。
  7. nacos心跳机制:

    Nacos 心跳机制是一种服务治理机制,主要用于确保服务实例与 Nacos 服务注册中心之间的连通性和服务状态的有效性。当服务实例启动后,它们会周期性地向 Nacos 注册中心发送心跳(Heartbeat)以表明自己的存活状态。以下是Nacos心跳机制的主要特点和流程:

  • 心跳发送

    • 服务实例启动后,默认每隔5秒钟向Nacos服务器发送一次心跳包,这个包通常包含服务实例的基本信息,如服务ID、实例ID、IP地址、端口号、元数据等。
    • 心跳间隔可以通过配置参数进行调整,以适应不同的应用场景和网络环境。
  • 心跳接收与处理

    • Nacos服务器接收到心跳包后,会检查该服务实例是否已经在注册列表中:
      • 如果服务实例不在列表中,则根据心跳包内容将其视为新服务实例并进行注册;
      • 如果服务实例在列表中,则更新其最后心跳时间,表明该实例处于活跃状态。
  • 健康检查与实例状态变更

    • 如果服务实例连续三次(默认15秒)没有发送心跳,则Nacos会将其标记为不健康状态;
    • 如果服务实例连续六次(默认30秒)没有发送心跳,Nacos将认为该服务实例已经下线,并从服务注册列表中移除,不再向调用者提供该实例的信息。
  • 服务类型与持久化实例

    • Nacos支持两种服务实例类型:临时实例(默认)和持久化实例(永久实例)
    • 临时实例在失去心跳联系一段时间后会被自动注销,而持久化实例即使在心跳丢失的情况下也不会从列表中删除,除非管理员手动删除或服务主动注销。

通过上述功能,Nacos成为构建云原生架构的重要基础设施之一,能够有效提升系统的稳定性和运维效率,简化微服务生态中的服务治理流程。

2、限流中间件-sentinel

Sentinel 是阿里巴巴开源的一款面向分布式服务治理的流量控制、熔断降级组件,它是微服务架构中的重要部分,致力于保障服务的高可用性和稳定性。Sentinel 主要提供了以下核心功能:

  1. 流量控制(Flow Control):通过对服务接口的QPS(每秒查询率)进行控制,防止服务因短时间内大量请求涌入而导致响应过慢或系统崩溃。

  2. 熔断降级(Circuit Breaker):在服务出现故障或者响应时间过长时,Sentinel 可以暂时拒绝服务调用,避免故障蔓延至整个系统,待服务恢复后再自动放行请求。

  3. 系统负载保护(System Load Protection):在系统整体压力过高时,Sentinel 可以根据机器的总体负载情况,进一步限制进入系统的流量,保护系统不受垮塌。

  4. 实时监控:Sentinel 提供了一套实时监控系统,可以实时查看服务流量、熔断状态、系统负载等健康状态信息。

  5. 灵活的规则配置:Sentinel 支持丰富的流量控制规则配置,如基于QPS、线程数、系统负载等多种维度进行控制,并支持精细化的控制粒度,如针对特定资源、特定来源的流量控制。

Sentinel 适用于微服务、云原生场景下的流量防护,与 Spring Cloud、Dubbo、gRPC 等主流框架深度整合,便于快速接入和使用。此外,Sentinel 还提供了控制台界面,方便运维人员可视化地管理和配置各种流控规则。

3、消息队列-RocketMQ

RocketMQ 是一款由阿里巴巴开源的消息中间件,它是一款高性能、高可靠、分布式的消息队列系统,适用于企业级互联网应用的异步解耦、削峰填谷和数据分发等场景。RocketMQ 具备以下关键特性:

  1. 分布式消息模型

    RocketMQ 支持发布/订阅(Pub/Sub)和点对点(Point-to-Point)两种消息模型,能够满足不同业务场景的需求。
  2. 高吞吐量和低延迟

    采用高性能的消息存储设计和分布式部署架构,RocketMQ 能够轻松应对大规模并发生产和消费,保证消息的高吞吐量和低延迟。
  3. 顺序消息处理

    支持消息的严格顺序投递,这对于需要顺序处理的金融交易、订单流水等业务至关重要。
  4. 分布式事务消息

    提供分布式事务消息服务,通过事务消息能够确保分布式事务的最终一致性。
  5. 海量消息堆积能力

    RocketMQ 具备强大的消息堆积能力,即使在生产速度远大于消费速度的情况下,也能保证系统稳定运行。
  6. 灵活的消息过滤

    支持丰富的消息标签和SQL92标准的消息查询过滤,方便消息的筛选和路由。
  7. 高可用与容灾

    支持主从复制、故障自动切换、多数据中心部署等高可用架构,确保消息服务的稳定和可靠。
  8. 水平扩展

    随着业务的增长,可以通过增加节点的方式来水平扩展服务能力。

RocketMQ 被广泛应用在电商、支付、物流、社交、游戏、广告等多个行业,是构建高性能、高可用分布式系统的重要基础设施。随着阿里巴巴将其贡献给 Apache 软件基金会,RocketMQ 成为了 Apache 的顶级项目,得到了全球范围内的广泛应用和社区支持。

·RocketMQ和RabbitMQ一些区别:

RocketMQ 和 RabbitMQ 都是非常流行的开源消息队列中间件,它们分别在不同的场景和设计理念下诞生,各有各的优势和适用场景。下面是对两者的主要特点和区别:

RocketMQ

  • 起源与生态:RocketMQ 是由阿里巴巴集团开发,并捐赠给 Apache 软件基金会,成为 Apache 的顶级项目,具有深厚的国内互联网背景和广泛的国内企业应用基础。

  • 设计原理:RocketMQ 基于主题(Topic)和队列(Queue)的模型,采用分布式消息队列架构,强调高吞吐量、低延迟和顺序消息处理能力,适合大规模分布式系统和大数据处理场景。

  • 性能与扩展性:RocketMQ 强调高并发场景下的高性能,能够处理大规模的消息洪峰,支持主从模式和多副本同步复制,具有优秀的消息堆积能力和处理海量消息的能力。

  • 事务消息:RocketMQ 提供了分布式事务消息处理机制,确保分布式事务的最终一致性。

  • 应用场景:适合对性能要求较高、需要处理大量消息、需要保证消息顺序性的场景,例如电商平台的订单处理、支付系统、日志收集等。

RabbitMQ

  • 起源与生态:RabbitMQ 是基于Erlang语言开发,遵循AMQP(Advanced Message Queuing Protocol)协议的消息中间件,拥有良好的跨平台支持和广泛的社区支持。

  • 设计原理:RabbitMQ 采用了经典的队列模型,支持多种交换器类型(Direct、Fanout、Topic、Headers),提供了丰富的路由策略和消息模式,更注重消息路由的灵活性和丰富的功能特性。

  • 可靠性与稳定性:RabbitMQ 提供了包括持久化、消息确认(acknowledgement)、死信队列、镜像队列等多种机制保证消息传输的可靠性,适合对消息丢失零容忍的场景。

  • 中间件生态:由于支持AMQP协议,RabbitMQ可以很容易地与其他遵循AMQP标准的系统集成,拥有众多的语言客户端支持,方便多语言环境下的开发。

  • 应用场景:适合对消息可靠性要求极高、需要灵活路由、对跨平台和多语言支持要求高的场景,例如企业级集成、微服务间的通信、事件驱动架构等。

总结来说,RocketMQ 更偏向于高并发、大数据量的处理,尤其是在中国互联网行业中应用广泛;而 RabbitMQ 则以其丰富的特性和对可靠性的高度追求,在国际范围内有着广泛的使用群体,尤其适合构建复杂的异步消息处理系统。值得一提的是RocketMQ经过无数次双11的验证,足以证明其强大的并发能力;

4、远程调用中间件-dubbo

待补充

5、分布式事务中间件-seata

待补充

6、文件服务中间件-oss

待补充

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值