AS北京2017-《知乎 Feed 流构架演进》-姚钢强.key

Similar documents
Intruduction to the NGINX stream subsystem and OpenResty's support

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

OpenResty在又拍云容器平台中的应用

碩士論文封面.doc

ac2017-joeyguo-2.0.key

PowerPoint Presentation

嘉義市政府暨附(所)屬機關電話禮貌測試實施要點

加 值 型 及 非 加 值 型 營 業 稅 法 第 12 條 ( 公 布 ) 特 種 飲 食 業 之 營 業 稅 稅 率 如 下 : 一 夜 總 會 有 娛 樂 節 目 之 餐 飲 店 之 營 業 稅 稅 率 為 百 分 之 十 五 二 酒 家 及 有 陪 侍 服 務 之 茶 室

响应式在iOS开发中的应用 For PDF

<4D F736F F D C2E0BEC7A6D2A4ADB14DB0EAA4E52DB8D5C344A8F72E646F63>

A API Application Programming Interface 见 应 用 程 序 编 程 接 口 ARP Address Resolution Protocol 地 址 解 析 协 议 为 IP 地 址 到 对 应 的 硬 件 地 址 之 间 提 供 动 态 映 射 阿 里 云 内

团 市 委 首 笔 爱 心 捐 款 及 物 资 已 送 至 芦 山 地 震 灾 区 : 近 日, 团 市 委 从 省 青 少 年 发 展 基 会 获 悉, 团 市 委 为 地 震 灾 区 募 集 的 首 笔 爱 心 捐 款 和 捐 赠 物 资 已 送 至 芦 山 地 震 灾 区 4 月 20 日,

《嵌入式系统设计》教学大纲

计 算 机 系 统 应 用 年 第 25 卷 第 4 期 线 程 的 复 用 [2,3]. 通 常 情 况 下, 服 务 器 端 程 序 在 启 动 时 创 建 若 干 数 量 的 线 程 对 象 并 缓 存 起 来, 此 时 它 们 处 于

构建高效的私有云平台V3

Hippy-VueConf

新美大酒店开放平台SDK(.NET版)使用说明.pages

02 微服务设计原则与生态系统-final.key

Python 和 人 工智能基 础课程 ( 第 二课 ) 张威, 雷雷萧萧

IXDC

API网关在大数据开放中的应用-童剑-v0.3.key

AS北京2017-《美团点评用户行为分析系统的构建与优化》-孙业锐.key

Qcon北京2018-《唯快不破——高效定位线上 Node.js 应用内存泄漏》-黄一君

[Table_MainInfo]

站在巨人的肩膀上 - 使用Symfony框架开发你的下一个项目.key

python_free

Go构建日请求千亿微服务最佳实践的副本

网易云上的第一跨境电商技术架构-最终版0713.key

untitled

案例分享产品文档

參、社會 華士傑

六域链联盟 SDChain-Matrix 节点搭建指南 2018/07/26 Version : 1.0.0

VASP应用运行优化

2.基于Kibana和ES的苏宁实时日志分析平台-彭燕卿

5A-ESP8266__SDK__SSL_User_Manual__CN.pages

第一章

7 2 2 MMO 1 Arcade 2 iphone 4 2 [Monkey Potion]

Microsoft PowerPoint - Performance Analysis of Video Streaming over LTE using.pptx

PowerPoint 演示文稿

ESP-TOUCH_User_Guide__CN.pages

6 2 2 MMO 1 Arcade 2 iphone 4 1 Blog [Monkey Potion] 02

第六章

数据分析技术介绍

Tangram For GMTC 2017.key

Socket Socket TcpClient Socket.Connect TcpClient.Connect Socket.Send / Receive NetworkStream 6-5

F4

untitled

201806fuchsia.key


Microsoft Word - 11月電子報1130.doc

NKN: 区块链技术开创 网络 传输领域新机遇

2/80 2

SHIMPO_表1-表4

untitled

改 善 動 機 很 多 人 在 使 用 學 校 網 站 時, 感 覺 到 有 諸 多 不 便, 像 是 雖 然 學 校 有 辦 活 動, 但 很 難 發 現 公 佈 在 網 站 上 的 活 動 資 訊, 還 有 雲 端 系 統 銷 曠 繁 複 等, 鑒 於 以 上 原 因, 我 們 決 定 改 善

A Preliminary Implementation of Linux Kernel Virus and Process Hiding

What is Version Control? What is Git?

119,,,,,, (, ), : (1),,,,,, (2),,,, (3),,,,,20,,,,,,,,

SHIMPO_表1-表4

提纲 1 2 OS Examples for 3

ABOUT ME AGENDA 唐建法 / TJ MongoDB 高级方案架构师 MongoDB 中文社区联合发起人 Spark 介绍 Spark 和 MongoDB 案例演示

TVS厂商接入流程API文档

Edge-Triggered Rising Edge-Triggered ( Falling Edge-Triggered ( Unit 11 Latches and Flip-Flops 3 Timing for D Flip-Flop (Falling-Edge Trigger) Unit 11

05.(最终版)手机淘宝 H5 和 Weex 容器的构建实践-云栖-2016-鬼道.key

CC213

了 手 打 上 石 膏, 偷 偷 的 敲 了 父 母 親 的 門 說 我 的 手 還 是 好 痛 說 著 眼 淚 尌 流 了 下 來, 事 實 上 手 並 不 疼, 心 中 對 於 自 己 奪 眶 的 眼 淚 感 到 震 驚, 連 續 幾 晚, 你 靠 著 絕 佳 的 演 技, 安 穩 的 睡 在

14-企鹅电竞Weex实践和性能优化-渠宏伟

目 录


Microsoft Word - 生活禮儀柯友惠981

朱君标-Need for Speed:菜鸟技术全栈化之路-finally.key

基于Electron-vue的桌应用实战2

數位圖書館/博物館相關標準 2

BYOD IP+Optical (IP NGN) API 4. End-to-End (Service Aware) 5. IP NGN (IP Next Generation Network) ( ) Prime Carrier Management Access Edge Co

99年度提案審查

English Language

2014北京四中初二上期中数学(含解析)

64

习题课

目 录 第 一 章 电 力 行 业 内 部 控 制 操 作 指 南 概 述... 1 第 二 章 内 部 控 制 规 范 体 系 建 设 与 运 行 第 三 章 内 部 环 境 建 设 第 一 节 组 织 架 构 第 二 节 发 展 战 略 第 三 节

概述

Microsoft Word tb 何颖

Greenplum 机器器学习 工具集和案例例 姚延栋 Pivotal 研发技术总监 2017.thegiac.com

StoneTan_Strategic IndustriesChengdu2018.pages

Chap06

(改)AI时代的移动技术革新-Node全栈-i5ting.key


张炅轩-360基础架构之一:插件化漫谈-3.正式演讲.key

穨CY03519.PDF

1 C++ 2 Bjarne Stroustrup C++ (system programming) 6 (infrastructure) C++ 7 Herb Sutter 8 C++ (efficiency) (flexibility) 9 (abstraction) (productivity

bp

合肥职业技术学院 2019 年年分类考试招 生章程 一 学校全称 : 合肥职业技术学院 二 办学层次 : 高职 ( 专科 ) 三 办学类型 : 公办全 日制普通 高等职业院校四 办学地址 : 合肥市新站区关井路路与烈烈 山路路交汇处 ( 合肥汇 心湖校区 ) 合肥巢湖市姥 山南路路 ( 巢湖 鼓 山

HOL-CHG-1695

一个开放源码的嵌入式仿真环境 ― SkyEye

(Real-time) (Local Host) (Buffer) (Video Conference) (VoD) (NetRadio) ,000 [1]( ) ( ) 1400 (2001 ) 75 (2005 ) DFC Intelligence [2] 1

jsj0.nps

OpenResty 动态流控的几种姿势

sp_overview.pptx

IJCAI_2018

Microsoft PowerPoint - ATF2015.ppt [相容模式]

Transcription:

知乎 Feed 流架构演进

姚钢强 2013 年年加 入知乎, 知乎 Feed 流技术负责 人, 负责期间 Server 端 P95 响应时间从 1.6S 降低到 700Ms, 稳定性由 99.9% 提升到 99.995%

提纲 A. Feed 流的需求和特点 B. 老老 Feed 流的构架遇到的问题 C. 新构架 Redis module 技术 方案 D. Redis module 方案遇到的问题 E. 新的问题与挑战

知乎 Feed 流的需求和特点 A. DAU 2600 万 (2017.9) B. 个性化推荐, 每次请求返回内容不不同 ( 与搜索不不同, cache 难做 ) C. 用户动态准实时分发

无个性化 ( 热 门榜单 )

用户个性化 push

push 存在的问题 A. 资源消耗严重, 计算量量 大, 存储量量 大 B. 智能推荐, 排序难以实时调整 C. 过滤 比较难做 ( 关注 or 被删除 ) D. 动态准实时分发难以达到 ( 高粉丝 用户 )

实时 pull

pull 计算流程 ( 慢 ) client member 推荐的相关源 拼装 meta 从指定的源拉取条 目 N 过滤条 目 选前 10 条 条 目够 用 Y 算法排序

提前计算, 做缓存 client member 相关的源 N 缓存 Y 拼装 meta 从指定的源拉取条 目 前 10 条 后 10 条 缓存 N 过滤条 目 选前 20 条 条 目够 用 Y 算法排序

提前计算的问题 存在冗余计算, 占 用资源多 冷启动 P95 响应时间 长 用户 行行为分发延迟, 体验差 离线计算策略略复杂, 难以维护 推荐算法难以实时调整

如何优化, 难点 儿在哪 儿? 依赖服务响应慢 redis cache + local cache gevent 并发 超时做降级 Python 计算太慢 Cython 模块替换 由于条 目不不够, 反复访问底层源的存储 feesource

可能的解决 方案 拉取出更更多的条 目, 防 止被过滤掉? 拉取更更多的条 目也会浪费时间, 过滤压 力力 大 根据算法拉取出更更精准的条 目? 算法期望召回池越 大越好

计算下推, 接近存储

新 feed 计算逻辑

Redis Module Redis modules make possible to extend Redis functionality using external modules, implementing new Redis commands at a speed and with features similar to what can be done inside the core itself.

Redis Module 加载定制命令 (MODULE LOAD module load lib_path/xx.so) 执 行行定制命令 卸载定制命令 (MODULE UNLOAD mymodule)

加载定制命令 Client module load lib_path/xx.so START handle = dlopen("lib_path/xx.so") dlsym(handle,"redismodule_onload") RedisModule_Init 初始化模块 redisserver attributes + modules: dict + commands: dict operations RedisModule_CreateCommand 注册定制命令... RedisModule_CreateCommand 注册定制命令 END

Client 执 行行定制命令 AxxCmd argv1 argv2 START 查找命令 RedisModuleCommandDispatcher 执 行行命令 redisserver attributes + modules: dict + commands: dict 模块 callback modulehandlepropagationaftercommandcallback operations 回收内存 modulefreecontext END

Client 卸载定制命令 module unload ModuleName START 清空注册符号 dictdelete(server.commands,cmdname) dlclose 卸载模块 modulefreemodulestructure redisserver attributes + modules: dict + commands: dict operations END

定制的命令 open_core, close_core Redis module 更更新时打开 core dump, 如果 crash 方便便分析 ts_query Redis 内部的过滤, 归并流程

ts_query 接 口设计 Request [source_type, source_id]: 需要拉取 source black_items: 需要过滤的 黑名单条 目 merge_strategy: 合并策略略 required_number: 需要返回的条 目数量量 Response [item_type, item_id, item_action, item_score]: 返回需要数 目的 feed 条 目

带来的收益 响应时间 P95 降低 300ms 去掉了了离线计算, 节省 60% 的计算资源 内容候选池更更 大, 为算法提供了了更更 大的空间 用户动态实时分发, 算法实时调整

遇到的问题 Module 更更新不不 生效, 继续调 用 老老 Module Redis 单线程 CPU 瓶颈, 高可 用 Redis 的内存浪费

Module 更更新不不 生效 加载新的 so 后, 发现调 用的还是 老老逻辑 GDB 发现存在符号被标记 DF_1_NODELETE dlcose 仅仅声明 so 不不在被系统使 用,so 内存占 用依旧存在 gcc 编译使 用 STB_GNU_UNIQUE, 防 止符号被标记为 DF_1_NODELETE 按照依赖路路径加载 so, 不不直接加载定制的 so

Redis 单线程 CPU 瓶颈, 高可 用 采 用 Redis Sentinel 部署集群, 保证 高可 用 一致性哈希 Redis shard, 每个 shard 采 用 master slave 的 方式部署

Redis 内存浪费 采 用 protobuf 和 Redis ziplist 数据压缩, 减少 shard 有多个 slave, 还是浪费内存, 没有根本解决问题 Redis 仅仅作为任务队列列, 任务分派给其他进程处理理? 同 一台机器器伴随 Redis 部署计算节点?

Feed 架构的历程 Feed 都 一样 Feed 个性化, 推模型 Feed 个性化, 拉模型 + 离线计算 Feed 个性化, 拉模型, 采 用 Redis Module, 计算接近存储

参考资料料 Serving Facebook Multifeed: Efficiency, performance gains through redesign dlclose - close a symbol table handle dlclose doesn't really unload shared object, no matter how many times it is called Redis Modules: an introduction to the API Redis Loadable Modules System