在微服务中使用代理

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
大数据开发治理平台 DataWorks,不限时长
简介: 【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的一些配置。
3030 2
【微服务】一文读懂网关概念+Nginx正反向代理+负载均衡+Spring Cloud Gateway(多栗子)
|
弹性计算 监控 负载均衡
Spring Cloud 微服务网关代理 Zuul| 学习笔记
快速学习 Spring Cloud 微服务网关代理 Zuul。
180 0
Spring Cloud 微服务网关代理 Zuul| 学习笔记
|
监控 测试技术 应用服务中间件
如何用代理平台解决微服务的一些痛点
为什么要做代理平台 微服务架构越来越流行,在一个上百号人开发的项目中,使用微服务的方式,大量模块之间通过接口调用,随之也带来了许多问题: 接口不能及时提供造成阻塞:往往客户端需要等待后台接口进入测试阶段,才能开始进行开发。
1572 0
|
2天前
|
运维 监控 Cloud Native
云原生时代的微服务架构演进
【6月更文挑战第19天】在数字化转型的浪潮下,云原生技术成为支撑现代应用架构的关键力量。本文将探讨微服务架构在云原生环境下的演进路径,分析其设计理念的转变,以及如何借助容器化、自动化和服务网格等技术实现高效的微服务治理。文章旨在为开发者和架构师提供实践指导,帮助他们构建更加灵活、可扩展的应用系统。
|
2天前
|
存储 消息中间件 运维
从单体到微服务:架构演进中的技术挑战与解决方案
在软件开发的过程中,系统架构的选择对项目的成功与否起到至关重要的作用。本文将深入探讨从单体架构向微服务架构演进过程中所遇到的技术挑战,并提供相应的解决方案。
17 0
|
1天前
|
监控 持续交付 数据安全/隐私保护
Python进行微服务架构的监控
【6月更文挑战第16天】
12 5
Python进行微服务架构的监控
|
1天前
|
监控 Cloud Native 持续交付
云原生时代的微服务架构演进
【6月更文挑战第21天】随着云计算技术的不断成熟,云原生概念逐渐成为IT行业的新宠。本文将聚焦于云原生环境下的微服务架构,探讨其在设计哲学、技术选型和部署策略上的演进。我们将通过分析微服务架构的核心原则及其与容器化、持续集成/持续部署(CI/CD)和DevOps实践的结合,来揭示如何构建一个高效、可靠且易于维护的分布式系统。
|
3天前
|
弹性计算 负载均衡 API
微服务架构下的API网关模式解析
在现代软件工程中,微服务架构因其灵活性和可维护性而受到青睐。本文将探讨API网关模式在微服务架构中的关键角色,分析其设计原则、实现方式及面临的挑战,并结合实际案例阐述如何有效整合API网关以提升系统整体性能和安全性。
|
2天前
|
设计模式 负载均衡 API
微服务架构中的服务发现与注册中心
【6月更文挑战第19天】在微服务架构的海洋中,服务发现和注册中心扮演着灯塔的角色,指引着服务间的通信。本文将深入探讨服务发现的机制、注册中心的实现,以及它们如何协同工作以维护一个健康、动态的服务网络。我们将通过比喻和实例,揭示这一复杂系统背后的简洁之美。
9 3
|
3天前
|
存储 运维 监控
云原生架构下的微服务治理实践
【6月更文挑战第19天】在数字化转型的浪潮中,云原生技术以其灵活、可扩展的特性成为企业IT架构升级的首选。本文深入探讨了在云原生架构下,如何有效实施微服务治理,包括服务发现、配置管理、服务监控和故障处理等方面的最佳实践。文章旨在为读者提供一套全面的微服务治理框架,帮助团队构建更加稳定、高效的分布式系统。
5 2