falcor在微服务架构中的作用是什么?

时间:2016-10-07 15:09:11

标签: microservices falcor

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

https://www.nginx.com/blog/introduction-to-microservices/

该示例来自https://www.nginx.com/blog/introduction-to-microservices/

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

我想了解:我们在哪里可以将falcor纳入此应用程序?

来自http://netflix.github.io/falcor/

一个模型无处不在

  

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

在这个出租车应用程序中,每个微服务代表一个单独的域模型。你能想到我们可以通过用falcor包装每个微服务来茁壮成长吗?我不能。

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

您有什么看法?

2 个答案:

答案 0 :(得分:3)

你是对的。这就是Netflix如何使用Falcor以及Falcor路由器的设计目标。

来自documentation

  

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

     

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

答案 1 :(得分:1)

如果Falcor以正确的方式用于非常相关的用例,那么它真的是一个很好的api,例如:

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

然而,在很多情况下,falcor不能达到目的,并认为最好直接调用终点:

  • 如果REST调用依赖于彼此
  • 如果您想传递许多参数来调用终点
  • 如果您不打算缓存响应
  • 如果您想与REST网络服务共享一些安全的Cookie(例如:XSRF令牌)