Falcor:Netflix的數據抓取開源庫

jopen 10年前發布 | 9K 次閱讀 Falcor

 

作為一家在線影片租賃供應商, 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希望通過本版本的發布,獲得廣大開發人員的反饋,從而為正式版的開發打好基礎。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!