【发布时间】:2019-12-31 04:33:16
【问题描述】:
前言
我目前正在尝试了解微服务的工作原理以及如何实现容器复制和 API 网关。不过我遇到了障碍。
我的申请
我的应用程序有三个主要服务。
- API 网关
- 爬虫管理器
- 用户
我将重点关注 API Gateway 和 Crawler Manager 这个问题的服务。
API 网关
这是一个运行 Go 服务器的 docker 容器。通信全部使用 GraphQL 完成。
我正在使用 API 网关,因为我希望我的应用程序中有不同的服务,每个服务都有自己的专用 API。这是为了统一一切。
它所做的只是将请求代理到相应的服务并将响应返回给客户端。
爬虫管理器
这是另一个运行 Go 服务器的 docker 容器。使用 GraphQL 进行通信。
或多或少,它的行为类似于另一个 API 网关。让我解释一下。
此服务期望客户端发送如下请求:
{
# In production 'url' will be encoded in base64
example(url: "https://apple.example/") {
test
}
}
url 只能链接到以下三个站点之一:
严禁任何其他网站。
一旦Crawler Manager 服务收到请求并且链接是这三个之一,它会决定哪个其他 服务来满足请求。所以这样一来,它的行为就很像另一个 API 网关,但是是专门的。
每个 URL 域都有自己的专用服务来处理它。为什么?因为每个站点的标记差异很大,并且需要对每个站点进行爬网以获取信息。因为他们的标记是多种多样的,所以我希望为他们每个人提供一项服务,这样万一网站更新,整个 Crawler Manager 服务就不会停止。
就查询而言,每个站点都会返回一个格式与其他站点相同的响应。
视觉轮廓
问题
现在我们对我的应用程序的工作原理有了一些了解,我想在这里讨论我的实际问题。
- 是否有某种辅助 API 网关标准和良好实践?有没有更好的方法?
- 如何复制这个系统并拥有多个
Crawler Manager服务系列实例?
我真的很困惑如何实际创建此设置。我查看了 Docker Swarm / Kubernetes 中的集群,但是按照我的设置方式,我似乎需要创建集群集群。这让我质疑我的整体设计。也许我不需要考虑让它们如此结构化?
【问题讨论】:
标签: docker cluster-computing api-gateway