如何支持研发对CSDN个性化推荐系统重构

目录

    • 大地图
    • 工具构建
    • 数据治理
    • 保持发布
    • 重视测试
    • 小结
    • 引用

一个以内容服务为主的软件,它的推荐系统在数据侧对软件产生着举足轻重的作用。数据的三个方面决定了这个内容软件的档次。

  • 数据的质量好坏
  • 数据和用户需求的相关性好坏
  • 数据的层次体系好坏

通常,我们说的推荐,包含了两类不同的推荐

  • 内容详情页下的相关推荐
  • 软件主视图的各种推荐等信息流,属于【个性化推荐】部分

本文介绍的是我们在CSDN的软件主视图的各种推荐等信息流部分的持续改进工作。这部分在各种不同的技术浪潮下,容易发生这些问题

  • 优先级不高,整个系统处于年久失修状态
  • 推荐系统依赖的数据链路不通,数据处于不健康状态
  • 研发人员的多次转换,后面新增的代码和前人加的代码之间有矛盾和冲突的地方
  • 最可怕的是,一些策略事实上已经出错,但是也无人知晓和改进
  • 缺乏最新的构架和全局链路信息地图

本文侧重在个性化推荐系统治理中的4种重要的工程保证:

  • 梳理大地图:有持续维护的最新构架和全局链路信息地图
  • 工具构建:支持必要的数据解析和非常规的调试工具
  • 数据治理:持续梳理和简化数据侧的工作
  • 保持发布:坚决执行SMART原则,拆和推进的能上线的任务
  • 重视测试:深入细节的测试

大地图

首先我的同事介绍了在《CSDN个性化推荐系统的设计和演化》,介绍了许多在服务代码层面做的持续的重构工作。这部分工作基本上需要持续有耐心地将系统的每个部分都梳理、重构、迭代、上线。

系统治理的角度来说,服务代码的直接重构是系统中的一个最重要的环节,但不是全部。这是因为这样的系统包含对多个部分的理解:

  • 服务接口部分:下游如何使用系统的接口,下游对推荐服务的接口做了哪些进一步的加工工作后,才能和应用层对接上。
  • 服务策略部分:也就是推荐服务本身(如上文章)
  • 服务数据部分:在上述文章里构架图里的Habse的数据来自哪里?

所以,从系统治理的角度,大概构架图这样的:
在这里插入图片描述
在系统治理的过程中,需要完整的梳理3个环节是如何工作的:

  1. 聚合接口部分如何工作
  2. 个性化推荐和策略配置部分如何工作
  3. 数据源部分如何工作,和配置之间的关系(包括:定时计算服务、数据仓库的几十个计算任务、以及流式计算部分)

没有全链路信息,我们就是在盲人摸象,这是系统工程,需要严肃的工程和数据质量

在整个系统治理期间,工程上的做法是:

  • 从头到位维护一份持续更新的个推数据管道流向的文档
    • 使用分层、表格梳理的方式梳理全链路的数据流向
      • 以数据流动和朔源为驱动
        • 服务研发、测试、数据研发联合持续更新

工具构建

我们都知道,在工程上,维持开发/测试/正式三件套的完整分离的环境对于健康项目的迭代是非常重要的。但是我们也经常遇到一些系统由于历史的各种原因,并不完整的具有开发/测试/正式三件套环境。这给开发、测试和验证功能带来了很大的麻烦。

但是作为工程师,我们必须解决问题,有时候不能等着理想环境的出现(这是一个代价的问题)。因此,我们支持研发花时间构建在线上系统诊断工具。这个系统原有一些简单的线上接口调试信息获取能力。但是对于初期诊断那些疑难问题还是信息不够。这部分也是通常所的「可观测性」。

我的同事付出努力,构建了一套相对完备的易于使用的线上系统诊断 inspect 接口,这位后续的诸多问题定位解决带来了极大的便利。

其次,该推荐系统的策略配置一堆json定义的组合配置,代码中需要解析这些组合配置动态构建出策略树,本质上是一个有向无环图的数据结构。这里的问题是配置的和代码之间的映射,如果单靠看配置是很难定位和诊断问题的。旧的工程师也开发了一个可视化的工具来呈现这个有向无环图,但是

  • 一方面这些工具久无维护就失去了时效性
  • 另一方面策略多了之后,可视化工具也并不方便查看
  • 最后在节点和源代码之间的映射信息不够完全,难以直接映射

这个问题一度是研发中的瓶颈问题。这个和前一节是一样的:在系统治理中,如果没有好的工具支持对全局信息或者局部重要信息的快速定位,它就会成为解决问题的瓶颈

于是,我们写了一个策略配置的解析工具,将线性的配置,解析成符合实际代码嵌套的管道紧凑json,将有向无环图的骨架快速展示出来,便于定位和诊断,包含多种中间格式的数据。实际上这是一种复合利用文本解决问题的Unix风格做法。

在这里插入图片描述
图示是一个小的策略配置例子,具体信息对于系统研发来说有着具体的含义,这样的组合链路,如果繁杂起来但是没有便利的展示,用以快速定位到源代码中具体的类和配置,会十分费劲。

这部分,我们的经验是:投资工具,使得系统问题诊断能快速而直接,从而让研发循环周期更小。

数据治理

我们在系统治理过程中,遵循一些原则使得系统逐渐更加简单可依赖:

  • 尽可能简化服务代码层的工作,服务代码层做有技术含量的策略配置和反馈机制
  • 尽可能在数据层解决问题,因为数据层的工作在可维护上研发周期更短,小到按小时就可以解决。

这部分的工作。我们数据层的研发同事会有专门的技术博客分析:《CSDN 个性化推荐的数据治理

但是我们在这个过程中,坚持持续的梳理所有的数据计算任务:

  • 清理旧的实效的数据
  • 合并冗余的策略
  • 减少特异性规则
  • 使用上AI层的新的结构化数据特征
  • 构建完备的控制api

这层工作,核心是要体现:数据驱动。

保持发布

大的系统治理,有一个麻烦的地方在于如何保持迭代周期。在工程上,有一个重要的原则是:“保持发布是硬道理”。如果某个工作,想的太多,想要改造的步伐太大,常常会导致系统在工程上不收敛,这是绝大部分研发都会遇到的问题。

不过我们通过一些策略,比较合适的规避了这样的问题。大概有这些方式:

  • 有了大地图,使得我们能比较清晰地判断:
    • “这是一个适合在数据层解决的问题”
    • “这是一个适合在策略层解决的问题”
    • “这是一个适合在聚合层解决的问题”
  • 有了工具,使得我们能在DAG部分的配置快速定位问题
    • “根据这个链路骨架,出问题的应该是这个环节”
    • “根据这个链路骨架,可以在这层加入特性解决问题”
    • “根据这个链路骨架,这两层做的事情是冲突的,应该合并到一起”
  • 有了数据层的梳理,使得我们可以快速确认
    • “快速找到数据的源头,检查数据源头是否有问题,如果能通过源头解决,中间就不要动”
    • “数据层可以做更多的事情,提供更完备信息后,策略层就可以去掉一大块原来很绕的逻辑…”

对于需要多环节配合的任务,一般的方式是:

  • 数据侧先准备数据
  • 数据层的数据ready后,策略层再跟进改进
  • 测试验证策略层接口没有问题后,先通过api发布的方式迭代上线
  • 策略层api已经ready后,再推进聚合层接口的改造…

通过多阶段的发布,避免端到端研发带来的各种弊端。

重视测试

关键的一部分,我们的测试熟悉系统每个环节的工作原理。使得测试能在每个环节的迭代中,深入细节的做白盒测试。这对于这样的系统治理来说非常关键。这部分的工作,我们的测试也会有相关的技术博客:《CSDN个性化推荐系统-负反馈测试》

小结

良构的数据系统,才能带来良构的生态,从而上层目标的搭建才不会建立在一堆已经不正确工作的系统产生的数据指标之上。

引用

[1] 《CSDN个性化推荐系统的设计和演化
[2] 《CSDN 个性化推荐的数据治理
[3] 《CSDN个性化推荐系统-负反馈测试

–end–

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何使用ChatGPT处理excel

用ChatGPT处理excel,我们需要用到的主要工具是ChatGPT和vba代码。 VBA代码是一种用于Excel,Word,PPT的Microsoft Office软件的编程语言。 可以让用户通过编写一些简单的指令和操作,实现自动化、自定义和数据处理等功能。 就像你编…

2023亚马逊云科技中国峰会之Serverless

序言 Amazon Web Services,是Amazon.com推出的一系列云计算服务。 它提供了一系列的基础设施服务、平台服务和软件服务,希望可以帮助我们更轻松地构建和管理基于云的应用程序。 今天来学习一下 Serverless 本文会介绍以下六个模块: 为什么会…

如何画时序图

10年产品经理教你3步画好UML时序图,轻松掌握流程分析利器【建议收藏】 - 知乎 转自知乎 上次介绍了活动图,这次分享 UML 中,另一种流程分析利器——时序图。 以前每次要分析流程,我都会用活动图。直到有一次,我面对…

使用VuePress生成静态网站并部署到github

目录 第一步 安装VuePress第二步 书写博客第二步 部署到github 第一步 安装VuePress VuePress是一个基于Vue驱动的静态网站生成器 相关资料 文档:https://v1.vuepress.vuejs.org/zh/github: https://github.com/vuejs/vuepressvuepress-deploy: https://github.c…

什么是RabbitMQ?

RabbitMQ是一个由erlang开发的消息队列。消息队列用于应用间的异步协作。 2.RabbitMQ的组件 Message:由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key、priority、delivery-mode&#xff…

NoSQL之 Redis 配置与优化

目录 一、关系型数据库与非关系型数据库1.1 关系型数据库:1.2 非关系型数据库1.3 关系型数据库和非关系数据库的区别1.3.1 数据存储方式不同1.3.2 扩展方式不同1.3.3 对事务性的支持不同 1.4 非关系型数据库的产生背景1.5 总结 二、Redis介绍三、 Redis 的优点四、 …

【金融量化】如何筛选基金?

基金的评价与筛选 1 筛选步骤 1.1 股票型基金 (1)构建备选池 优先考虑股票配置较为稳定的基金,这样才能预估基金未来一段时间的表现,及其对基准股票指数的跟踪情况。因此,首先应该剔除那些仓位变化较大、本身在进行…

Tableau 和 Qlikview哪个更好用?

Tableau 和 Qlikview 是市场上用于分析数据的两种重要的 BI 工具,并配备了广泛的可视化效果。本文将全面概述每个工具,以及基于业务、技术和可视化三个主要类别的基本差异。每个公司都希望用最好的BI工具来处理大量数据。在这篇文章中,我们将…

基于OpenCV-车辆检测项目(简易版)

车辆检测 1.项目介绍2. 读取一段视频3.通过形态学处理识别车辆4.描画轮廓5. 车辆计数并显示 本项目使用的视频地址链接 1.项目介绍 对一个视频进行车辆数量的检测,用到的知识有视频的读取,滤波器,形态学,添加直线、文本&#xff…

实战-基于Jenkins+K8s构建DevOps平台(九)

实验步骤如下: 第一部分:安装持久化存储nfs 1、在k8s-master和k8s-node1上安装nfs服务 [rootk8s-master ~]# yum install nfs-utils -y [rootk8s-master ~]# systemctl start nfs [rootk8s-master ~]# systemctl enable nfs [rootk8s-node1 ~]# yum …

Java 集合继承关系图

Java 容器类库的用途是“保存对象”,并划分为两大类,序列Collection和健值对 Map Collection接口:一个独立元素的序列,衍生的2个子类接口 List接口:存储有序的、可重复的数据 实现类: ArrayList、LinkedList、Vector Set接口&am…

华为MateBook 16 2021款锐龙版R7(CREM-WFD9)(CREM-WFG9)原装出厂Win11系统工厂模式,恢复原厂系统

HUAWEI华为笔记本电脑,MateBook 16 2021款 锐龙版 R7(CREM-WFD9) (CREM-WFG9) 原厂Windows11系统,带F10恢复功能,原装OEM专用系统,恢复出厂状态 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、华为电脑管家等预装程序 …

网络安全自学秘籍

前言 想学网络安全但是无从下手的小白看过来,非常系统的学习资料,无数小白看了这份资料都已经成功入门,涵盖多个网络安全知识点,我愿称之为网络安全自学宝典。 一、概念性知识 1、了解什么是网络安全 2、清楚法律法规 3、网络安…

【git】idea怎么去替换git的地址

git 打开git地址添加或者修改git地址 打开git地址 右击->git->repository->remotes 添加或者修改git地址

useReducer可配合react-redux方案

接下来 我们来看 useReducer 这个属性 配合 react-redux 就会非常好用 那么 我们编写一段这样代码 import React, { useState } from react;const ContDom () > {const [count, setCount] useState(0);return (<div>cont值{ count }<button onClick {()>{ …

【模块三:职业成长】38|能力维度三:如何提升解决跨领域冲突的能力?

你好&#xff0c;我是郭东白。今天我们来讨论架构师核心能力的第三个层次——解决跨领域冲突。 上节课我们讲了从程序员到兼职架构师的跨越&#xff0c;也就是如何搭建解决横向问题的能力。 不过&#xff0c;在兼职架构师这个角色中&#xff0c;架构能力是一个加分项&#xff…

远程访问VPN配置与验证实验:构建安全的远程连接

远程访问VPN配置与验证实验&#xff1a;构建安全的远程连接 【实验目的】 理解远程访问 VPN的含义。掌握远程访问 VPN的含义。掌握VPN Client软件的使用。验证配置。 【实验拓扑】 实验拓扑如下图所示。 实验拓扑 设备参数表如下表所示。 设备参数表 设备 接口 IP地址 …

AutoGPT 英文版安装过程

自从2022年11月chatGPT的发布3.0GPT大模型&#xff0c;在中国掀起一股AI学习热潮&#xff0c;国内百度2023年4月份发布文心一言&#xff0c;把AI推上另一个高潮&#xff0c;最直接的是问答&#xff0c;我输入一句话&#xff0c;AI帮生成一段文字或一个视频&#xff0c;但是国内…

逻辑回归算法实现

目录 1.关于逻辑回归的原理解析和准备工作 2.关于激活函数 3.关于数据集 4.编写LogisticsRegression类 5.逻辑回归测试 6.结果 1.关于逻辑回归的原理解析和准备工作 逻辑回归原理相关内容&#xff0c;请参考博主的另一篇文章&#xff1a;机器学习&#xff08;二&#xff…

【Axure高保真原型】多选树穿梭框选择器

今天和大家分享多选树穿梭框的原型模板&#xff0c;左侧多选树选择子级选项后&#xff0c;可以在右侧看到对应的标签&#xff0c;取消选中也会删除对应标签。多选树可以通过选中或取消选中父级自动选中或取消选对应的子级&#xff0c;也可以选中或取消选子级自动反选父级。右侧…