当前位置: 代码网 > it编程>编程语言>Java > 微服务知识总结

微服务知识总结

2024年08月06日 Java 我要评论
截至2024年,Spring Cloud 经历了多次大的版本更新,始终致力于与Spring Boot的最新版本兼容,不断引入新的特性,优化现有组件,以适应云计算和微服务架构的快速发展需求。:随着云原生时代的到来,Spring Cloud 不断吸收和完善云环境下的新技术,例如增加了对 Kubernetes、Istio 等服务网格的支持,以及对国内流行的中间件产品(如阿里巴巴的Nacos、Sentinel等)的支持,形成Spring Cloud Alibaba等分支。配置服务应用名 改掉。

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、创建模块方法

·创建新模块

输入图片说明

输入图片说明

输入图片说明

更改 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心跳机制的主要特点和流程:

2、限流中间件-sentinel

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

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

3、消息队列-rocketmq

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

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

·rocketmq和rabbitmq一些区别:

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

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

4、远程调用中间件-dubbo

待补充

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

待补充

6、文件服务中间件-oss

待补充

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com