【问题标题】:What is the role of falcor in a microservice architecture?falcor 在微服务架构中的作用是什么?
【发布时间】:2017-02-16 15:28:17
【问题描述】:

假设我们有以下由松散耦合的微服务组成的叫车应用程序:

例子取自https://www.nginx.com/blog/introduction-to-microservices/

每个服务都有自己的rest api,所有服务都组合在一个api网关中。客户端不与单个服务对话,而是与网关对话。网关从多个服务请求信息并将它们组合成一个响应。对于客户端来说,它看起来像是在与一个单体应用程序通信。

我想了解:我们可以在哪里将 falcor 合并到这个应用程序中?

一个模型无处不在来自http://netflix.github.io/falcor/

Falcor 让您可以将所有远程数据源表示为一个单一的 通过虚拟 JSON 图的域模型。无论如何,您都以相同的方式编码 数据在哪里,无论是在客户端的内存中还是通过网络 在服务器上。

在这个打车应用程序中,每个微服务已经代表了一个域模型。你能想到通过用 falcor 包装每个微服务可以让我们茁壮成长吗?我不能。

但是我认为将 falcor 合并到 api 网关中非常方便,因为我们可以将微服务创建的不同领域模型抽象为一个或至少几个模型。

你的意见是什么?

【问题讨论】:

    标签: microservices falcor


    【解决方案1】:

    你是对的。这就是 Netflix 使用 Falcor 的方式以及 Falcor 路由器的设计目的。

    来自documentation

    路由器适合作为服务层的抽象或 REST API。在这些类型的 API 上使用路由器提供了足够的灵活性来避免客户端往返,而无需引入重量级抽象。面向服务的体系结构在为可扩展性而设计的系统中很常见。这些系统通常将数据存储在不同的数据源中,并通过各种不同的服务公开它们。 例如,Netflix 在其微服务架构前使用了路由器。

    使用路由器直接访问单个 SQL 数据库并不理想。使用单个 SQL 存储的应用程序通常会尝试为每个服务器请求构建一个 SQL 查询。 路由器的工作原理是将 JSON 图表的不同部分的请求拆分为单独的处理程序,并将单独的请求发送到服务以检索请求的数据。因此,单个路由器处理程序很少有足够的上下文来生成单个优化的 SQL 查询。我们目前正在探索未来使用 Falcor 支持这种类型的数据访问模式的不同选项。

    【讨论】:

      【解决方案2】:

      如果以正确的方式将 Falcor 用于非常相关的用例,它确实是一个很棒的 AP​​I,例如:

      • 如果您的页面必须进行多个 REST 端点调用
      • 这些调用不相互依赖
      • 所有 REST 调用都发生在初始页面加载时
      • 性能:如果你想缓存 REST 响应(例如,微服务使用 gemfire 缓存,你可能不需要 falcor 缓存。如果你想减少网络延迟,你仍然可以使用 falcor 缓存)
      • 服务器请求批处理:在节点环境中运行 Falcor 时,您可能希望减少从客户端对节点服务器的调用量。
      • 更简单的响应解析:如果您不希望客户端代码担心从 REST 响应中提取数据点(包括错误处理) 等等..

      但是,在很多情况下 falcor 并没有起到多大的作用,并且觉得直接调用终点会更好:

      • 如果 REST 调用相互依赖
      • 如果你想传递大量参数来调用端点
      • 如果您不打算缓存响应
      • 如果您想与 REST Web 服务共享一些安全 cookie(例如:XSRF 令牌)

      【讨论】:

        猜你喜欢
        • 2022-08-14
        • 2015-06-17
        • 2017-10-11
        • 2022-11-10
        • 2017-07-01
        • 2020-02-25
        • 1970-01-01
        • 2016-04-15
        • 2018-09-25
        相关资源
        最近更新 更多