写点什么

WDT:多 TCP 链路的数据传输开源库

  • 2015-07-27
  • 本文字数:998 字

    阅读完需:约 3 分钟

作为国际著名的社交网站, Facebook 与开源项目一直关系密切。目前,其设立的开源项目个数已经超过200 个。这些开源项目在为广大开发人员提供便利的同时,也为Facebook 带来了各方面丰厚的回报。近日,Facebook 又公布了一个开源项目——超高速数据传输工具(Warp speed Data Transfer,WDT)。接下来,本文就对WDT 项目进行简要介绍。

从2004 年上线开始,Facebook 迅速发展。时至今日,Facebook 每月的活跃用户量超过20 亿。在西方的万圣节,Facebook 每天所接收到的照片数量更是多达20 几亿张。为了满足用户的巨大需求,该公司先后在美国俄勒冈州和北卡罗来纳州等多个地方建立了数据中心。那么,如何在数据中心内部的主机之间以及数据中心之间进行高效的数据传输就成了迫切需要解决的问题。为此,Facebook 设立了WDT 项目。

WDT 可以被视为一个嵌入式的库或者命令行工具,其目的是在尽量减少资源(CPU/ 内存等)消耗的情况下,利用多个 TCP 路径提高两个系统之间传送文件的效率。为了提高代码的可移植性,Facebook 尽量减少了 WDT 的依赖关系。由此,代码的编译时间也大量减少,并使得项目轻量化。此外,WDT 没有采用异常,以保证传输效率和代码的易于集成。

在传输机制方面,WDT 采用了阻塞式线程 IO,保证在任何点都会有线程在读和写。这样,数据就可以被缓冲在双向传输道路上,使得最小内核 / 用户空间切换的情况下,每个子系统仍然处于忙碌状态。正是这样的双向传输机制进一步保证了系统吞吐率的最大化。

目前,WDT 代码已经托管在 GitHub 中。其代码中包含了一个小的命令行工具 wcp.sh,用来测试传输性能。据透露,在Facebook 内部传输系统之间的RocksDB 快照时,WDT 通过长距离和高延迟的传输链路提供了高达600MB/s 的传输速率。相比于之前高度优化的基于HTTP 的传输方案,WDT 传输速率约是其3 倍左右,且系统资源消耗更少。在没有进行节流控制的情况下,WDT 可以轻易使得40Gb/s 的网卡饱和,并得到近乎理论的链路传输速度(大于4GB/s)。

未来,Facebook 会借助开源社区继续对WDT 项目进行改进。其关注点包括重新构建代码来使用无需复制的流/ 缓存流水线和处理乱序的报文等。


感谢徐川对本文的审校。

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

2015-07-27 08:4510419
用户头像

发布了 268 篇内容, 共 136.0 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

重学 Java 设计模式:实战策略模式「模拟多种营销类型优惠券,折扣金额计算策略场景」

小傅哥

Java 设计模式 小傅哥 重构 代码优化

Git 的远端操作及解析(含思维导图)

多选参数

git GitHub gitlab

公司一直用Mybatis的原因原来在这!不得不竖起我的大拇指

小闫

Java mybatis mybatis-config.xml mybatis缓存

架构训练营第五周 - 总结

无心水

极客大学架构师训练营

架构师训练营学习总结

John

极客大学架构师训练营

架构训练营第五周 - 作业

无心水

极客大学架构师训练营

Raft探索历程--Part2

老胡爱分享

分布式系统 raft

有了多线程,为什么还要有协程?

八两

线程 进程 协程 GMP 进程线程区别

【Python】 any() 和 or 区别你真的知道吗?

Leetao

Python 数据结构 Python基础知识

工业4.0|振动分析能做到预防性维护吗?

清水河路人甲

依赖倒置原则

John

极客大学架构师训练营

面试官:为什么需要happens-before规则和什么是指令重排序

无予且行

Java 编程 程序员 面试 happens-before

道路千万条,安全只三条

石君

安全评估 安全设计

三十张图助你看清红黑树的前世今生

淡蓝色

Java 程序员 数据结构 算法

针对GPU单指令多数据流的编译优化算法

GPU

gpu 编译器 程序语言 if-conversion

小白也有大厂梦,如何从零开始掌握高薪Java工程师必备技能?

无予且行

Java 架构 面试 后端 大厂

碎片化学习行不行

封不羁

Java程序员的必修课之Spring理解透彻了吗?不会还咋去面试?

犬来八荒

Java spring 面试 后端 框架

Hexo blog 创建指导手册

想飞的鱼

GitHub Hexo GitHub Pages Blog

[1.3万字] 玩转前端二进制

阿宝哥

Java 大前端 base64 Blob

一致性哈希 -- java 实现

lei Shi

现在面试这么难,背下题就能过的时代一去不复返了

小谈

Java 面试 JVM springboot SpringCloud

GeekPwn 2020少年黑客马拉松大赛即将开启 谁将CARRY全场?

Geek_116789

JVM中的双亲委派机制你还没懂吗?

阿文

Java JVMTI JVM 深入理解JVM JVM原理

它们为什么这么快:从多进程到多线程再到I/O复用

Ya

多线程 进程 并发

区块链系列教程之:比特币的问题

程序那些事

比特币 区块链 智能合约 以太坊

Java线程池最细的解释,看完后彻底征服面试官

小新

Java 架构 面试 线程 线程池

如果张东升是个程序员

程序员生活志

程序员 张东升

刚去面试现场聊了一个多小时的Redis ,悄悄分享给大家!

Java小咖秀

nosql redis 面试

视读——沟通的艺术,看入人里,看出人外(开篇)

废材姑娘

读书笔记 视觉笔记

从Servlet到Spring Boot

废材姑娘

Java Spring Boot

WDT:多TCP链路的数据传输开源库_Meta_张天雷_InfoQ精选文章