自2010年以来,我们一直提供“下载您的信息”服务,允许使用我们服务的用户访问他们与Facebook共享的数据的安全副本。2018年,我们宣布参与数据传输项目,这是一个与苹果、谷歌、微软和Twitter合作的项目,旨在为人们在在线服务之间传输数据建立一种通用方式。该项目的目标是使任何规模的服务更容易安全地将数据可移植性从一个服务直接传输到另一个服务,并使使用这些服务的人的流程更简单。
在过去的一年里,已经开发了一个开源框架。今天,我们宣布在Facebook上推出一个新工具,允许人们直接将照片和视频从Facebook传输到Google Photos。我们计划在不久的将来将这项服务扩展至其他服务。该工具将于今天开始在爱尔兰推出,并将于2020年初在全球范围内推出。
数据传输项目的任务是创建一个开源的、服务到服务的数据可移植性平台,以便Web上的所有个人都可以随时在在线服务提供商之间轻松地移动他们的数据。该项目通过提供一个开源库来实现这一点,任何服务都可以使用它来代表用户运行和管理直接传输。
与期望每家公司从头开始构建自己的系统不同,这个开放源码框架允许它们共享框架以及适配器和数据模型中的任何改进。例如,使用Data Transfer Project框架的公司只需为现有数据类型创建一个新的Data Transfer Project导入器,即可将该数据类型发送到新服务。这个新的导入者也可以贡献回开源项目,从而允许其他公司也可以输出到该新服务,而不需要额外的技术工作。
适配器,处理用户对服务(通常为OAuth)的身份验证以及与共享数据模型(导入器和导出器)之间的数据转换。
任务管理框架,它将所有部分放在一起并处理传输作业的生命周期,包括创建作业和运行传输。
数据传输项目可以在内存中本地运行以进行测试,也可以由想要试用代码的个人运行。该服务还具有高度的可扩展性,这使得它可以部署在云环境中,并作为企业级基础设施中的后端服务。有一些公共的开源扩展允许Data Transfer Project在Google Cloud平台和Microsoft Azure云托管提供商上运行。大规模部署Data Transfer Project以使其与我们的特定于基础设施的后端服务无缝协作需要一些深思熟虑的工程和设计工作。
我们在过去的一年里一直在为今天开始发布的照片和视频传输工具奠定基础。我们已经编写了自己的专有扩展,这些扩展与我们的工具集成在一起,并允许我们操作可靠的服务。我们首先需要验证系统的安全性和可靠性。然后,我们需要构建一个易于理解的界面,人们可以通过该界面发起传输并监控状态。同时,我们还必须编写各种扩展来允许开放源代码与该接口通信-以及与我们的后端系统通信。
任何将数据发送到服务之外的机制都有风险。我们已经采取措施来缓解这些风险。例如,我们使用常用协议OAuth通过目标服务对人员进行身份验证。随着我们继续添加更多的服务和数据类型,我们需要考虑几个因素。重要的是,系统只请求手头任务所需的权限。一旦传输完成,对目标服务的访问就应该结束。最后,转账只能由帐户所有者创建。为了验证这一点,我们要求人们在开始转账之前重新输入密码。一旦转账开始,我们还会向注册账户发送电子邮件,这样,如果人们改变主意或不承认请求,就有机会停止转账。
当任何两个系统之间存在依赖关系时,每个系统都要尊重对方的容量,这一点很重要。例如,如果一个人一次传输数千张照片,我们需要确保接收这些照片的系统能够管理该输入,而不会使其过载或造成瓶颈。这涉及到诸如速率限制和优雅地处理停机时间之类的事情。数据传输项目允许配置自定义重试策略以处理不同的错误消息。因此,如果我们在给定的一分钟内达到了每个人的最大请求数,系统就可以延迟下一个请求,以免使另一个系统负担过重。
开放源码具有作业存储的概念,但是为了利用我们现有的基础设施,我们需要一个自定义版本,该版本可以使用我们的主实体存储TAO检索和修改可移植性作业。这使我们能够利用TAO的可伸缩性和现有的索引、缓存、验证和许可功能。
此外,我们还编写了与我们的日志记录框架(如Scribe)集成的自定义监视实现。这意味着数据传输项目的日志可以与其他Facebook服务一致地生成,并与我们的分析和警报工具无缝集成。对于托管,我们可以通过创建特定于Facebook的部署策略,通过Tupperware管理传输工作人员,从而优化我们数据中心的计算资源。Tupperware还意味着我们可以有单独的发行层和生产层,允许在部署给用户之前在Facebook环境中对代码进行全面测试。通过与Configerator通信的分机,我们可以配置我们的传输工作进程。
我们相信,数据传输项目表明,行业主导的解决方案可以帮助使数据可移植性成为现实。我们还相信,人们应该能够将他们的数据从一项服务转移到另一项服务。我们很高兴能够推出这第一个工具,并期待着与更多的专家和公司合作,特别是与初创公司和新平台合作,因为这个项目正在继续扩大。我们致力于在接下来的几个月里继续构建更多的工具,使人们能够传输其他类型的数据。要了解有关Data Transfer Project开放源代码的更多信息,您可以阅读技术白皮书,观看我们的@Scale技术讲座,或访问GitHub存储库。