背景
QQ 浏览器信息流(QB)推荐架构支撑了 QQ 浏览器、快报主 feeds 场景、浮层等信息流卡片实时推荐的能力,架构上不仅仅要支持多业务、多产品,如 QB 、快报、外部合作等,而且需要能够快速支持各种类型场景的能力,如主 TL 、浮层,且能够快速扩展支持垂直频道和 APP 。那么信息流推荐架构需要做到灵活模块化,水平易扩展。
为了做到海量级实时精准推荐,信息流推荐架构划分为了四层:展控层、排序层(精排/粗排)、召回层、索引层,并提供实时级用户画像模型打分模块和特征系统,进行实时的用户/物品特征累积,实时反馈给推荐链路进行千万级索引文章/视频的筛选和精准推荐。具体的架构模块图如下所示:
可以看到,推荐架构容纳的模块之多,支持的业务形式之多,而且需要支撑亿级用户规模和百亿特征规模,那么需要更好的技术架构体系对于如此庞大的架构服务和存储去进行开发、扩展、管理、维护等。
挑战
挑战一:实时性
(1)特征实时更新
(2)模型在线实时学习
挑战二:超大规模
(1)用户量级:亿级用户
(2)特征规模大:百亿特征、千亿参数(无量)
(3)样本庞大:精排样本每日样本近百TB
挑战三:高性能
(1)全链路耗时达到业界领先水平。
解决方案
虽然推荐系统模块功能众多,是一个较为庞大系统,但我们以微服务的方式对推荐系统进行拆分。把一个庞大的系统划分为成千上万个微服务模块,每个微服务只负责相对独立的功能,并以远程 RPC 的接口方式提供服务,模块之间可以相互调用,从而形成了一个复杂的调用关系网,整体上就组成了一个庞大的推荐系统。微服务化以后,再结合云原生的相关技术架构体系保证云原生应用的稳定性,并提升资源的利用率和研发效率。
容器化
在云计算 1.0 的时代里,业界通过虚拟化的方式从硬件级分离应用程序,而容器的出现,标志着云计算 2.0 时代的到来,这个阶段应用是通过容器化的手段从操作系统级别分离应用程序。
在容器化的时代中, Docker 的出现使得隔离的开发测试环境和持续集成环境成为广泛实践,而 K8s 则让容器应用进入了大规模工业生产的时期。集群也能够最大程度地发挥发挥容器的良好隔离、资源分配与编排管理的能力。容器化后给企业带来的最大价值是人力和机器成本的节约。下图则从稳定性、可扩展性、资源利用率三大维度上对比了虚拟化和容器化的区别。
云原生时代
云原生(Cloud Native)这个概念最早是由 Pivotal 公司的 Matt Stine 提出的。并随着时间的推移,云原生的概念也不断在更新迭代,云原生架构已经成为互联网行业的技术热门,国内外各大厂都开始推进公司业务朝着云原生的方向进行演变,并在很大程度上推动了 IT 成本的降低和企业的发展。
云原生架构体系简介
云原生是一种技术架构体系和方法论,它包容了容器化、持续交付、 DevOps 和微服务等概念。容器化是微服务的最佳载体,持续交付可频繁快速交付下降低质量风险, DevOps 将发布部署自动化化,微服务则是核心地可被独立部署、更新、 scale 和重启。
CNCF 云原生计算基金会,在 CNCF 全景图中列举了和云原生相关的产品及服务的完整名单,这1381个项目共同构成了恢弘庞大的云原生世界。整个全景图按照功能分为29个模块,分别归属于9种大的类别
- 应用定义与开发(App Definition and Development)
- 编排与管理(Orchestration and Management)
- 运行时(Runtime)
- 配置(Provsioning)
- 平台(Platform)
- 可观察性与分析(Observability and Analysis)
- 无服务(Serverless)
(原图链接: