当前位置: 首页 > 知识库问答 >
问题:

用于SNS通知的AWS多区域架构

吕学
2023-03-14

我们正在为我们的应用程序尝试多区域体系结构。它由多个客户端使用。

我们使用aws复制数据库(s3和dynamodb),它解决了数据可用性问题。

我们使用SNS在数据发生任何更改时通知客户,但我找不到任何跨区域消息复制的好模式。

以下是我们必须牢记的几点考虑/要求

>

  • 客户端应该能够获得所有的通知,即使它们只在一个区域中。

    应用程序应继续工作,即使一个区域下降。如果可能的话,当区域出现时,可以重播消息。

    以下是我们脑海中浮现的一些有利和不利的方法。

    >

  • EC2服务器写入两个区域

    优点。

    A.要求1很容易满足。

    欺骗。

    A.不确定这是否可行,因为没有医生建议这样做。

    B如果一个区域关闭,将无法重播消息。

    C写入两个区域时的延迟。

    具有一个lambda函数来写入两个区域。因为lambda函数可以订阅跨区域sqs和sns。我们可以在两个区域中使用lambda函数,监听另一个区域的sns/sqs,然后写入其自己区域的sns。

    赞成的意见:

    A.需求1已解决。

    b<如果我们使用sqs而不是sns,则del>要求2得到解决。如果区域关闭,消息将在队列中保留一段时间,并且每当区域出现时,消息将被重播。跨区域sqs订阅是不可能的,lambda函数必须订阅sns。

    欺骗:

    A.跨区域权限意味着在cloudformation中硬编码,不确定cloudformation是否支持从其他区域导入。

    Blambda函数的代价。(尽管这将是最低限度的)

    而不是写入sns,我们写到Dynamodb,并使用Dynamodb全局表和流在这两个区域发送通知。

    优点。

    A.需求1已解决。

    B.需求2解决了,因为Dynamodb复制将负责复制消息

    欺骗。

    A.昂贵的解决方案。

    你能不能建议我如果错过了什么或者其他的模式,我们应该考虑什么?

    考虑到以上可能的方法,我倾向于方法2,

  • 共有1个答案

    戚建白
    2023-03-14

    我们最终用这种方法解决了这个问题

    >

    一个lambda函数被订阅到队列中。

    Lambda函数写入两个区域的sns。

    通过这种方式,我们可以在发送消息之前引入延迟和一些预处理。然而,最好的解决方案是使用dynamodb流生成消息(不是新的dynamodb表,而是从我们正在写入数据的表中生成),因为这意味着当我们在一个特定区域发送消息时,数据已经被复制。

     类似资料:
    • 在创建平台应用程序时,我尝试创建应用程序和消息推送平台选择GCM,然后添加API密钥,我得到了以下结果。 无效参数:属性原因:平台凭据无效(服务:Amazon SNS;状态代码:400;错误代码:InvalidParameter;请求ID:44a04d15-c58b-5bf8-859e-0311947aac6c) 这意味着什么?我如何修复它?

    • 我有一个由AWS上的lambda触发的SNS,它会生成iOS消息推送,工作正常,但问题是声音没有发生… 我的有效载荷有什么问题?,声音和徽章还没有设置好。干杯

    • 我们有一个要求有一个持久的移动推送通知;我们发现了带有AWS认知的AWS SNS。我们最关心的是,我们发现AWS SNS不像OneSignal那样支持图像或blob数据类型。 AWS SNS有什么方法可以在推送移动通知中支持图像(图像也会在notif预览中显示)

    • 我有一个在iOS和Android上运行的React本地应用程序,我希望集成AWS SNS。我有一些问题希望有SNS经验的人能回答。 根据我的理解,AWS SNS只是使用GCM(Android)和APNS(iOS)的网关 这是正确的吗? 我是否可以使用RESTful API来实现这一点 或者我需要设置API网关并使用Lambda函数吗 我读到我必须为此集成AWS隐身,或者使用代理服务器。 编辑:我设

    • 我为沙盒iOS设置了推送通知,它们曾经工作过,但由于某种原因目前不工作。这是来自云观察日志的错误AWS SNS: 这是我的发送代码(AWS Lambda调用此代码): Lambda方法的返回数据: 我已经将问题缩小到不与我的lambda方法关联,因为我试图发布到直接从SNS控制台创建的endpoint。我还想知道为什么这个旧的实现在过去,一个月或两个月前,仍然有效,而现在不再有效。我认为这可能与过

    • 我使用aws sns服务推送/发送美国手机号码的消息,并使用以下方法。 a) 加载sns b)创建主题 c) 设置主题属性 d) 创建订阅 但是,同样的方法不适用于印度手机号码。真的有可能吗?如果是这样的话,我有什么可说的?