Meta降本增效大招之:自动删除数据

e86edec442f5d990d5c7efc660831c51.jpeg

这是一个系列博客。介绍的是Meta如何通过弃用产品、清理代码、删除数据以实现降本增效。这对于效能平台的建设非常具有指导意义。

上一篇介绍的是如何自动清理死代码,本篇介绍如何自动化删除数据。也是本系列的最后一篇。

文章最后有原文链接和我个人的总结。懒的同学,可以翻到文章最后。

译文:

这是我们关于Meta系统代码和资产移除框架(SCARF)系列的第三篇也是最后一篇文章。SCARF 包含多个子系统,可分析整个Meta系统中的代码和数据使用情况,从而帮助安全、高效地移除弃用产品。在第一篇关于自动化产品报废的文章中,我们讨论了产品报废的复杂性,并介绍了 SCARF 的工作流管理工具,该工具可引导工程师通过协调流程安全地报废产品。在第二篇关于自动清理死代码的文章中,我们讨论了SCARF的死代码子系统及其分析代码静态和动态使用情况的能力,从而自动生成更改请求以删除未使用的代码。在整个系列文章中,我们都提到了一个名为 "Moments "的照片分享应用的弃用例子,该应用于2015年推出,最终于2019年关闭。

在这篇文章中,我们将介绍Meta负责自动识别和安全删除未使用数据类型的子系统。这个过程可能会遇到意想不到的困难,因为大型软件系统不可避免地相互关联。Moments依赖于多个共享的 Facebook功能和基础设施,删除它比简单地关闭服务器和删除数据表要复杂得多。

未使用数据清理

SCARF实现了一个未使用数据类型清理系统,Meta工程师可在需要确保一致地删除未使用数据时加以利用。SCARF扫描数据系统,以识别存储的每种数据类型(例如,识别关系数据库中的所有表),并确定每种数据是否正在使用。如果有任何资产未被使用,SCARF 就会启动一个程序,安全地删除这些资产。

SCARF跟踪的数据类型各不相同,包括数据库表、共享存储系统中的分区“用例”或对象类等。每种数据都代表一类数据,而不是单个记录。Meta有一个单独的系统DELF,用于删除单个记录、行和对象。

SCARF 协调每个数据系统的几种任务:元数据收集(如数据数量、字段类型)、使用情况收集、分析和操作。这些任务有一些共同的组成部分,并遵循标准化格式;但是,每个支持的数据系统都有其固有的实施方式。

4ce794ad0fbe157c578bc14d513f0012.png

度量使用情况

SCARF 跟踪两个主要指标来确定删除是否安全:SCARF 通过识别查询数据类型的代码来衡量静态使用情况;通过观察生产中的访问模式来衡量运行时使用情况。

正如我们在博文《自动清理死代码》中提到的,SCARF 使用 Glean 对 Meta 的代码库进行静态分析。Glean 以索引化、标准化的格式呈现从编译器中提取的静态分析结果。SCARF 可通过查询 Glean 来查找似乎引用了各类数据的代码。例如,存储在 Meta 对象图数据系统 TAO 中的每种数据类型都有一个枚举值作为引用:我们可以找到每种枚举值在多种语言代码中的用法。

viewed_photo = TAO.fetch(id=objectId,type=TAOType.USER_VIEWED_PHOTO,
)

SCARF还度量每种数据类型在运行时的使用情况。我们通过在Meta的数据系统中添加计数器来仪表化,显示每种数据类型从数据源(如来自我们Web服务器群的生产流量)接收了多少读取,同时忽略由备份基础设施产生的流量。

我们的一些数据系统,如 TAO,每秒接收数十亿次请求。对这种规模的数据系统进行仪表化,同时确保我们只测量特定类型的使用情况,对避免代价高昂的性能下降提出了复杂的工程挑战。

协调删除

一旦SCARF检测到某种数据类型完全未被使用,通过结合我们的元数据、流量分析和代码引用的信号,它会通过内部工单通知负责该数据类型的工程团队,清理将继续进行。

经过一段配置时间后,SCARF会通过数据系统特定机制阻止所有读写操作。这段时间非常重要,因为它可以作为数据真正删除时的模拟运行。一旦这段时间过去,数据就会被删除。系统会保存一个内部日志,记录它为我们的记录所执行的操作。

例如,如果 TAO 中的某类数据没有代码引用或生产流量,在发出通知并等待是否有反对意见后,SCARF 将指示 TAO 在服务试图读取或写入该类数据时提示错误。在进一步的监控阶段之后,它将指示 TAO 删除数据。

f558d8aa64fa5bb1475e0163ff67e327.png

请注意,SCARF在提交内部请求时不会等待工程师的确认 - 系统偏向于自动删除未使用的数据类型,并依靠其彻底的分析来确保仅删除未使用的数据。如果某些数据闲置的时间足够长,那么当自动化清理它时,出现问题的可能性就会越来越小。偏向于自动化可以提高效率,并使系统能够超越需要手动批准每个操作的流程。

如果出现错误,访问限制期可作为一个缓冲期,在数据删除之前,任何错误都可以被发现,我们的分析也可以更新,以考虑到任何缺失的信号。在最坏的情况下,如果数据被删除但本不应该删除,Meta 的许多系统都会提供备份,以防止数据丢失。

工程师可以通过多种方式与 SCARF 的删除流程进行交互。如前所述,他们可以覆盖 SCARF 检测到的使用信号,以便继续进行删除,如果他们确定这些信号是假阳性信号的话。他们还可以通过缩短等待时间来加快进程。最后,工程师可以将他们注意到的问题反馈给我们构建 SCARF 的团队:在 SCARF 收集到的使用信号中,工程师经常会发现假阳性(SCARF 检测到某物已被使用,但实际并未使用),很少会发现假阴性(SCARF 检测到无使用,但实际有使用)。

处理跨系统依赖关系

Meta 有许多不同的数据存储系统,其中许多系统都是专门用于某种用途的。一个高质量的产品往往需要多个不同数据系统的功能。例如,TAO 是一个图形数据库,擅长为许多小型快速查询提供服务,但它不能用于机器学习、排名或聚合等任务。因此,Meta 经常为单个产品利用多个数据存储系统,包括在系统间移动数据的数据管道。因此,SCARF 必须了解这些系统之间的相互联系,以确保数据从每个存储位置移除,并防止数据删除顺序发生错误。

SCARF通过一套已生成的资产关系进行建模。对于给定的资产及其相应的入站和出站依赖关系,SCARF 会确定关系的性质,从而决定必须先删除哪个资产,以及删除一个资产是否需要删除另一个资产。例如,有些资产的存在完全是系统间数据移动的结果,必须在多步骤过程中一起删除。SCARF 中的这种系统关系建模能够更彻底地协调数据清理工作,并防止系统尝试删除不按顺序排列的资产。

处理代码使用情况

将Meta的代码和数据定义视为单个依赖图,SCARF可以被视为修剪该图中的叶子和孤立节点的系统。这个依赖图随着每一项工程工作的进行而随时间而变化,每个工程工作都会产生新的节点和边。

如果 SCARF识别出可以使用该数据的代码,即使该代码没有运行,它也无法自动删除数据:根据设计,SCARF不会破坏该图中的边。例如,如果工程师出于调试目的提交引用TAO中某种数据类型的脚本,SCARF会正确地将其识别为对用例的引用并防止删除 - 即使该脚本不再使用。

如本系列第二部分中所述,SCARF的死代码子系统通过自动删除已知的死代码来帮助解决这个问题。如果死代码系统能够删除未使用的脚本,那么未使用的数据也可以被删除。

大规模删除数据

删除未使用的数据类型不仅简化了我们的内部基础设施,而且还节省了容量成本。在过去的一年里,我们删除了存储在 21 个不同数据系统中的 1280 万种不同数据类型的 PB 级闲置数据。在许多产品中,单个数据可能包含标识符(主键)和少量数据,但在Meta的规模下,有数十亿个这样的行。在我们的仓库中,以及在我们的备份中,我们的服务在例行使用中记录的数据,提供分析、操作日志或分析,也包含了数十亿行,乘以历史数据的保留以及我们的备份。

SCARF 每天同时对数百万资产进行操作,大大减少了我们团队手动干预和清理未使用数据的开销。维护 SCARF 的团队与我们构建和维护这些不同数据系统的同事建立了牢固的合作关系,充分利用他们的专业知识,共同提供SCARF调用的API,以安全地限制数据访问并最终清理数据。

SCARF 每天都在运行:产品和功能的生命周期意味着每天都有新的数据类型产生,同时每天也有闲置的数据类型产生。定期运行系统可确保在资产的最后引用被删除时,SCARF能够迅速捕捉到这些变化,并触发相关的自动化。

SCARF摘要

SCARF 为公司的工程团队提供了一套强大的工具。它的工作流程管理工具为数以千计的人工废止项目提供了支持,同时还自动清理了数以百万计的代码和数据资产。

SCARF 对 Meta 的隐私团队也很有用:我们可以使用该工具监控正在进行的产品废止工作的进度,确保它们及时完成。当我们的自动化系统无法完成某些工作时,SCARF 的内部工具会让工程师了解他们需要做什么以及如何安全地完成这些工作。SCARF提供的信息并不是泛泛而谈的:它针对工程师正在删除的特定代码和数据量身定制,使他们能够以最高效的方式做出正确的决定。

通过讨论像SCARF这样的隐私创新,我们希望为我们在基础设施方面的持续投资创造透明度,从而为使用我们产品和服务的用户提供隐私保护。我们致力于自动化和协调未使用代码和数据的全面删除,这只是我们在 Meta 专注于实质性隐私设计措施的一个例子。

即使像Meta这样复杂而庞大的基础设施,也可以安全、高效、彻底地进行产品弃用处理。将自动化与工程工具相结合是一种久经考验的策略,我们发现这种策略非常有效。我们在这一领域的投资是长期的,因为产品报废是数据生命周期的一个持续部分,这有助于像Meta这样的大型科技公司取得持续成功。

=译文完=

原文链接:https://engineering.fb.com/2023/10/31/data-infrastructure/automating-data-removal/

个人总结

  • • 自动删除未使用的数据目的:

    • • 简化内部基础设施、节省容量成本;

    • • 减少团队管理数据资产的开销。

  • • 如何检测出数据是否应该被删除?未被引用的数据,则会被启动删除程序进行删除。

    • • 通过识别查询数据类型的代码来衡量静态使用情况。

    • • 通过观察生产中的访问模式来衡量运行时使用情况。

  • • 如何处理误删

    • • 由备份系统垫底

  • • SCARF的工作步骤:

  1. 1. 每日检测是否存在未被使用的数据;

  2. 2. 检测到未被使用的数据,提工单给负责该数据的工程团队;

  3. 3. 工程团队配置时间(指的是数据保留的最后期限,也叫访问限制期。模拟数据被删除的场景一段时间);

  4. 4. 在访问限制期内,如果有服务要访问这个数据,相应的数据系统会报错。这一行为由SCARF指示;

  5. 5. 当到了配置的时间点后,数据会被SCARF自动删除,并记录下操作日志。

• 在SCARF中,资产的被删除顺序是如何确定的:SCARF 通过一套已生成的资产关系进行建模。对于给定的资产及其相应的入站和出站依赖关系,SCARF 会确定关系的性质,从而决定必须先删除哪个资产,以及删除一个资产是否需要删除另一个资产。

本系列前两篇文章:

  • Meta降本增效大招之:自动清理死代码

  • Meta降本增效大招之:弃用产品

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/194729.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Kingbase FlySync】命令模式:部署双轨并行,并实现切换同步

【Kingbase FlySync】命令模式:安装部署同步软件,实现Oracle到KES实现同步 双轨并行方案说明一.准备工作二.环境说明三.目标实操(1).准备安装环境Orcle服务器(Oracle40)1.上传所有工具包2.操作系统配置a.增加flysync 用户、设置密码b.配置环境变量c.调整limits.conf…

气候更换,气运也会随之变化

天人合一,人天相应,人体与宇宙天体的运行互相感应相通,与大自然的万千变化紧密联系。阴阳转换,带来的气场和磁场的变化,对自然界万事万物和人影响很大。 蒹葭苍苍,白露为霜,所谓伊人&#xff0…

webservice笔记

1,简介 webservice,是一种跨编程语言和跨操作系统平台的远程调用技术。 webservice三要素:soap、wsdl、uddi2,服务端 2.1创建项目 2.2 编写服务类,并发布服务 import com.test.service.impl.HelloServiceImpl; impo…

gitlab环境准备

1.准备环境 gitlab只支持linux系统,本人在虚拟机下使用Ubuntu作为操作系统,gitlab镜像要使用和操作系统版本对应的版本,(ubuntu18.04,gitlab-ce_13.2.3-ce.0_amd64 .deb) book100ask:/$ lsb_release -a No LSB modules are available. Dist…

java--贪吃蛇

import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.Random;public class Snake extends JFrame implements KeyListener, ActionListener, MouseListener {int slong 2;//蛇当前长度//蛇坐标int[] Snakex new int[100];int[] Snakey new…

如何使用贝锐花生壳内网穿透远程访问JupyterNotebook?

在数据科学领域,Jupyter Notebook 已成为处理数据的必备工具。 其用途包括数据清理和探索、可视化、机器学习和大数据分析。Jupyter Notebook的安装非常简单,如果你是小白,那么建议你通过安装Anaconda来解决Jupyter Notebook的安装问题&#…

贝锐蒲公英路由器X4C如何远程访问NAS?

在目前网盘前路坎坷的情况下,私人云盘已然是一种新的趋势!那自己打造一个私有云盘,是否需要高成本或是高门槛呢?其实并不用!蒲公英针对个人玩家打造了全方位的私有云解决方案。 (1)入门级玩家只…

Unity 场景烘培 ——unity Post-Processing后处理1(四)

提示:文章有错误的地方,还望诸位大神不吝指教! 文章目录 前言一、Post-Processing是什么?二、安装使用Post-Processing1.安装Post-Processing2.使用Post-Processing(1).添加Post-process Volume&#xff08…

解析Spring Boot中的CommandLineRunner和ApplicationRunner:用法、区别和适用场景详解

在Spring Boot应用程序中,CommandLineRunner和ApplicationRunner是两个重要的接口,它们允许我们在应用程序启动后执行一些初始化任务。本文将介绍CommandLineRunner和ApplicationRunner的区别,并提供代码示例和使用场景,让我们更好…

Hive调优

1.参数配置优化 设定Hive参数有三种方式: (1)配置Hive文件 当修改配置Hive文件的设定后,对本机启动的所有Hive进程都有效,因此配置是全局性的。 一般地,Hive的配置文件包括两部分: a&#xff…

线性变换功能块S_RTI工程上的主要应用

西门子S_RTI模拟量转换功能块算法公式和代码介绍请参考下面文章链接: PLC模拟量输出 模拟量转换FC S_RTI-CSDN博客文章浏览阅读5.3k次,点赞2次,收藏11次。1、本文主要展示西门子博途模拟量输出转换的几种方法, 方法1:先展示下自编FC:计算公式如下:intput intput Real IS…