繁体   English   中英

微服务架构中的API调用

[英]API calls in Microservices Architecture

我不确定我的问题是否可以解释,但我会尽可能地在这里解释一下。 我目前正在探索和使用微服务架构,以了解它是如何工作和了解更多。 大多数情况下,我了解事情的运作方式,API Gateway在此架构中的作用等等......

所以我还有一个理论问题。 例如,假设有2个服务,即。 事件(管理可能的事件)和管理与特定事件相关的票证的服务票证(可能有许多票证)。 所以这两个服务实际上是相互依赖的,但它们有一个独立的数据库,完全是隔离的,松散耦合的,就像应该在“理想的”微服务环境中一样。

现在想象一下,我想获取与该事件相关的事件和所有票证,并将其显示在移动应用程序或Web应用程序或其他任何内容中。 在这种情况下,调用多个服务/ URL来获取数据并输出到UI完全没问题吗? 或者有更好的方法来获取和聚合这些数据。

从我的阅读中,从另一个服务调用一个服务的不同来源是增加延迟,使服务相互依赖,一个服务中的未来变化将破坏另一个服务等,所以这根本不是一个好主意。

我很抱歉,如果我重复一个问题并且已经在某个地方被问过(虽然我找不到它),但是我需要早些时候遇到这个问题的人的意见,并且可以更好地解释这里的流程。

在这种情况下,调用多个服务/ URL来获取数据并输出到UI完全没问题吗? 或者有更好的方法来获取和聚合这些数据。

  1. 是的,可以从您的UI调用多个服务,并根据您的需要聚合您的前端代码中的数据。 实际上,在这种情况下,您可以调用2 Rest API来从票务微服务和事件微服务中获取数据。

  2. 另一个选择是你有一些Views / Read优化的微服务,它将聚合来自两个微服务的数据,并作为只读微服务。 这当然涉及一些延迟考虑和其他事情。 例如,如果您有像View这样的需求,可以使用这种方法,该View包含多个模型(类似于非规范化视图),这些模型将被大量访问和/或具有一些复杂的过滤器选项。 在这种方法中,您将拥有第三个微服务,该服务将根据您的2个微服务(票证和事件)的数据进行汇总。 这种微服务将针对阅读进行优化,并且如果需要还可以使用不同的存储类型(文档db或类似)。 对于您的情况,如果您决定这样做,您只能对此微服务进行一次API调用,它将为您提供所有数据。

  3. 从另一个调用一个微服务。 在某些情况下,你无法避免这种情况。 尽管网上有一些消息来告诉你不要这样做但有时这是不可避免的。 对于您的示例,我不建议使用此方法,因为它会产生耦合和不必要的延迟,这可以通过其他方法避免。

背景资料:

您可以阅读答案,其中主题是关于是否可以从另一个微服务调用一个微服务。 对于您的特定情况,它不是一个好的选择,但在某些情况下可能是。 所以请阅读它以获得一些澄清。

摘要:

我曾经在系统中工作,我们在那里做所有这三件事。 这实际上取决于您的业务场景和应用程序的需求。 选择哪种方法取决于以下几个标准:来自UI的可用性,扩展(如果您对微服务有很高的需求,您可以考虑添加第三个微服务,它可以汇集门票和事件微服务的数据) ,域耦合。 对于您的情况,我建议用户预期选项1或选项2(如果您有高要求的UI)。 对于某些情况,选项1就足够了,并且拥有第三个微服务将是一种过度杀伤,但有时这也是一个选项。

根据我对基于云的服务(主要是Microsoft Azure)的体验,一个服务调用另一个服务的延迟确实存在,但可以依赖于最小化。 与用户设备通过他们碰巧具有的任何互联网计划进行呼叫所涉及的未知延迟相比,尤其如此。

总是有一个消费客户端依赖于服务及其定义的接口,无论是SPA应用程序还是其他服务。 因此,在您描述的场景中,必须聚合两个服务的有效负载。

基于此,我已经看到通过使用处理客户端请求的服务,聚合来自n个服务的结果并相应地响应来改进性能。 这确实会导致依赖性,但随着服务的发展,可以同时激活多个版本的服务,从而允许您在适当的时候折旧旧版本。

我希望有所帮助。

可选建议

您可以在任何最适合的服务中维护读取表(非规范化)。 为什么? - 因为CQRS适用于需要的地方,CQRS最适合大型和复杂的应用。 它介绍了系统的复杂性,并且您获得的利润更少,更令人头痛。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM