Falcor:Netflix的数据抓取开源库

jopen 9年前

 

作为一家在线影片租赁供应商, Netflix 通过移动应用、桌面应用或TV来为用户提供电影和电视节目。在使用过程中,用户总是需要通过这些应用来获取位于服务器的远端数据资源。近日,为了提高远程数据抓取的效率,Netflix发布了全新数据平台 Falcor 的开发者预览版。接下来,本文对Falcor进行简要介绍。

Falcor的设计目标并不是用来替代应用服务器、数据库或者MVC框架。其功能是作为中间件,来优化应用程序不同层之间的通信效率。之前,Netflix已经提出了 JSON Graph 的概念,来把Graph数据转变为JSON对象。该JSON格式可以消除传统JSON格式引入的重复数据问题,并提高数据传输的效率。Falcor利用了该JSON格式,允许应用程序把所有远端的数据源用一个单独的JSON Graph来表示,提高数据抓取的效率。而且,用户仍然可以使用get、set和call等熟悉的JavaScript方法进行数据读取等操作。 Falcor的一个理念就是,用户只要熟悉数据,就熟悉其API。此外,当用户需要访问数据时,Falcor会根据需求保证尽可能少的数据传输,同时保证大量数据传输的高效性。

Falcor的特点主要表现为三个方面——一个模型随处使用、数据即是API和云绑定。当使用Falcor时,客户端仍然像请求本地JSON对象一样请求远端的JSON资源。为了获得远端服务器中JSON资源中的值,客户端需要把服务器JavaScript的路径传递到JSON对象内的每一个希望获得的值中。然后,服务器就会把只包含这些值的JSON对象的子集返回到客户端。这样,客户端就可以把请求的多个数据轻松封装到一个URL请求中。为了保证应用服务器处于无状态模式,Falcor在处理请求的路径中加入了专门的路由器。这些路由器根据一个或多个JavaScript路径,来把请求发送到不同的服务器中。而且,路由器只向客户端暴露出了一个单独的JSON模型,使得客户端可以轻松获取来自不同服务器的数据。这种机制也就保证了Falcor的一个模型随处使用的特性。

另外一方面,Falcor并不需要用户来重新了解一些复杂的服务层。Falcor把远程数据封装为与本地数据同样的接口。客户端仍然可以使用类似的JavaScript路径和操作来处理数据。二者最大的差别只在于Falcor的客户端API是异步的。这样,服务器端的数据就可以自由移动,并不会影响到客户端的代码。最后,云绑定体现为Falcor采用的异步MVC模式。在Falcor中,视图、模型以及控制器之间的通信都是异步的。这样,在视图驱动数据抓取时,只有渲染一个视图需要的那部分数据被抓取,有效保证了通信数据的最小化。

此外,为了提高通信的效率,Falcor采用了缓冲、打包和去重三种策略。缓冲策略会把请求的数据暂存在本地。这样,下次同样的请求就可以直接从本地获取,大大减少通信量和响应时间。打包策略负责把若干小的请求汇集为一个大的请求,可以大大提高有效载荷的比例。去重策略则对请求进行过滤,去除不必要的请求。

目前,开发人员已经可以通过 Falcor官方网站GitHub 或者 npm 来下载开发者预览版Falcor。除了一些相对成熟的模块,该版本中包含了产品中还未使用的Falcor路由器的Node版本。 Netflix官方表示 ,其开发团队目前仍处在积极进行Falcor的网上工作。Falcor的发展路线图将在不久之后给出。Netflix希望通过本版本的发布,获得广大开发人员的反馈,从而为正式版的开发打好基础。