1. AWS Messaging Services
AWS Messaging服务使云中相似和不同的软件系统能够异步通信和交换信息。 这些软件系统可能不兼容且使用不同的语言,也可能在不同的平台上。 AWS消息传递服务具有高度可用性,高度可扩展性和高度可靠性。 AWS支持针对不同类型用例的多种消息传递服务。 在本文中,我们将讨论各种AWS消息服务,并根据应用程序需求选择合适的消息服务。
消息服务允许通常不兼容且在不同平台上以不同编程语言开发的不同软件系统进行通信和交换信息。
2. Amazon SQS(简单队列服务)
Amazon SQS是一种分布式队列Web服务,用于在软件系统之间异步交换消息。 SQS用于开发具有分离组件的大规模分布式系统,而无需担心创建和管理队列。 SQS有两种类型,即标准和先进先出。 FIFO队列维护生成和使用的消息的顺序,并提供一次精确的传递机制。 标准队列尝试保留订单,但很灵活,并且至少提供一次交货。 “标准队列”中的消息可以多次传递,“标准队列”提供高吞吐量。
随着请求数量的增长,Amazon SQS会水平扩展。 SQS中的消息是使用服务器端加密进行加密的,并且在队列中的生命周期内都是安全的。
如果您的应用程序需要更快的消息处理速度,但是不关心消息顺序或消息的重复发送,则“标准队列”是最佳选择。 为了确保有保证的订单并且只有一次交货,请使用FIFO队列。 当使用者接收并处理该消息时,该消息将保留在队列中,直到将其显式删除或消息保留时间到期为止。 Amazon SQS设置消息的可见性超时 (默认为30秒,最长为12小时),以防止其他使用者再次处理同一条消息。
在一对一消息传递,发送电子邮件,表单和文件处理的情况下,SQS最为有用。
2.1 SQS限制
- 邮件大小限制为256 KB
- 默认情况下,SQS中的邮件将在4天后删除,但是最多可以延长14天
- 在标准SQS中,消息可以一次传递
2.2 SQS最佳实践
- 根据处理消息所需的时间,将消息的可见性超时延长到处理和删除消息所需的最长时间。
- 如果您不知道从SQS处理消息需要花费多长时间,请为使用者流程创建心跳并相应地延长可见性超时。
- 长时间轮询有助于降低Amazon SQS成本。 在实施长轮询时,每个队列使用一个线程,而不是所有队列使用一个线程。 对所有队列使用一个线程可能会导致您的应用程序无法处理其他队列中可用的消息。
- 使用唯一消息ID可以防止使用者处理相同的消息。
3. Amazon SNS(简单通知服务)
Amazon SNS是一个完全托管的发布/订阅异步推送通知系统,消息生产者在其中发布消息,多个订阅者接收消息。 发布/订阅消息传递模型用于使应用程序分离,并提高应用程序的性能,可伸缩性和可靠性。 推送到SNS的消息将在多个可用性区域中保持不变,以防止丢失消息。 SNS向所有订阅者发送带有订阅URL的消息,订阅者需要确认订阅才能接收该消息。
SNS允许将消息发送到多个服务,包括SQS,Lambda,HTTP,电子邮件,SMS等。AmazonSNS可以与SQS结合使用,因此发布到SNS的消息将发送给每个SQS和每个用户SQS将收到该消息。
Amazon SNS提供了加密的主题,以保护您的消息免遭未经授权的匿名访问。 将消息发布到加密主题后,将立即使用AES-GCM算法和由密钥管理服务发布的客户主密钥对消息进行加密。 消息在传递到订阅端点时被解密。 在删除SNS主题之前,请确保首先删除该主题的所有订阅。 使用SNS,可以将消息从AWS发送到各种平台,例如iOS,Android,Java,Node Js,Python,.NET等SDK。
SNS最适合事件通知,将消息发布到多个订户,向每个SQS队列发送专用消息等用例。
3.1 SNS消息
推送到SNS主题的邮件将具有以下部分。
- MessageId –消息的唯一ID
- 时间戳–消息创建时间戳
- TopicArn –消息发布到的主题
- 类型–交付类型
- UnsubscribeUrl –取消订阅该主题的链接
- 消息–消息有效负载
- 主题–主题字段
- 签名–邮件的Base64编码签名
- 签名版本– SNS签名版本
3.2 SNS局限性
- 来自SNS的消息可能会多次传递
- 在订户失败的情况下,可以将消息传递配置的次数。
4. Amazon MQ
Amazon MQ是Apache ActiveMQ的托管消息传递服务。 AWS管理ActiveMQ的配置,设置,修补和维护。 可以使用标准API和协议(例如JMS,NMS,AMQP,STOMP,MQTT和WebSocket)轻松迁移现有应用程序并将其连接到Amazon MQ。
Amazon MQ提供了消息的高可用性和持久性。 消息生产者和使用者之间的Amazon MQ延迟非常少(单位为毫秒)。 放置在Amazon MQ中的消息始终在多个可用区之间冗余存储。 Amazon MQ支持分布式事务。 代理名称在一个AWS账户中应该是唯一的,每个代理的存储容量限制为200GB。
将消息放在Amazon MQ上时,可以触发Lambda函数。 在混合云环境中,可将本地数据中心中的ActiveMQ与云上的Amazon MQ集成在一起以交换消息。 请参阅此文档,以将Java应用程序与Amazon MQ连接以及创建消息生产者和使用者。
4.1 Amazon MQ的最佳实践
- Amazon MQ使用其安全管理的加密密钥对静态消息和传输中的消息进行加密。 强烈建议同时使用客户端加密。
- 要针对速度慢的使用者优化Amazon MQ,请将parallelStoreAndDispatchQueues属性设置为false 。
- 使用正确的代理实例类型以提高吞吐量
- 在多生产者和多消费者应用程序的情况下,为多个生产者按需创建大量连接可能效率很低。 使用连接池而不是使用PooledConnectionFactory类。 不要在消息使用者上使用PooledConnectionFactory 。
4.2配置连接池(来自AWS
// Create a connection factory.
final ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(wireLevelEndpoint);// Pass the username and password.
connectionFactory.setUserName(activeMqUsername);
connectionFactory.setPassword(activeMqPassword);// Create a pooled connection factory.
final PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory();
pooledConnectionFactory.setConnectionFactory(connectionFactory);
pooledConnectionFactory.setMaxConnections(10);// Establish a connection for the producer.
final Connection producerConnection = pooledConnectionFactory.createConnection();
producerConnection.start();
4.3 Amazon MQ限制
- 每个AWS账户的每种代理实例类型的代理数量限制为20
- 限制为每个代理的安全组数为5
- 每个经纪人的存储容量限制为200GB
5.亚马逊Kinesis
Amazon Kinesis是一种完全托管的Web服务,用于实时处理大数据。 Kinesis有助于收集,处理和分析实时流数据,以深入了解信息。 使用Kinesis,可以在数据到达并立即响应时对其进行分析。 使用Kinesis,可以分析视频,音频,应用程序日志,网站点击流和IoT遥测。 Amazon Kinesis具有高度的可扩展性,可以处理几乎任何数量的流数据并处理来自成千上万个来源的数据,而几乎没有延迟。 Kinesis每小时可以处理来自各种数据流的TB级数据。 Kinesis保持消息的顺序。
Amazon Kinesis最适合用于用例,例如收集和分析温度,湿度传感器等传感器数据。它还可以可靠地吸收所有市场数据并建立实时分析。
5.1运动学限制
- 数据Blob大小限制为1 MB
- 默认情况下,消息会在24小时后从信息流中删除,但最多可以延长7天
6.亚马逊Pinpoint
Amazon Pinpoint是托管在Amazon Web Services上的完全托管的营销和分析服务。 使用Amazon Pinpoint营销团队可以获取见识以加强活动并确定如何与客户群进行有效沟通。 使用Amazon Pinpoint,营销人员可以定义活动计划,以向应用程序最终用户发送定向消息。
Amazon Pinpoint可以与移动和Web应用程序集成,以深入了解客户如何与您的应用程序进行交互。 它还有助于发送有针对性的电子邮件,SMS,推送通知和语音消息,还可以跟踪客户如何响应您的消息,即已发送,打开或单击的消息数。 这对于发送促销或教育内容以吸引和留住用户很有用。
Amazon Pinpoint有用的一些用例是:
- 汇总所有营销活动的数据
- 提供有关您安装了应用程序的设备的信息的人口统计图
- 有关用户参与度和广告系列指标的分析
- 有关应用程序使用时间和客户保留的分析
- 收入图表,提供有关客户购买及其产生的收入的详细信息
- 用户身份验证分析
7.亚马逊物联网经纪人
AWS IoT消息代理是一项托管的高吞吐量发布者/订阅者代理服务,可用于向AWS IoT收发消息。 客户端将有关主题的消息发送到AWS IoT。 该消息代理将消息发送给该主题的所有注册客户端。 使用AWS IoT,可以以低延迟安全地传输所有IoT设备之间的消息。 根据消息量,可以自动缩放消息代理。 AWS IoT支持一对一消息传递或百万广播通知系统。 AWS文档中列出了更多AWS IoT功能。
翻译自: https://www.javacodegeeks.com/2019/03/aws-messaging-services-choosing-right-service.html