Facebook 开源 Haxl:使用 Haskell 进行隐式并发数据访问

  • Roopesh Shenoy
  • 曹知渊

2014 年 6 月 17 日

话题:Facebook语言 & 开发架构

Facebook 开源了 Haxl,一个为高效并发数据访问而开发的库。这个库一方面利用了 Haskell 的传统优势,比如表达力很强的类型系统、对正确性和安全性的保障,另一方面也受益于 GHC(译者注:Haskell 编译器)的高性能运行时库,解决烦人的隐式并发数据访问的问题。

Haxl 简化了对远程数据的访问,比如数据库网站服务。对同一数据源的多个访问请求,或同时从不同的数据源请求数据,它都能批量处理,并且缓存上一次的结果。Jon Purdy 是开发 Haxl 的工程师之一,他解释说——

这里基本的思想是,你可以写点幼稚的代码来获取数据,它们看起来效率可以非常低下——比如循环查询、没有明显的去冗余——但在底下它就被神奇地编译成了高效的并行获取代码。

为了在你的应用中使用 Haxl,你需要创建一个简单的软件层来表示你的数据源,以及描述如何访问它。

Haxl 使用 Applicative 数据类型来使计算机指令以隐式的并行方式运行。从这个演讲里面你可以了解它更多的工作原理。你可以在hackage上找到 Haxl,也可以访问它在Github 上的源码

Haxl 是 FXL 的替代者,FXL 也是为了解决同一问题而诞生的。虽然 FXL 有一个干净的执行模型,但它的实现有明显的性能问题,尤其是对 CPU 和内存的使用。使用 Haskell 和 GHC 是最好的选择。你可以了解更多Haxl 背后的故事以及 Facebook 当前使用它的案例。


感谢张龙对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

Facebook语言 & 开发架构