【问题标题】:Microservice requests微服务请求
【发布时间】:2018-12-15 21:18:35
【问题描述】:

我正在尝试启动一个小型微服务应用程序,但我有点卡在一些技术问题上。

我正在尝试构建一个问题跟踪器应用程序作为示例。

它有 2 个数据库表、问题和 cmets。为了示例,这些也将是单独的微服务。

它必须是一个单独的 API,可以被多种类型的客户端使用,例如移动、网络等。

当使用单一方法时,所有代码库都耦合在一起,并且当向 REST API 发出请求时,我会处理例如“/issues/19”请求 通过以下伪代码获取 id 为“19”的问题及其对应的 cmets。

on_request_issue(id) # handler for the route '/issues/<id>'
    issue = IssuesModel.findById(id)
    issue.comments = CommentsModel.findByIssueId(id)
    return issue

但我不确定我应该如何使用微服务来解决这个问题。假设我们有 microservice-issues 和 microservice-cmets。

我可以让客户端同时向“/issues/19”和“/cmets/byissueid/19”发送请求。但在我看来,这并不好,因为如果我们有很多东西 我们正在为一页发送大量请求。

我也可以向 microservice-issues 发出请求,并且在那个请求中也向 microservice-cmets 发出请求,但这对我来说看起来比上面更糟糕,因为从什么 我读过微服务不应该耦合,这很难耦合它们。

然后我阅读了有关 API 网关的信息,它们可以/应该接收请求并散播到其他微服务,但后来我真的不知道如何使用 API 网关。应该 例如,我在其中编写代码来捕获“/issues/19”请求,然后将微服务问题和微服务评论都扇出,组装这些东西并返回它? 那样的话,我感觉我在做双重工作,那 API 网关不会变成一个新的单体吗?

感谢您的宝贵时间

【问题讨论】:

  • 您应该查看 Kong konghq.com。 Kong 是一个开源 API 网关。 API 网关的重点是将 HTTP 请求简单地路由到正确的微服务。
  • 好吧,但是我仍然需要向客户发送 2 个单独的问题和 cmets 请求,知道我应该如何解决这个问题吗?
  • 从一个微服务向另一个微服务发送请求并不是一件坏事。有很多工具可以做到这一点(在 Java 中)。在我们的微服务系统中,我们有许多微服务通信。在某些情况下,一项服务需要使用另一项服务的日期执行某些逻辑。

标签: microservices


【解决方案1】:

API 网关听起来像您需要的。 如果你保持简单,只是为了触发内部 API,它不会成为你的新单体。

当您的应用程序随着新的微服务一起增长,或者当您必须支持不同的客户端(浏览器、移动应用程序、手表、物联网等)时,它可以让您进行更好的处理

顺便说一句,您展示的示例听起来像是一个很好的练习,实际上,对于大多数 web 应用程序来说,它看起来像是过度设计。我不会中断对自己的微服务的每个数据库调用。

【讨论】:

    【解决方案2】:

    将某些东西分解为小型(呃)服务的动机之一是服务自治,在这种情况下,问题是,当 cmets 服务关闭时,您是否会显示问题 - 如果它们总是耦合,它们可能不应该驻留在两个服务中,如果它们不是,那么拨打两个电话会让你得到这种解耦

    也就是说,您可能仍然需要一个 API 网关来解决您的客户端的 CORS 问题

    最后,cmets/byissueid 不是一个好的 REST 接口,issueId 应该是参数 /cmets/?issueId=..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-21
      • 1970-01-01
      • 2021-07-09
      • 2023-03-26
      • 2018-05-22
      • 1970-01-01
      • 2017-11-23
      • 2018-10-31
      相关资源
      最近更新 更多