falcor 在微服务架构中的作用是什么?
What is the role of falcor in a microservice architecture?
假设我们有以下由松散耦合的微服务组成的叫车应用程序:
例子取自https://www.nginx.com/blog/introduction-to-microservices/
每个服务都有自己的休息 api,所有服务都组合在一个 api 网关中。客户端不与单个服务对话,而是与网关对话。网关从多个服务请求信息并将它们组合成一个响应。对于客户端来说,它看起来像是在与一个单体应用程序对话。
我想了解:我们可以在哪里将 falcor 合并到这个应用程序中?
一个模型无处不在 来自 http://netflix.github.io/falcor/
Falcor lets you represent all your remote data sources as a single
domain model via a virtual JSON graph. You code the same way no matter
where the data is, whether in memory on the client or over the network
on the server.
在这个打车应用程序中,每个微服务已经代表一个单一的领域模型。你能想出用 falcor 包装每个微服务能给我们带来什么好处吗?我不能。
但是我认为将 falcor 合并到 api 网关中非常方便,因为我们可以将微服务创建的不同领域模型抽象为一个或至少几个模型。
你有什么看法?
你是对的。这就是 Netflix 使用 Falcor 的方式以及 Falcor 路由器的设计目的。
The Router is appropriate as an abstraction over a service layer or REST API. Using a Router over these types of APIs provides just enough flexibility to avoid client round-trips without introducing heavy-weight abstractions. Service-oriented architectures are common in systems that are designed for scalability. These systems typically store data in different data sources and expose them through a variety of different services. For example, Netflix uses a Router in front of its Microservice architecture.
It is rarely ideal to use a Router to directly access a single SQL Database. Applications that use a single SQL store often attempt to build one SQL Query for every server request. Routers work by splitting up requests for different sections of the JSON Graph into separate handlers and sending individual requests to services to retrieve the requested data. As a consequence, individual Router handlers rarely have sufficient context to produce a single optimized SQL query. We are currently exploring different options for supporting this type of data access pattern with Falcor in future.
Falcor 真的很棒 api 如果它以正确的方式用于非常相关的用例,例如:
- 如果您的页面必须进行多个 REST 端点调用
- 这些调用不依赖于彼此
- 所有 REST 调用都发生在初始页面加载时
- 性能:如果你想缓存REST响应(例如,微服务使用gemfire缓存,你可能不需要falcor缓存。如果你想减少网络延迟,你仍然可以使用falcor缓存)
- 服务器请求批处理:当 运行Falcor 在节点环境中时,您可能希望减少从客户端调用节点服务器的数量。
- 响应解析更简单:如果您不希望客户端代码担心从 REST 响应中提取数据点(包括错误处理)
等等..
然而,有很多情况下 falcor 并不能达到目的,并且觉得直接调用端点会更好:
- 如果 REST 调用相互依赖
- 如果调用端点要传很多参数
- 如果您不打算缓存响应
- 如果您想与 REST 网络服务共享一些安全 cookie(例如:XSRF 令牌)
假设我们有以下由松散耦合的微服务组成的叫车应用程序:
例子取自https://www.nginx.com/blog/introduction-to-microservices/
每个服务都有自己的休息 api,所有服务都组合在一个 api 网关中。客户端不与单个服务对话,而是与网关对话。网关从多个服务请求信息并将它们组合成一个响应。对于客户端来说,它看起来像是在与一个单体应用程序对话。
我想了解:我们可以在哪里将 falcor 合并到这个应用程序中?
一个模型无处不在 来自 http://netflix.github.io/falcor/
Falcor lets you represent all your remote data sources as a single domain model via a virtual JSON graph. You code the same way no matter where the data is, whether in memory on the client or over the network on the server.
在这个打车应用程序中,每个微服务已经代表一个单一的领域模型。你能想出用 falcor 包装每个微服务能给我们带来什么好处吗?我不能。
但是我认为将 falcor 合并到 api 网关中非常方便,因为我们可以将微服务创建的不同领域模型抽象为一个或至少几个模型。
你有什么看法?
你是对的。这就是 Netflix 使用 Falcor 的方式以及 Falcor 路由器的设计目的。
The Router is appropriate as an abstraction over a service layer or REST API. Using a Router over these types of APIs provides just enough flexibility to avoid client round-trips without introducing heavy-weight abstractions. Service-oriented architectures are common in systems that are designed for scalability. These systems typically store data in different data sources and expose them through a variety of different services. For example, Netflix uses a Router in front of its Microservice architecture.
It is rarely ideal to use a Router to directly access a single SQL Database. Applications that use a single SQL store often attempt to build one SQL Query for every server request. Routers work by splitting up requests for different sections of the JSON Graph into separate handlers and sending individual requests to services to retrieve the requested data. As a consequence, individual Router handlers rarely have sufficient context to produce a single optimized SQL query. We are currently exploring different options for supporting this type of data access pattern with Falcor in future.
Falcor 真的很棒 api 如果它以正确的方式用于非常相关的用例,例如:
- 如果您的页面必须进行多个 REST 端点调用
- 这些调用不依赖于彼此
- 所有 REST 调用都发生在初始页面加载时
- 性能:如果你想缓存REST响应(例如,微服务使用gemfire缓存,你可能不需要falcor缓存。如果你想减少网络延迟,你仍然可以使用falcor缓存)
- 服务器请求批处理:当 运行Falcor 在节点环境中时,您可能希望减少从客户端调用节点服务器的数量。
- 响应解析更简单:如果您不希望客户端代码担心从 REST 响应中提取数据点(包括错误处理) 等等..
然而,有很多情况下 falcor 并不能达到目的,并且觉得直接调用端点会更好:
- 如果 REST 调用相互依赖
- 如果调用端点要传很多参数
- 如果您不打算缓存响应
- 如果您想与 REST 网络服务共享一些安全 cookie(例如:XSRF 令牌)