知乎 feed 流架构演进_架构师峰会_北京站.pptx

知乎 feed 流架构演进_架构师峰会_北京站.pptx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
知乎Feed流架构演进 2013 年加⼊知乎,知乎 Feed 流技术负责⼈,负责期间 Server 端 P95 响应时间从 1.6S 降低到 700Ms,稳定性由 99.9% 提升到 99.995% 姚钢强 A. Feed 流的需求和特点 B. ⽼ Feed 流的构架遇到的问题 C. 新构架 Redis module 技术⽅案 D. Redis module ⽅案遇到的问题 E. 新的问题与挑战 提纲 A. DAU 2600万 (2017.9) B. 个性化推荐,每次请求返回内容不同(与搜索不同, cache 难做) C. ⽤户动态准实时分发 知乎 Feed 流的需求和特点 ⽆个性化(热⻔榜单) 用户个性化 push A. 资源消耗严重,计算量⼤,存储量⼤ B. 智能推荐,排序难以实时调整 C. 过滤⽐较难做(关注 or 被删除) D. 动态准实时分发难以达到 (⾼粉丝⽤户) push 存在的问题 实时 pull client pull 计算流程(慢) member 推荐的相关源 过滤条⽬ 从指定的源拉取条⽬ 拼装 meta 选前 10 条 算法排序 Y N 提前计算,做缓存 从指定的源拉取条⽬ member 相关的源 后 10 条 缓存 拼装 meta 选前 20 条 client 算法排序 过滤条⽬ 前 10 条 Y N • 存在冗余计算,占⽤资源多 • 冷启动 P95 响应时间⻓ • ⽤户⾏为分发延迟,体验差 • 离线计算策略复杂,难以维护 • 推荐算法难以实时调整 提前计算的问题 • 依赖服务响应慢 • redis cache + local cache • gevent 并发 • 超时做降级 • Python 计算太慢 • Cython 模块替换 • 由于条⽬不够,反复访问底层源的存储 feesource 如何优化,难点⼉在哪⼉? • 拉取出更多的条⽬,防⽌被过滤掉? • 拉取更多的条⽬也会浪费时间,过滤压⼒⼤ • 根据算法拉取出更精准的条⽬? • 算法期望召回池越⼤越好 可能的解决方案 计算下推,接近存储 新 feed 计算逻辑 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) Redis Module redisServer + modules: dict + commands: dict operations RedisModule_Init 初始化模块 ... RedisModule_CreateCommand 注册定制命令 handle = dlopen(lib_path/XX.so) dlsym(handle,RedisModule_OnLoad) Client module load lib_path/xx.so 加载定制命令 RedisModule_CreateCommand 注册定制命令 START END attributes redisServer attributes + modules: dict + commands: dict operations 模块 callback moduleHandlePropagationAfterCommandCallback 查找命令 RedisModuleCommandDispatcher 执行定制命令 回收内存 moduleFreeContext 执⾏命令 START END 清空注册符号 dictDelete(mands,cmdname) 卸载模块 moduleFreeModuleStructure redisServer attribute

文档评论(0)

我爱分享 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档