推荐系统相关
Created|Updated
|Word Count:177|Reading Time:1mins|Post Views:
新闻的推荐系统是为了给信息流的用户推荐资讯 feed。接口返回的信息不一定会被外显曝光。
在瀑布流式的外显曝光场景下,重排能够减少用户的疲劳度。
这就涉及到推荐系统的设计,流量要经过什么样的链路呢?
接入层、推荐中控、画像、召回、粗排、精排、重排。这些系统会形成星型架构和树形架构。
不同的架构之间有一个典型的优缺点需要取舍:链路长度会影响网络传输的最终效率,也会影响推荐系统的性能。
Author: magicliang
Link: https://magicliang.github.io/2023/02/13/%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9F%E7%9B%B8%E5%85%B3/
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles

2018-04-02
一个滚动重启的状态保存问题
很多时候滚动重启,都会导致状态丢失。比较好的设计方法是把服务本身设计成无状态的,然后在上游的服务上做好 failover,然后增加 standby server,让 sticky 数据 transmit 到 standby 机器上,让 request 失败以后可以自己由上游重传到 standby server。然后就可以滚动重启了。 这大部分场景下还要考虑幂等的问题。 这就看得出热配置热替换的重要性了。在大多数情况下,除了发布新的 feature 升级以外,都应该尽量用热配置来避免重启。

2022-03-18
如何写业务代码
业务研发面对的问题 稳定的业务模式 不稳定的需求 业务对交付的渴望 假设 命名规范(《clean code》) 面向对象设计(SOLID原则、贫血/充血模型、设计模式) 系统要拆分 流程控制系统与领域系统.drawio 每一个用例(解决的一个问题)都由访问逻辑和执行逻辑组成。访问逻辑负责用例执行的顺序与分支,并调用执行逻辑完成完整业务逻辑。 访问逻辑由单独的交易系统负责。执行逻辑由个子系统负责。 工程要拆分 三层架构 + 洋葱架构 代码要拆分 业务代码:描述核心业务逻辑的代码,核心是保持业务的流程及业务状态的一致性 领域对象与领域服务,不得对外部有任何依赖(工具类除外) 最核心的几个抽象: 校验:参数有效性校验、参数的业务属性校验。在进入正常业务逻辑代码前,完成所有的校验工作。 异常:业务异常:所有不符合业务逻辑而产生的异常。 系统异常:因为程序本身or依赖产生的异常。 所有的异常第一位runningtime异常。 数据: 业务数据:保存领域对象状态的数据。 非业务数据:过程数据。业务的核心流程中,只对业务数据的持久化负责。 参数:任何时候,任何方法的参数都需要...

2022-01-17
如何成为一名优秀的架构师
成为一个架构师:为了这一刻,你准备了多久? 架构师的关注点:顶层设计、长期视角。 寿命:数据 > 代码(特指业务逻辑)> 技术(特指业务逻辑的载体) 不是传道受业,而是观点分享。 架构师的几种 profile:有架构能力、以架构为生也是一种架构师。 长期战略:对于任何一家公司,架构设计一定是必要的,而且需要自行解决。架构师的职责是保证组织拥有正确的设计,控制复杂度。 架构师的关键特质: 目标正确:限制条件和目标价值产生理解偏差。是架构师最常见的问题。 能力满足:为组织带来更好的外部适应性。 持续减熵:好架构等于发现、规划和演化。 思考深度和实战经验最重要:这是任何的书本都不能带给我们的。包容、求真、良知、勇气。 有没有德?考虑组织长期利益(基于良知做判断)。 有没有勇气?承担责任,决定命运。 有没有眼光?是否擅于思考? 独立、理性、有深度的思考。长期感召力,来自于良知、成功、经验和勇气。 从复盘中学习。 郭东白.pdf

2022-01-07
如何写复杂业务系统
引言 本文只是一家之言。 本文是一系列文章的缩略版本(完整版只写了个开头),尽量只讲具体的东西,如果有东西太干了,没有具体的“体感”,是作者的责任。 不喜欢看纯理论分析的可以跳到单一系统层次和模块设计(大多数人可能更加关注这一节,其实前面的部分更重要)。 几个很干的原则 解决复杂问题要用高级思维,不要用低级思维。 蚂蚁/ebay 等若干家企业架构师四大原则 - 听过的可以往下跳: 分治(其他所有原则都是从分治里衍生的) 分层 抽象 演化 solid 5 原则很重要很重要 -很多人读过,很多人可能没有读过,温故知新很重要。 注重过程质量,拿到结果质量。 业务系统为什么难写? 纯粹的业务驱动:技术的输入和决策完全来源于业务同事,甚至只受业务摆布的团队,架构容易混乱 业务又不懂架构、业务又不懂功能点罗列的合理性,业务只会往技术团队身上扔需求。 怎么把需求和实现分门别类是技术自己的事情。 但技术人员如果一直都很忙,没有自己的空闲时间或者对设计洁癖的坚持,慢慢地就会养成“把需求翻译成代码,然后往老的系统里面扔”(混乱根源 1)的坏习惯- 问题:翻译只是普通的低级思维,不能解决很复杂...

2021-02-10
《恰如其分的软件架构》
前言 这两周集中时间间歇性读完了《恰如其分的软件架构》这本书。这本书讲的是架构方法,架构方法是一种思维模型(mind set),这种思维模型叫作“风险驱动模型”。 这本书经我们团队的架构师推荐,列在我们团队的集体书目里很久了。但真正去读它、读完它的人又很少。究其原因,还是这本书的内容以谈概念为主,虽然书中举的例子非常生动,仍然始终无法摆脱“为了谈概念而举玩具例子”的问题-这几乎是所有架构书的通病。似乎正统的架构书籍都不可避免地举一些传统行业或者经典软件(比如很多书籍都会反复出现在“xxx 播放器”)的例子。这些软件架构非常经典,可以只用一些小的组件、场景,就讲清楚典型的组件、模式和架构风格的用处。但没有很深的工程/架构经验的读者读这些书的时候,仿佛重新回到了抄书和念书的大学课堂,对于脱离现实的例子只会产生“左耳进右耳出”的感觉。能够温故而知新,是一本书经典化的特征。而能够阅读非入门级的纯理论书籍,则是一个程序员的认知能力和经验达到了一定程度的特征。我读这本书里很多细节还是很痛苦,证明我还是对于形式化的符号(symbol)、记法(notion)还不是很熟悉,而且对于书中运用的问题解...

2020-10-11
数据密集型应用系统设计 - Designing Data Intensive Applications
数据密集(Data-Intensive)与计算密集(Compute-Intensive)是当今两大负载类型。前者以大数据为代表,后者以深度学习和 HPC 为主要代表。 谨以本书献给那些追逐梦想的人们。 [另一个电子版本。][1] 前言 数据密集型应用要处理的瓶颈往往是数据的规模、数据的复杂度和数据产生与变化的速率;与之对应的是计算密集型应用,CPU 往往成为其瓶颈。 本书是关于数据处理系统及其相关技术的(NoSQL、消息队列、缓存、搜索引擎、批处理和流处理框架)。 每一种技术都基于一定的设计理念,而且只适用于特定的场景。 不要过度优化。 数据系统基础 可靠、可扩展与可维护的应用系统 现在的典型系统架构已经很明确了,因为业界已经有成功的案例,对这些组件做了很好的抽象,我们只要做好拿来主义就行了。 可靠性(Reliability) fault tolerance 和 resilience 是系统的容错的体现。 硬件故障 对于大型 IDC,即使磁盘的 MTTF 很高,磁盘数量大了以后,每天发生磁盘损坏也是正常的事情。 硬件容错的方案是制造冗余(冗余磁盘、冗余电源)。 软件容错是第二种方...






