在微服务中使用代理

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 【6月更文挑战第16天】本文介绍了消息队列的原理,重点关注AMQP(5672端口)及其在分布式系统中的作用。消息代理执行错误检查、路由、分发任务,类比于邮政系统,确保可靠传输和系统性能提升,适应微服务架构的需求。

1 概念和基本结构

各种消息代理中,如RabbitMQ和Kafka,作为中间件实现同步(HTTP等)和异步(AMQP等)通信。所有协议共享FIFO队列、TCP基础和生产者-消费者模型,但细节各异,AMQP功能最全。

treeoflife6.png

标准端口 5672 高级消息队列协议或AMQP简称

user1  \                          /  service 3
        \                        /
user2 --- message broker(消息代理)  ---- service 1
        /                        \
user3  /                          \  service 2  

2 常用架构方案

消息同步方案

  • 同步:

              HTTP,如 REST、SOAP、RPC、gRPC 等
    
  • 异步:

         消息队列,如 AMQP、Kafka、MQTT 等
    

对消息可靠性要求较高时考虑 RabbitMQ,否则kafka

RabbitMQ
Apache Qpid
Apache Kafka
Apache ActiveMQ
Redis

Eclipse OpenMQ

JoramMQ

Eclipse Mosquitto

HiveMQ

Solace PubSub+

Google Cloud Pub/Sub

Amazon SQS

Amazon MQ

IBM MQ

Azure Event Hubs

Azure Service Bus

注意:Headers 表示具有任意数量键的 dictionary 或 map,而 attrs 表示一组有限的键值对。

  • 相似点:

所有协议都有队列的 FIFO 概念

所有协议都基于 TCP

所有协议都有生产者、消费者的概念

所有协议都有负载(payload)与正文(body)

  • 不同点:

AMQP 有不同的消息传递模型

Cloud-based 的消息队列具有死信队列

消息检索(routing key)方法不同

Headers 和 attrs 的支持有限

Redis、STOMP、MQTT 的功能最不丰富,而 AMQP 的功能最丰富

Cloud-based 的消息队列具有一些独特的配置以及相关 API。

3 消息代理的任务

这是分布式系统中的一种架构模式,其中消息代理是一种应用程序,它将来自源应用程序的单个协议消息转换为来自目标应用程序的协议消息,从而充当它们之间的中介。

此外,消息代理的任务包括:

    检查消息是否有错误;
    路由到特定的接收者;
    将消息拆分为几个较小的消息,然后汇总接收者的响应并将结果发送到源;
    将消息保存到数据库;
    调用网络服务;
    向订阅者分发消息;

但它到底是什么?

如果您简化这个庞大的描述,您可以将消息代理描绘成现实生活中的邮局(您已经多次遇到过):

发件人(您产品的用户)将包裹(任何数据)带到邮局并指定收件人(另一种服务)。

邮局员工接受包裹并将其放入存储区(将其放入待发送队列中)并发出包裹已成功接收寄件人的收据。

一段时间后,包裹被送到收件人(另一种服务),他不必在家接受包裹。

在这种情况下,他的包裹将在邮箱中等待,直到他收到为止。

4 小结

使用这种架构模式可以解决的最重要的问题之一是并行化任务并保证结果,解决如何转发的问题,即使在发送数据时接收服务不可用。

由于微服务架构在大多数现代项目中占主导地位,这种方法可以最大限度地提高整个系统的性能和弹性。

发件人将包裹交给 消息代理后,不再关心包裹如何送达,但他知道无论如何都会送达。

目录
相关文章
|
缓存 负载均衡 监控
【微服务】一文读懂网关概念+Nginx正反向代理+负载均衡+Spring Cloud Gateway(多栗子)
不知道什么是网关?正向代理?反向代理?负载均衡?负载均衡策略?Nginx和Gateway的区别?假如这些你都不知道,没关系,本文举了大量通俗易懂的例子来阐述了这些概念,保证小白也能看懂,并且最后还提到了gateway的一些配置。
5112 2
【微服务】一文读懂网关概念+Nginx正反向代理+负载均衡+Spring Cloud Gateway(多栗子)
|
弹性计算 监控 负载均衡
Spring Cloud 微服务网关代理 Zuul| 学习笔记
快速学习 Spring Cloud 微服务网关代理 Zuul。
Spring Cloud 微服务网关代理 Zuul| 学习笔记
|
监控 测试技术 应用服务中间件
如何用代理平台解决微服务的一些痛点
为什么要做代理平台 微服务架构越来越流行,在一个上百号人开发的项目中,使用微服务的方式,大量模块之间通过接口调用,随之也带来了许多问题: 接口不能及时提供造成阻塞:往往客户端需要等待后台接口进入测试阶段,才能开始进行开发。
1613 0
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
2月前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
3月前
|
Kubernetes Cloud Native Docker
云原生之旅:从容器到微服务的架构演变
【8月更文挑战第29天】在数字化时代的浪潮下,云原生技术以其灵活性、可扩展性和弹性管理成为企业数字化转型的关键。本文将通过浅显易懂的语言和生动的比喻,带领读者了解云原生的基本概念,探索容器化技术的奥秘,并深入微服务架构的世界。我们将一起见证代码如何转化为现实中的服务,实现快速迭代和高效部署。无论你是初学者还是有经验的开发者,这篇文章都会为你打开一扇通往云原生世界的大门。
|
3月前
|
负载均衡 应用服务中间件 持续交付
微服务架构下的Web服务器部署
【8月更文第28天】随着互联网应用的不断发展,传统的单体应用架构逐渐显露出其局限性,特别是在可扩展性和维护性方面。为了解决这些问题,微服务架构应运而生。微服务架构通过将应用程序分解成一系列小型、独立的服务来提高系统的灵活性和可维护性。本文将探讨如何在微服务架构中有效部署和管理Web服务器实例,并提供一些实际的代码示例。
105 0
|
30天前
|
Kubernetes 安全 微服务
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
48 8
|
1月前
|
消息中间件 负载均衡 Cloud Native
云原生之旅:从容器到微服务的架构演变
在数字化转型的风潮中,云原生技术以其灵活性、可扩展性和弹性而备受青睐。本文将通过一个虚拟的故事,讲述一个企业如何逐步拥抱云原生,实现从传统架构向容器化和微服务架构的转变,以及这一过程中遇到的挑战和解决方案。我们将以浅显易懂的方式,探讨云原生的核心概念,并通过实际代码示例,展示如何在云平台上部署和管理微服务。
|
2月前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
167 3