【问题标题】:GCP: Splitting traffic in ratio across regions (Active-Active)GCP:跨区域按比例分配流量(主动-主动)
【发布时间】:2021-01-23 04:25:24
【问题描述】:

我正在设计一个在多个区域上运行的应用程序。比如说 R1,R2。

文件被提交到多区域云存储桶。存储桶中的 PUT 事件将发布通知以直接触发云功能或发布/订阅主题。

我希望 80% 的处理由 R1 完成,20% 由 R2 完成。

方法1: 拥有2个云端功能:CF-R1、CF-R2。 如何确保 80% 的存储桶通知触发 CF-R1 和 20% 触发 CF-R2?

方法二: 具有从存储桶捕获通知的发布/订阅主题。 是否可以在主题上配置 CF-R1 和 CF-R2 以便我可以拆分流量?

或任何其他处理这种情况的方法。

【问题讨论】:

  • 您有什么顾虑?你想优化什么?您需要在 2 个区域部署该功能吗?为了什么?高可用性?

标签: google-cloud-platform google-cloud-functions google-cloud-storage google-cloud-pubsub


【解决方案1】:

方法 1:使用带有 URL 映射的负载均衡器

您可以使用 Cloud 函数或 Cloud Run 并使用带有 URL 映射的负载均衡器(6 月在此 blog post 中宣布 - 请参阅 documentation)。

如果您使用负载均衡器,您可以直接或通过带有 PUSH 订阅的 pubsub 触发对均衡器的通知。

请注意,负载均衡器是一个单独的产品,您必须仔细查看使用情况和价格。

方法 2:使用过滤器的多个 pubsub 订阅

我认为第二个选项可能是可行的。为你的情况做疯狂的事,但它会起作用。

Google 现在在测试版中提供了在您创建订阅时对 pubsub 主题应用过滤器的选项。

然后,您可以让云功能(或云运行)对他们在自己的订阅中收到的 pubsub 通知做出反应。

使用此测试版功能,您可以按消息值(等于 ==、不等于 != 和 hasPrefix)进行过滤。

这里的诀窍是有足够的信息在函数之间均匀分发消息,因为在创建订阅后您无法更改过滤器。

如果您可以在您的应用程序中传递该信息,或者作为文件名的一部分,您可以通过这种方式轻松完成。

如果没有,我猜 crc32 可能有足够的信息用于您需要的过滤器。 但是这个过滤器有一个 128 个字符的限制,你可以使用这个:

hasPrefix(attributes.crc32,"A") OR hasPrefix(attributes.crc32,"B") OR hasPrefix(attributes.crc32,"C") OR hasPrefix(attributes.crc32,"D") OR hasPrefix(attributes.crc32,"E")

使用上面的过滤器,您有几乎 10% 的 CRC32 可能情况。对于一些简单的情况来说还不错,但对您不利,因为您必须配置大量订阅。

【讨论】:

    猜你喜欢
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 2021-04-02
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多