Spring Cloud Alibaba-服务间通信-学习笔记

Spring Cloud Alibaba学习笔记

简介

Spring Cloud Alibaba 是一个分布式应用架构解决方案,它是基于 Spring Cloud 和阿里巴巴的一些组件构建的。而 Spring Cloud Alibaba 中包含了许多常用的中间件组件,下面是这些组件的用途和区别:

  1. Nacos: 用作服务注册与发现中心,包括服务的服务的注册、发现、配置等一系列的服务管理功能。与Consul/RabbitMQ/Zookeeper等功能类似,但更加轻量化,且提供了更加方便、易用的API。
  2. Sentinel: 用于熔断降级、限流请求等管理,防止底层服务层的不可控因素影响到了整个服务群体,是一个容错和健康监控的工具类。
  3. RocketMQ: 是一种分布式的、非阻塞式的消息队列服务,它主要解决异步处理和流量削峰的问题,是分布式异步消息通信的重要组件。
  4. Dubbo: 是一种高性能的服务框架,主要用于提供分布式应用中的各种RPC服务,特别是在高并发大数据处理中具有重要的作用。
  5. Seata: 是阿里巴巴开源的一种分布式事务解决方案,用于解决分布式事务的问题,保证了数据的一致性和事务的可靠性。
  6. Alibaba Cloud OSS: 是阿里云对象存储服务,用于存储不同类型的对象,包括文件、图片、视频等多种类型的数据。

服务间通信

seatra rockermq dubbo 的区别

Seata、RocketMQ和Dubbo都是一些用于服务间通信的中间件组件,但它们的主要作用和特点有所不同:

  1. Seata主要致力于解决业务应用中面临的分布式事务问题,能够保证数据的一致性和服务的可靠性。Seata依赖于底层数据存储,为整个分布式系统提供一个高效稳定的分布式的事务管理机制。
  2. RocketMQ是一种分布式消息服务,主要用于异步消息的传递和处理。RocketMQ具有高性能、高可用性、消息可靠性强等优点,可以在分布式环境下保证消息的及时处理和可靠性。
  3. Dubbo是一个高性能的服务框架,主要用于提供分布式应用中的各种RPC服务,因此采用的通信协议是基于TCP的。Dubbo的主要作用是提供分布式服务的注册、发现、负载均衡和容错等功能,主要解决的问题是分布式系统中的服务治理。

尽管这些中间件组件都被用于服务间通信,但是它们的定位和功能略有不同,可以根据实际应用场景选择相应的中间件来进行服务间通信。例如,如果应用领域中有大量的事务、需要长时间持续地交互、要求保证数据的一致性和可靠性,使用Seata是比较明智的;如果应用领域中有大量的消息处理需求、对消息的准确传递和处理有着较为严格的要求,使用RocketMQ是比较明智的;如果需要较高的性能、需要对集群的自动化管理、需要微服务系统中的服务治理等,使用Dubbo是比较明智的选择。

具体的使用场景和区别

Seata

Seata主要用于解决分布式业务场景中的事务问题,它可以提供类似于本地事务的方式来进行多个服务之间的事务处理,确保数据的一致性和服务的可靠性。建议在分布式事务处理方面使用Seata,例如金融、电商等需要依赖于大量事务处理的场景。

RocketMQ

RocketMQ主要用于异步消息的传递和处理,类似于消息中间件。它可以在分布式环境下保证消息的及时处理和可靠性,并且RocketMQ提供了多种消息传递模式,可以根据业务需求进行选择。建议在分布式异步消息处理方面使用RocketMQ,例如App推送、支付通知等需要异步消息处理的场景。

Dubbo

Dubbo是一种高性能的服务框架,主要用于提供分布式应用中的各种RPC服务。Dubbo提供了服务治理功能,例如服务的注册、发现、路由、负载均衡和容错等功能,可以提供高可用的分布式服务。建议在需要进行服务逻辑可拆分,或者存在很多交互的情况下使用Dubbo,例如电商网站会员、购物车等应用中需要RPC服务的场景。
综上所述,最终选择使用Seata、RocketMQ或Dubbo还是要根据具体的业务需求来进行决策。具体应用场景需要根据需求而定,比如需要强一致性,选择Seata;需要异步消息处理,选择RocketMQ;需要RPC服务和服务治理,选择Dubbo。当然,在实际应用中,也可以根据需要同时使用多种中间件组合来达到更好的效果。

技术选型

Spring Cloud Stream、RabbitMQ、RocketMQ、Seata 均为微服务的相关框架或工具,但每个工具的使用场景和特点不同,需要根据具体情况进行选择。下面是它们的区别和选择建议:

  1. Spring Cloud Stream:
    • Spring Cloud Stream 是 Spring Cloud 的一部分,它提供一种用于构建消息驱动型微服务的框架,可以让开发者不用关心细节,只需关心数据处理,将数据处理和消息转换解耦。
    • Spring Cloud Stream 可以使用多个消息中间件系统来传递消息,包括 RabbitMQ、Kafka、Apache RocketMQ 等等。
    • 使用 Spring Cloud Stream 可以方便的配置消息通道,同时支持云原生场景下的流式处理和事件驱动架构。
    • 建议在 Spring Cloud 环境下,或需要快速搭建消息通道的业务场景中使用 Spring Cloud Stream。
  2. RabbitMQ:
    • RabbitMQ 是一款开源的基于 AMQP(高级消息队列协议)的消息中间件,支持广泛的编程语言和运行环境。
    • RabbitMQ 提供了可靠的消息传递机制、灵活的路由策略、丰富的插件机制、高效的消息持久化等特点。
    • RabbitMQ 的使用比较简单,可以提供多种编程语言的客户端支持。
    • 建议在需要高性能和高可靠性的业务场景中使用 RabbitMQ。
  3. Apache RocketMQ:
    • Apache RocketMQ 是阿里巴巴开源的一款分布式消息中间件,具有高性能、高吞吐量、可靠性强等特点。
    • RocketMQ 延迟消息、事务消息、批量消息等特性较为突出。
    • RocketMQ 已经被广泛应用于阿里集团各大 BU 系统中,并且被大量企业作为可靠的消息中间件进行部署。
    • 建议在以阿里系产品为主要技术栈或希望使用开源的消息中间件中使用 RocketMQ。
  4. Seata:
    • Seata 是一款开源的分布式事务解决方案,提供高性能和高可靠性。
    • Seata 可以与 Spring Cloud、Dubbo、RocketMQ 等多个场景进行良好的兼容。
    • Seata 提供了全局事务管理、幂等性等机制,可以很好的保证分布式事务的数据一致性。
    • 建议在需要保证分布式事务一致性的业务场景中使用 Seata。

至于为什么没有使用 Spring Cloud Alibaba 自带的 RocketMQ 是因为,虽然 Spring Cloud Alibaba 对 RocketMQ 进行了深度集成,但是在使用过程中会有一定的限制。比如默认情况下只能使用集群模式,不能使用广播模式;配置也比较复杂,需要在多个配置文件中进行配置。因此,针对具体的业务场景和需求,选择合适的消息中间件或事务解决方案是比较重要的。

posted @ 2023-06-14 22:59  AJun816  阅读(124)  评论(0编辑  收藏  举报