针对 AWS 和 Azure 的应用程序的单一代码库,用于服务总线、blob、SQS/SNS 等传递服务

Single codebase for applications that target AWS as well as Azure for pass services such as service bus, blob, SQS/SNS etc

我有多个应用程序部署在 Microsoft Azure 中。这些应用程序使用 Microsoft 的各种库与 Azure 服务总线(主题和队列)、Blob 等服务进行交互。新的要求是这些应用程序在 AWS 和 Azure 上都应该 运行。由于服务总线、blob 非常特定于 Azure。它们在 AWS 中不可用。 AWS 有等效的服务,例如 SNS/SQS、S3 存储桶等。AWS 有不同的 SDK's/libraries 用于与那里的服务交互。

这是个问题,因为我必须维护两个不同版本的应用程序,一个用于 Azure,另一个用于 AWS。这很难维护,我想避免。

是否有任何 framework/pattern/approach 将特定于供应商的详细信息抽象为服务总线或 blob,并使用单个代码库与 AWS 和 Azure 一起工作

尽可能多地进行 Docker 化并创建一个核心项目,其中安装了所有 Azure 和 AWS nuget 包,然后创建一个抽象层以在连接到 Azure 或 AWS 服务的核心项目中使用方法。

您可以使用 Azure 和 AWS 的包创建此核心层,并根据当前配置(或正在部署的云)使用 azure 包或 AWS 包中的方法。

如果你想使用单一代码库瞄准 Azure、Aws 或任何其他云,有 2-3 种方法

  1. Simple.Bus 等库以 Azure 服务总线和 RabbitMQ 为目标。但它们仅限于消息代理。对于存储,您可能需要找到另一个针对这两种环境的库。
  2. 更合适的解决方案是 Dapr (Distributed application portable runtime) which not only facilitates microservice service-based development but also helpful in developing cloud-agnostic code. It has various building blocks such as State management and Pubish and Subscribe,它可以使用单个代码库针对 Azure、AWS。通过替换适当的组件,您可以在不更改代码的情况下从一个云切换到另一个云。
  3. 如果上述解决方案 none 由于某种原因不适合您,您可能需要实现自己的外观层以针对多个云。