我正在将单片服务划分为微服务架构。我所做的是分离服务,现在REST调用已经分发,但问题是如果我调用service A
返回10000个实例并且它依赖于其他一些service B
,所以调用{ {1}}并且对于每个实例,呼叫转到service A
以获取其数据,因此将单个呼叫转换为10000个额外呼叫,因此现在呼叫需要很多时间。
我想在一个请求中创建多个Get请求。
我搜索的是使用批处理请求来POST不同的实例,但建议在Creating&一起更新多个实例。这可以用来获取信息吗?
还有其他办法吗?
编辑:一个类似的用例,例如有两种服务,一种服务获取学生的详细信息,另一种获取教师的详细信息。在教师表中,学生的ID不是外键而是简单的教学,现在在教师的用户界面中,它显示了教师的详细信息以及学生ID和学生姓名及其所属的课程,因此,为了获得学生姓名和课程详细信息,我必须使用学生的ID拨打学生的服务。
答案 0 :(得分:2)
您正在寻找的模式是API Gateway。有时也称为" Edge"或" EdgeService"。它可以用作群集的单个入口点并聚合服务调用结果。其他用例包括集中身份验证和/或授权以及路由,监控和弹性。
通过聚合,API网关可能允许您解耦您的服务(当然,这也取决于您的实际用途,因为您没有提供任何详细信息)。
有些人只通过网关路由外部呼叫,其他人也通过网关路由内部呼叫。
这里有一些技术要研究:
来自Netflix堆栈的Amazon API gateway - 如果您在AWS上运行。您通常会使用自己的lambda服务进行聚合。
Kong。没有本机聚合支持,但您可以转发到您提供的单独聚合服务。
答案 1 :(得分:0)
为了使其更加清晰,微服务本身在不依赖任何其他服务的情况下履行其业务职责。在你的情况下,'ServiceA'不是一个微服务,但它只是一个服务,因为它依赖于另一个服务来完成它的工作。
那么你能改变服务合同吗?例如,修改ServiceB输入&输出返回/维持每个呼叫100个实例而不是1.它将提供更少的请求和更少的时间。有意义的是,如果您开发批处理行为应用程序/服务,管理集合数据的依赖服务将帮助您节省网络和总运行时间成本。但在这种情况下,'serviceA'将不是微服务。
因此,如果你真的决定让它成为一个真正的“微服务”,只需将服务A和服务B结合在一起。微服务概念不是将服务变成小“微”。一个微服务,负责完成与其业务领域相关的工作,而不依赖于其他域/服务/模块等。
将同一域中的2个服务组合为1并处理此服务中的一些批量数据不违反微服务概念。