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 )关注我们,并与我们的编辑和其他读者朋友交流。
评论