Jie*_*eng 11 amazon-web-services amazon-ecs microservices aws-lambda aws-api-gateway
我正在使用AWS API Gateway开发一个"微服务"应用程序,使用Lambda或ECS进行计算.现在的问题是服务之间的通信是通过API网关的API调用.这感觉效率低,安全性低于可能.有没有办法让我的微服务以更高效和安全的方式相互交谈?像某种方式直接在私人网络内谈话?
我想到的一种方法是多层API网关.
但是通过这种方式,我需要在2级API中"复制"我的路线......这似乎并不理想.我在想也许用{proxy+}.所以任何东西/payment/{proxy+}都转到支付API网关等等 - 还有2级API网关......但这似乎是我能做的最好的?
也许有更好的方法?
构建微服务的方式有很多。首先,我要熟悉AWS发布的白皮书:AWS上的微服务,白皮书-PDF版本。
在您的问题中,您说:“现在的问题是,服务之间的通信是通过API网关通过API调用进行的。这感觉效率低下,并且安全性较差。有没有办法让我的微服务以更高的性能彼此通信和安全的方式?”
是的-实际上,AWS白皮书和API网关常见问题解答将API网关称为应用程序的“前门”。API Gateway的意图是用于与您的AWS服务进行通信的外部服务。而不是彼此通信的AWS服务。
AWS资源可以通过多种方式相互通信以调用微服务。白皮书中概述了一些内容,这是我使用的另一资源:更好的结合:Amazon ECS和AWS Lambda。您使用的服务将基于您的要求。
通过将单片应用程序分解为小型微服务,通信开销增加了,因为微服务必须彼此通信。在许多实现中,基于HTTP的REST被用作通信协议。它是一种轻量级的协议,但数量过多可能会引起问题。在某些情况下,考虑合并来回发送大量消息的服务可能是有意义的。如果您发现自己在合并越来越多的服务以减少闲聊的情况下,则应查看问题域和域模型。
据我了解,问题的根源是将请求路由到微服务。要维护“微服务的特征 ”,您应该选择一个解决方案来管理路由。
您提到使用API Gateway作为路由解决方案。API网关可用于路由...但是,如果选择使用API网关进行路由,则应在一个级别中明确定义路由。为什么?
这样做的缺点是,这将花费一些时间,并且您可能必须更改已经定义的现有API。但是,您可能已经在更改现有代码库,以遵循微服务的最佳实践。
尽管上面列出了使用API网关进行路由的原因,但如果配置正确,则其他资源可以正确处理路由。您可以具有Lambda函数的API网关代理,该Lambda函数具有已定义的所有微服务路由,或具有定义了路由的VPC中的另一个资源。
您做什么取决于您的要求和时间。如果您已经在某个地方定义了API,并且只是希望使用API Gateway来限制,监视,保护和记录请求,那么您将拥有API Gateway作为代理。如果要充分利用API网关,请在其中明确定义每个路由。两种方法都可以遵循微服务最佳实践,但是,我认为在API Gateway中定义每个公共API是与微服务体系结构保持一致的最佳方法。其他答案也很好地解释了每种方法的权衡。
我将以Lambda为解决方案,但是它们也可以是ECS实例或ELB。
在跳到解决方案之前,要了解有关lambda的一个重要概念是将应用程序代码与.NET分离event_source。
事件源是调用应用程序代码的另一种方法。您提到了API网关,这只是调用lambda(HTTP REQUEST)的一种方法。event sources与您的解决方案相关的其他有趣内容是:
因此,如果您的HTTP_RESPONSE依赖于一个lambda调用另一lambda并依赖于该第二lambdas结果。直接调用可能是一个足以使用的解决方案,这样您就可以invoke以同步方式使用lambda。这也意味着,lambda应该作为事件源订阅API网关,并具有规范化两种不同类型事件的代码。(这就是为什么lambda文档通常将其event作为参数之一的原因)
如果您的HTTP响应不依赖于其他微服务(lambda)执行。我强烈建议在此用例中使用SNS,因为您的原始lambda会发布一个事件,并且您可以让多个lambda订阅该事件以并行执行。
对于更复杂的用例:
| 归档时间: |
|
| 查看次数: |
1544 次 |
| 最近记录: |