七月大科技工程文摘

本文摘包含Airbnb优化数据访问、Etsy 实时广告个性化、Pinterest 时间序列数据工作、Wix 大迁移等!


1、[Airbnb] Riverbed:以 Airbnb 的规模优化数据访问 
概述了 Airbnb 的数据框架,以实现更快、更可靠的重读取工作负载 
作者:Amre Shakim

Airbnb 的增长加速了我们运营的数据库数量、它们所服务的数据类型的多样化以及访问这些数据库的数据密集型服务的增加,从而导致了复杂的数据基础设施和难以实现的面向服务的架构 ( SOA )管理。
我们注意到一种特定的查询模式,涉及访问多个数据源,具有复杂的水合业务逻辑,并且涉及难以优化的复杂数据转换。Airbnb 工作负载在读取路径上大量使用这些查询,这加剧了性能问题。
让我们来看看 Airbnb 的支付系统在从整体架构过渡到 SOA 后如何面临挑战。Airbnb 的支付系统很复杂,涉及访问多个数据源,同时需要复杂的业务逻辑来计算费用、交易日期、货币、金额和总收入。然而,在 SOA 迁移之后,这些计算所需的数据分散在各种服务和表中。这使得以简单且高效的方式提供所有必要的信息变得具有挑战性,特别是对于读取量大的请求。
一种可能的解决方案是注册最频繁的查询,预先计算非规范化支付数据,并提供一个表来存储计算结果,使其针对读取繁重的请求进行优化。这称为物化视图,并由许多数据库作为内置功能提供。
在数据分布在多个数据库中的 SOA 环境中,我们创建的视图取决于来自不同来源的数据。该技术在工业界被广泛采用,通常使用变更数据捕获(CDC)、流处理和数据库的组合来实现,以保存最终结果。
Lambda 和 Kappa 是两种实时数据处理架构。Lambda 将批处理和实时处理相结合,以高效处理大数据量,而 Kappa 只专注于流处理。Kappa 的简单性提供了更好的可维护性,但它给实现回填机制和确保数据一致性带来了挑战,尤其是在发生乱序事件时。
为了应对这些挑战并简化分布式物化视图的构建和管理,我们开发了 Riverbed。Riverbed 是一个类似 Lambda 的数据框架,它抽象了维护物化视图 的复杂性,从而实现更快的产品迭代。

2、[Meta] 介绍 Llama 2, 现在可免费用于研究和商业用途

3、[Expedia] 《成为代码审查员的重要性》 
介绍了对他人代码提供反馈的框架 
作者:Carlo Sales
持续审查他人的代码可以提高您的技能并为您的职业生涯带来好处。您可以帮助他人成长,并为您合作的公司创造价值。
在本文中,我们将了解在拉取请求(PR)中审查代码的好处,以及有关执行此操作时应遵循的方法的一些建议,例如与其他同事交互。

4、[Wix] 大迁移 - 我们如何迁移所有高级订阅 
分享了一个关于 "面包和黄油 "付费客户的大规模、具有挑战性的迁移故事 
作者:加文-里夫金德(Gavin Rifkind)

在 Wix,我们最近面临将所有高级计划订阅迁移到新系统的挑战。这是一个极其敏感的迁移,因为我们正在与我们的“面包和黄油”付费客户打交道,我们需要确保它对这些用户来说是完全透明的,并且他们不会失去他们已付费的任何功能。
在本文中,我将讨论这次迁移的历程,包括一些挑战、经验教训,以及我们如何利用“消息驱动设计”的一些力量来实现我们的目标。
....
在这里,我们再次使用了领域事件,但这一次是出于不同的原因。由于迁移过程中可能会出现问题,因此我们利用了事件驱动架构内置的重试机制,以确保最终整个帐户能够成功迁移。在 PlanMigrator 中,我们使用了 AccountMigrationStarted 和 PlanMigrationStarted 事件,并使用重试策略来确保如果迁移过程中出现任何失败,都会重试。
这种方法需要幂等性,这样如果一个事件被多次使用,流程应该能够从失败的地方“恢复”,而不是再次启动流程并导致可能的数据重复。重试用于处理意外故障,例如无法访问微服务,或者数据库过载且更新失败。
我们使用了退避重试策略,1 分钟后重试,然后 1 小时,然后 3 小时等。这种类型的策略可以很好地处理由于意外的系统相关错误而导致的故障。但是由于代码错误导致的失败怎么办?为了解决这个问题,我的一位同事建议在 30 小时后再重试一次。这将使我们有时间修复任何错误,并且故障将自动退出,而不需要手动重新触发。

5、[Pinterest] 分析时间序列以实现 Pinterest 的可观察性 
Brian Overstreet 和 Humsheen Geo
讲述了 Pinterest 时间序列的背景、设计具有表现力的时间序列语言的目标以及示例 。时间序列是 Pinterest 可观察性的关键部分,为 60,000 个警报和 5,000 个仪表板提供支持。时间序列是具有值的标识符,其中值与时间戳相关联。鉴于时间序列的广泛使用和关键性质,让工程师能够以可读、可理解和高效的方式充分表达对时间序列执行哪些操作非常重要。在这篇文章中,我们将介绍 Pinterest 时间序列的背景、设计富有表现力的时间序列语言的目标,以及我们今天如何使用这种语言的一些示例。

6、[InfoQ] 《2023 年 7 月开发运维与云计算 InfoQ 趋势报告》 
作者:Steef-Jan Wiggers 和 Daniel Bryant

7、[Instacart] Instacart如何在节约成本的同时实现对数亿件商品实时可用性的现代化预测 
作者:Jack He在 Instacart,
我们为客户提供服务的目标是找到并交付他们想要从他们最喜欢的杂货店购买的所有产品。
实体店的库存存在波动,尤其是在新冠疫情大流行之后,供应链一直不稳定。因此,预测每种产品的库存状态(有货、库存不足和缺货)是我们使用机器学习面临的一大挑战。
我们的目标是为客户提供最新的库存预测,以便他们能够预期得到他们订购的产品。我们的购物者社区每天扫描数百万件商品并将其交付给客户。每当购物者将商品扫描到购物车或将商品标记为“未找到”时,我们都会将此视为另一个信号,帮助我们对商品在店内的可用性进行精细预测。有时,当某些商品库存不足时,我们会在 Instacart 应用程序中与客户进行沟通(,以便他们可以提前选择替代产品或选择替代品。

8、[Etsy] 利用实时用户行为个性化 Etsy 广告 
作者:Alaa Awad 和 Denisa Roberts
我们在最近的论文中详细描述了我们的方法,重点是个性化我们在 Etsy Ads 中使用的 CTR(点击率)和 PCCVR(点击后转化率)排名模型。在这里,我们想做一个简短的概述。
Etsy 为其卖家提供放置赞助商列表的机会,作为 Etsy 搜索返回的有机结果的补充。对于卖家和买家来说,重要的是这些赞助列表尽可能与用户的意图相关。
为了使广告具有相关性,它们需要个性化。
如果我们将“会话”定义为一小时的购物窗口,并制作会话样本中查看的列表总数的直方图,我们就会看到幂律分布的出现。绝大多数用户在离开会话之前仅与少数列表进行交互。
简单地从列表视图的角度来理解,会话个性化似乎是一个难以克服的挑战。为了克服这一挑战,我们利用围绕这些视图和传达意图的丰富的用户操作流,例如:搜索查询、项目收藏夹、视图、添加到购物车和购买。我们的排名人员可以利用这些用户操作后几秒钟内提供的流媒体功能来优化当前的购物体验。

9、[Pinterest] 在 Pinterest 安全扩展大数据访问控制 
作者:Soam Acharya 和 Keith Regier
企业收集许多不同类型的数据。每个数据集都需要安全存储,并授予最少的访问权限,以确保它们得到适当使用,并且在必要时可以轻松找到和处置。随着业务的增长,这些数据集的种类及其处理要求的复杂性也在增加。因此,访问控制机制也需要不断扩展以应对不断增长的多样化。Pinterest 决定投资更新的技术框架来实施更细粒度的访问控制(FGAC) 框架。结果是一个多租户数据工程平台,允许用户和服务仅访问他们工作所需的数据。在这篇文章中,我们重点讨论如何增强和扩展Monarch,Pinterest的基于Hadoop的批处理系统,具有FGAC功能。