在AWS,Azure之间切换。设计模式

时间:2019-06-06 04:43:23

标签: java azure maven amazon-s3 design-patterns

我们已经开发了一些lambda函数并将其部署在AWS上运行良好, 无论如何,客户现在正在计划AZURE。

将来他们甚至可能会切换回AWS或任何其他供应商。

我们有一个单独的Maven项目,用于处理AWS相关内容。 因此,我们的业务逻辑和类保持不变。

我所做的是创建一个maven项目,并将各个lambda函数作为依赖项添加到该项目中。 然后创建一个工厂类,该类将基于AZURE或AWS属性(使用class.forName和Reflection)获得隐含的。 这样,我可以通过删除maven依赖项并添加AZURE依赖项来切换到Azure。

Design is somewhat like this

根据图片,我的计划是通过切换通用utils中存在的cloudFactory中的云来创建新的AzureUtils和AzureWrapper项目并直接使用Azure Cloud,甚至希望它能够工作(未经测试),AWS仍会这样工作。

现在的问题是客户不希望将所有东西都装在1个罐子中,即在一个罐子中对所有lambda都不要。他想要进行切换的地方。

现在哪种设计模式会有用,那将是什么方法。

当前我的Lambda函数如下所示

public class Hello implements RequestHandler<S3Event, Context > {

    public String handleRequest(S3Event s3event, Context context) {

               .................
               call to business processor as in diag
    }
}

azure函数看起来有点像带有注释的简单类

public class Function {

    @FunctionName("hello")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = { HttpMethod.GET, HttpMethod.POST }, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");

        // Parse query parameter
        String query = request.getQueryParameters().get("name");
        String name = request.getBody().orElse(query);

        if (name != null) {
           call to business processor as in diagram
        }
    }
}

毕竟,我只有两个问题

我想首先知道图中的设计是否正确。

而我的客户正在要求一种神奇的包装,它应该能够处理两种类型的云实现。这有可能吗?

如果可能的话,会指引我正确的方向

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

关于您的问题,请问如何处理两种类型的云,请检查此第三部分解决方案serverless.com。这是一家创建自己的无服务器包装程序的公司,因此您可以摆脱供应商锁定