批处理 - 从不同的微服务获取请求

时间:2017-05-09 13:01:35

标签: rest get microservices

我正在将单片服务划分为微服务架构。我所做的是分离服务,现在REST调用已经分发,但问题是如果我调用service A返回10000个实例并且它依赖于其他一些service B,所以调用{ {1}}并且对于每个实例,呼叫转到service A以获取其数据,因此将单个呼叫转换为10000个额外呼叫,因此现在呼叫需要很多时间。

我想在一个请求中创建多个Get请求。

我搜索的是使用批处理请求来POST不同的实例,但建议在Creating&一起更新多个实例。这可以用来获取信息吗?

还有其他办法吗?

编辑:一个类似的用例,例如有两种服务,一种服务获取学生的详细信息,另一种获取教师的详细信息。在教师表中,学生的ID不是外键而是简单的教学,现在在教师的用户界面中,它显示了教师的详细信息以及学生ID和学生姓名及其所属的课程,因此,为了获得学生姓名和课程详细信息,我必须使用学生的ID拨打学生的服务。

2 个答案:

答案 0 :(得分:2)

您正在寻找的模式是API Gateway。有时也称为" Edge"或" EdgeService"。它可以用作群集的单个入口点并聚合服务调用结果。其他用例包括集中身份验证和/或授权以及路由,监控和弹性。

通过聚合,API网关可能允许您解耦您的服务(当然,这也取决于您的实际用途,因为您没有提供任何详细信息)。

有些人只通过网关路由外部呼叫,其他人也通过网关路由内部呼叫。

这里有一些技术要研究:

来自Netflix堆栈的

Zuul。您已经编写了一个聚合过滤器。请参阅this文档。

Amazon API gateway - 如果您在AWS上运行。您通常会使用自己的lambda服务进行聚合。

Kong。没有本机聚合支持,但您可以转发到您提供的单独聚合服务。

答案 1 :(得分:0)

为了使其更加清晰,微服务本身在不依赖任何其他服务的情况下履行其业务职责。在你的情况下,'ServiceA'不是一个微服务,但它只是一个服务,因为它依赖于另一个服务来完成它的工作。

那么你能改变服务合同吗?例如,修改ServiceB输入&输出返回/维持每个呼叫100个实例而不是1.它将提供更少的请求和更少的时间。有意义的是,如果您开发批处理行为应用程序/服务,管理集合数据的依赖服务将帮助您节省网络和总运行时间成本。但在这种情况下,'serviceA'将不是微服务。

因此,如果你真的决定让它成为一个真正的“微服务”,只需将服务A和服务B结合在一起。微服务概念不是将服务变成小“微”。一个微服务,负责完成与其业务领域相关的工作,而不依赖于其他域/服务/模块等。

将同一域中的2个服务组合为1并处理此服务中的一些批量数据不违反微服务概念。