大规模可观测性揭秘:Netflix 如何通过标题玩转全球内容发布?

news/2024/12/19 23:01:46/文章来源:https://www.cnblogs.com/JavaEdge/p/18618081

1 导言

在 Netflix,我们每月管理着上千个全球内容发布项目,每年的投资额高达数十亿美元。确保每部影片在我们平台上的成功和可发现性是我们的首要任务,因为我们的目标是将每个故事与合适的受众联系起来,让我们的会员满意。为了实现这一目标,我们致力于建立强大的系统,提供全面的可观察性,使我们能够对我们服务中的每个标题负全责。

2 可观测性的挑战

作为工程师,我们习惯跟踪错误率、延迟和 CPU 利用率等系统指标,但对标题的成功至关重要的指标呢?

不同的 Netflix 主页示例

主页样本 A:

样本主页 B:

对于一个基本的推荐系统,这两个示例页面可能看起来等同,只要浏览者观看顶部标题即可。但其实这两个页面却截然不同。每个标题都代表了无数小时的努力和创造,我们的系统需要尊重这种独特性。
咋弥合这种差距?咋才能设计出认识到这些细微差别的系统,让每个职称都能发光发热,为会员带来欢乐?

3 个性化系统的运行需求

Netflix Originals 的早期,我们的发布团队会在午夜时分聚集在一起,手动验证影片是否出现在所有正确的位置。虽然这种亲力亲为的方法对少数作品有效,但很快就发现它无法扩大规模。随着 Netflix 在全球范围内的扩张和片头发布量的激增,维持这种手动流程所带来的运营挑战已成为不争的事实。

在为全球流媒体服务运营个性化系统的过程中,需要处理大量有关特定时间和地点为何会出现或不会出现某些标题的询问,如:

  • 为什么标题 X 没有显示在某个会员的 "即将推出 "行中?
  • 为什么巴西的搜索页面缺少标题 Y?
  • 标题 Z 是否按预期在所有产品体验中正确显示?

随着 Netflix 规模的扩大,我们面临着越来越大的挑战,即如何为有关标题性能和可发现性的日益复杂的查询提供准确、及时的答案。这导致了一套分散在各个团队的零散脚本、运行手册和临时解决方案--这种方法既无法持续,也不高效。

要确保每个标题都完美无瑕地发布,赌注就更大了。元数据和资产必须正确配置,数据必须无缝流动,微服务必须无差错地处理标题,算法必须按预期运行。这些操作需求的复杂性凸显了对可扩展解决方案的迫切需求。

4 自动化操作

随着时间的推移,我们逐渐发现,我们需要实现业务自动化,以便随着业务的扩展而扩展。当我们进一步思考这个问题和可能的解决方案时,出现了两个明确的选择。

4.1 日志处理

日志处理为监控和分析标题启动提供了直接的解决方案。通过记录所有标题的显示过程,我们可以处理这些日志以识别异常情况并深入了解系统性能。这种方法有以下几个优点:

  1. 对现有系统造成的负担小:日志处理对现有基础设施的改动极小。通过利用常规操作中已经生成的日志,我们可以在不对系统进行重大修改的情况下扩展可观测性。这样,我们就可以专注于数据分析和问题解决,而不是管理复杂的系统变更。
  2. 使用真相来源:日志提供了系统事件的全面记录,是可靠的 "真相来源"。通过日志,我们可以验证标题是否按预期呈现,并调查任何差异。这种能力对于确保我们的推荐系统和用户界面正常运行、支持成功发布标题至关重要。

但也带来挑战:

  1. 提前发现问题:日志记录主要是针对启动后的情况,因为只有在向会员展示标题后才会生成日志。为了主动发现问题,我们需要提前模拟流量并预测系统行为。一旦产生人工流量,丢弃响应对象并完全依赖日志就会变得效率低下。
  2. 适当的准确性:全面记录要求服务记录包含和排除的标题,以及排除的原因。这可能导致记录的数据呈指数增长。使用概率记录方法可能会影响准确性,使人难以确定记录中缺少的标题是由于排除还是偶然。
  3. 服务水平协议和成本考虑:我们现有的在线日志系统不支持标题粒度级别的日志记录。虽然可以重新设计这些系统,以适应这一额外的轴,但会增加成本。此外,这些调查具有时间敏感性,因此不能使用冷存储,因为冷存储无法满足严格的 SLA 要求。

4.2 个性化系统中的可观察终端

为了优先考虑标题发布的可观察性,我们可以采用集中式方法。通过在所有系统中引入可观察性端点,我们可以将实时数据流引入标题发布可观察性专用微服务。这种方法可将可观察性直接嵌入到管理标题发布和个性化的服务结构中,确保无缝监控和洞察。主要优势和策略包括

  1. 实时监控:Observability 端点可对系统性能和标题位置进行实时监控,使我们能够在问题出现时及时发现并解决。
  2. 主动问题检测:通过模拟未来的流量(我们称之为 "时间旅行")并提前捕捉系统响应,我们可以在潜在问题影响会员或业务之前先发制人地发现它们。
  3. 增强准确性:可观察性端点提供有关标题包含和排除的精确数据,使我们能够对系统行为和标题可见性做出准确的断言。它还为我们提供了修复已发现问题所需的高级调试信息。
  4. 可扩展性和成本效益:虽然初始实施需要一定的投资,但这种方法最终为管理 Netflix 规模的标题发布提供了一种可扩展且具有成本效益的解决方案。

选择这一方案也会带来一些折衷:

  1. 初期投资巨大:一些系统需要创建新的端点并重构代码库,以采用这种新的方法来确定启动的优先级。
  2. 同步风险:这些新端点可能无法准确反映生产行为,因此需要有意识地确保所有端点保持同步。

下一页

通过采用全面的可观察性策略(包括实时监控、主动问题检测和真实源调节),我们大大增强了确保在 Netflix 上成功发布和发现影片的能力,丰富了会员的全球观看体验。在本系列的下一部分,我们将深入探讨我们是如何实现这一目标的,并分享关键技术见解和细节。

本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。

各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化
  • 活动&券等营销中台建设
  • 交易平台及数据中台等架构和开发设计
  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
  • LLM Agent应用开发
  • 区块链应用开发
  • 大数据开发挖掘经验
  • 推荐系统项目

目前主攻市级软件项目设计、构建服务全社会的应用系统。

参考:

  • 编程严选网

本文由博客一文多发平台 OpenWrite 发布!

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

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

相关文章

Netty的高性能之道

一、概述 1.1 惊人的性能数据 最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用。相比于传统基于Java序列化+BIO(同步阻塞IO)的通信框架,性能提升了8倍多。 事实上,我对这个数据…

javaweb实战02

javaweb实战02 本次开始配置目录和包以及构建数据库然后就可以按照业务逻辑书写页面,页面包含登录和注册两个功能 首先开发登录页面 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page isELIgnored="false"…

1大模型应用开发基础

一、目标 懂得AI,懂得编程、懂得业务的超级个体,将会是AGI时代最重要的人。 AI使得一个人能够干多个人的活 想要做到“AI全栈”需要涉及的知识面是非常广泛的,单单学习一门课程是不能全部涉及的 我们首先需要做的是入门,后面走的深入,走的远只能靠自己,依靠社群,和AI的进…

grpc安装(windows or Linux)

grpc安装(windows or Linux) 下载源码 这里使用 gRPC 最新版本源代码进行编译和安装,版本号为 v1.50.0, 以下为安装步骤: 一、使用Git克隆gRPC到本地 在终端中打开某一文件夹,建议新建一个单独存放 gRPC 源代码的文件夹,输入: git clone -b v1.50.0 https://github.com/…

Golang内存模型与源码解析

0、引言 本篇笔记用于记录作者在学习Golang的GC模型之前,对Golang内存模型的学习。目前使用的Go版本为1.22.4 1、Golang内存管理宏观结构 假设我们每次向内存池申请空间时,都需要频繁地向操作系统发出请求,这不仅会增加内存分配的时间,还可能引入竞争和锁的开销,从而导致性…

图床试验

本文来自博客园,作者:Glowingfire,转载请注明原文链接:https://www.cnblogs.com/Glowingfire/p/18617999

一文搞定理解RPC

前言RPC概念RPC协议RPC组成RPC协议RPC框架RPC的优点RPC与HTTP的区别 前言 RPC的概念相信很多软件从业人员或多或少都接触过,从开发到测试都可能需要跟它打交道。 但是对于为什么要用RPC?RPC的优点是什么?RPC是什么原理?它跟HTTP有什么不同?相信并不是每个人都比较熟悉。 那…

全场景一站式2024最新vmware环境下安装win7并且破解QTP

目录VMwareVMware和Ubuntu下载链接下载Win 7 系统各个操作系统网站激活码是什么查看是否激活激活操作vmware下安装ubuntu创建虚拟机下载VMtool灰色灰色按键点击不了下载提示有问题原因文件传递共享文件借助外界U盘有了VMTool就可以直接拖拽!!!!有了VMTool就可以全屏化——倒…

20222321 2024-2025-1 《网络与系统攻防技术》实验八实验报告

一.实验内容 (1)Web前端HTML 能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。 (2)Web前端javascipt 理解JavaScript的基本功能,理解DOM。 在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎…

数量

技巧 比例型 出现一个比例,存在四种倍数关系倍数 你们有啥公因子,我也必须有尾数 出现乘法,分析个位,考虑尾数 。乘法中出现5和10尾数就确认了奇偶 与偶数相乘一定是偶数,与奇数相乘可能为偶数也可能为奇数拓展猜题 当 A = B*C ,求A ,考虑A的倍数 工程问题 利润问题 求最…

LVGL学习 - Visual Studio外部“.c.h”文件添加

LVGL项目工程添加“.c.h”文件后 “C1083”“LNK2019”报错的解决方法一、首先把文件添加至工程,现有项选择所需添加的“.c.h”文件但还是会有如下报错,解决方法在第2步。二、“.c”文件需要添加“extern "C"” 下图截至官方文档我试了只添加“extern "C"…