在这篇文章中,我们将讨论以下话题:

  • 每个开发者都应该知道的缓存陷阱
  • 编码 vs 加密 vs 令牌化
  • Kubernetes 工具栈轮
  • Meta 规模自动修复 bug
  • Pinterest 通过一行更改减少 99% 克隆时间

编码、加密和令牌化的区别

编码、加密和令牌化是三个不同的过程,以不同方式处理数据,用于各种目的,包括数据传输、安全和合规。

在系统设计中,我们需要为处理敏感信息选择正确的方法。

编码(Encoding)

编码使用可以轻松逆转的方案将数据转换为不同的格式。示例包括 Base64 编码,它将二进制数据编码为 ASCII 字符,使其更容易在专为处理文本数据而设计的媒体上传输数据。编码不是用于保护数据。编码的数据可以使用相同的方案轻松解码,无需密钥。

加密(Encryption)

加密涉及使用密钥转换数据的复杂算法。加密可以是对称的(使用相同的密钥进行加密和解密)或非对称的(使用公钥加密和私钥解密)。加密旨在通过将可读数据(明文)转换为不可读格式(密文)来保护数据机密性,使用算法和密钥。只有拥有正确密钥的人才能解密和访问原始数据。

令牌化(Tokenization)

令牌化是用称为令牌的非敏感占位符替换敏感数据的过程。原始数据和令牌之间的映射安全地存储在令牌库中。这些令牌可以在各种系统和过程中使用,而不会暴露原始数据,降低数据泄露风险。令牌化通常用于保护信用卡信息、个人识别号码和其他敏感数据。令牌化非常安全,因为令牌不包含原始数据的任何部分,因此无法逆向工程以揭示原始数据。它对于符合 PCI DSS 等法规特别有用。

Meta 自动修复 Bug

Meta 发布了一篇关于他们如何在 Facebook 规模自动化端到端修复的论文。让我们仔细看看。

一个名为 SapFix 的工具的目标是通过自动生成特定问题的修复来简化调试。

SapFix 的成功程度?

以下是一些已公布的细节:

  • 在 Facebook 应用家族的六个关键应用上使用(Facebook、Messenger、Instagram、FBLite、Workplace 和 Workchat)。每个应用由数千万行代码组成
  • 在 90 天的试点阶段,它为 57 次崩溃生成了 165 个补丁
  • 从故障检测到修复发送给人工审批的中位时间是 69 分钟

SapFix 如何工作?

  1. 开发者使用 Phabricator(Facebook 的 CI 系统)提交更改进行审查
  2. SapFix 从 Sapienz(Facebook 的自动化测试用例设计系统)选择合适的测试用例,并在提交审查的 Diff 上执行它们
  3. 当 SapFix 检测到由于 Diff 导致的崩溃时,它尝试生成潜在的修复。有 4 种修复类型 - 模板、变异、完全回退和部分回退
  4. 为了生成修复,SapFix 在补丁构建上运行测试并检查什么有效。想象一下像尝试不同拼图块来解决拼图
  5. 一旦补丁测试完成,SapFix 选择候选补丁并通过 Phabricator 发送给人工审查者审查
  6. 主要审查者是提出导致崩溃的更改的开发者。该开发者通常具有最佳技术上下文。其他工程师也订阅了提议的 Diff
  7. 开发者可以接受 SapFix 提出的补丁。然而,开发者也可以拒绝修复并丢弃它

Pinterest 的一行优化

虽然听起来可能陈词滥调,但小的更改肯定可以产生巨大影响。

Pinterest 的工程生产力团队在他们的单仓库代码库 Pinboard 的 Jenkins 构建管道中亲眼目睹了这一点。

他们做了一个小的更改,将克隆时间从 40 分钟降低到惊人的 30 秒。

作为参考,Pinboard 是 Pinterest 最古老和最大的单仓库。一些事实:

  • 35 万次提交
  • 完全克隆时大小为 20 GB
  • 每个工作日 6 万次 git pull

克隆拥有大量代码和历史的单仓库非常耗时。这正是 Pinboard 发生的情况。

构建管道(用 Groovy 编写)以”Checkout”阶段开始,其中为构建和测试步骤克隆仓库。

克隆选项设置为浅克隆、不获取标签且只获取最后 50 次提交。

但它错过了一个关键的优化部分。

Checkout 步骤没有使用 Git refspec 选项。

这意味着 Git 实际上为每次构建获取所有 refspec。对于 Pinboard 单仓库,这意味着获取超过 2500 个分支。

修复是什么?

团队简单地添加了 refspec 选项并指定了他们关心的 ref。在这种情况下是”master”分支。

这一单个更改允许 Git clone 只处理一个分支,并显著减少了单仓库的整体构建时间。

本文为学习目的的个人翻译,译文仅供参考。

原文链接:EP102: Encoding vs Encryption vs Tokenization

版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。