带有 API 网关的微服务

Posted

技术标签:

【中文标题】带有 API 网关的微服务【英文标题】:Micro Service with API Gateway 【发布时间】:2016-01-14 21:30:09 【问题描述】:

对于我的新项目,我必须使用 带有 Api 网关的微服务。所以我收集了有关微服务的详细信息,但 Api Gateway 部分不清楚。

我的问题是,

    有谁知道请求路由部分是如何在 Api 中完成的 网关? 是否可以通过简单的 if 条件来完成[伪代码: if(keyword=="product") then route("product service")]? 或者有更好的方法吗?

我正在使用 C#.Net 开发 Api。 我从https://www.nginx.com/blog/building-microservices-using-an-api-gateway/获得了一些关于 Api Gateway 的信息

【问题讨论】:

API 网关的作用类似于安全代理 + 日志记录。您可以将 url 传递给您要访问的 product 服务,网关将代理它。 【参考方案1】:

你几乎问了三个问题,而且它们都有些相关,所以我会尽力把这三个问题一起解决。

首先,API 网关中的请求路由不仅仅是一个代理,其实现不涉及在将请求发送到下游服务之前检查请求的条件。 API 网关可能是您服务的唯一入口点,在该入口点中,还会在层上进行身份验证,以确保请求有权访问下游服务。身份验证可能是另一项服务本身。 API 网关的高级实现可能会整合所有下游服务上的大部分端点(如果不是全部的话)。

让我们举一个小例子,例如一个电子商务应用程序,其中包括用于列出产品、搜索产品和购物车的服务。然后,API 网关也将具有这些相同的端点,并将请求进一步委托给负责该请求的服务。这个例子中的API可能有/products列出所有产品,/products?query=...搜索产品,最后/carts/:id/products列出购物车中的产品。希望这能回答你的问题。

除此之外,我知道您已经提到它用于一个新项目,并且只是想给您 2 美分,如果您的团队非常小,这可能不是用于您的新项目的最佳架构,因为是一个很大的运营开销。需要标准化、自动化部署、集成等的开销。最好从传统的 MVC 架构开始,然后在项目启动后慢慢将其演变为微服务。

【讨论】:

它给出了一些想法。谢谢!【参考方案2】:

根据您的架构,您可以使用一些非常酷的软件,例如 Weave 和 CoreOS (https://github.com/weaveworks/weave)。我们使用 Docker 将我们的应用程序分发到 CoreOS 节点上,然后由 Weave 处理内部 DNS。

这真的很棒,因为我们可以通过端口将请求转发到应用程序名称,然后我们就可以离开了。

例如,用户请求 application.com/api/apiName/request/path

我们的网关是用 Node.js 实现的,它需要 /api 之后的 apiName 将其路由到该 api,然后将 URL 的以下路径附加到调用本身。

因此来自网关的请求将在内部代理为 apiName:8080/request/path。在这方面,当新服务出现时,API 不需要更改,因为路径是根据您的请求动态创建的。

这很棒,因为我们不必担心跟踪来自不同 API 的路径并将它们存储在某个地方。

如果不是这样,您将不得不维护一些(可能是外部的)端点列表以使您更轻松。这可以通过 API 本身以编程方式完成。

不过,我不确定您的要求是什么,正如 Will 所回答的那样,它确实会产生相当大的基础架构成本。但是,我们的版本快速而轻松,因为我们不必担心在多个层中进行代码更改,而且新 API 可以免费获得我们的网关代理、日志记录和身份验证。

【讨论】:

以上是关于带有 API 网关的微服务的主要内容,如果未能解决你的问题,请参考以下文章

使用 API 网关 Ocelot 与 Nginx 的微服务

使用 Google Cloud Functions 的微服务 API 网关

Apache APISIX 2.12.0 发布,云原生的微服务 API 网关

主流的微服务API网关性能比较

使用 Azure Service Fabric 部署的微服务的 API 网关/代理模式

API 网关可以动态查找在服务注册表上注册的微服务的 URI 吗?