TikTok架构
TikTok推荐系统的架构包括三个组成部分:大数据框架、机器学习、微服务架构。
(1)大数据框架是推荐系统的起点。它提供实时数据流处理、数据计算和数据存储。
(2)机器学习是推荐系统的大脑。一系列机器学习和深度学习算法和技术被应用于构建模型,并生成适合个人偏好的建议。
(3)微服务架构是让整个系统快速高效服务的底层基础设施。
大数据框架
没有数据,就没有智慧。TikTok的大多数数据来自用户的智能手机。这包括操作系统和安装的应用程序等。更重要的是,TikTok特别关注用户的活动日志,例如观看时间、滑动、点赞、分享和评论。
日志数据通过Flume和scribe进行收集和汇总,它们通过管道传输到Kafka队列中。然后Apache Storm与Apache Hadoop生态系统中的其他组件实时处理数据流。
Apache Hadoop生态系统是一个用于数据处理和存储的分布式系统。这包括第一代分布式数据处理系统MapReduce,它与批处理并行处理数据。YARN是一个用于作业调度和集群资源管理的框架;HDFS是一个分布式文件系统;HBase是一个可扩展的分布式数据库,支持大型表格的结构化数据存储。Hive是提供数据汇总和查询的数据仓库基础设施。Zookeeper是一个高性能的协调服务。
随着数据量的快速增长,实时数据处理框架应运而生。ApacheSpark是第三代框架,有助于对大数据工作负载进行近乎实时的分布式处理。Spark通过在内存中处理来增强MapReduce的性能。在过去的几年里,TikTok应用了第四代框架Flink。它旨在本地进行实时流处理。
数据库系统包括MySQL、MongoDB等。
机器学习
这就是TikTok如何获得家喻户晓的超个性化、令人上瘾的算法的核心。在大量数据集涌入之后,接下来是内容分析、用户分析和场景分析。TensorFlow等神经网络深度学习框架用于执行计算机视觉和自然语言处理。计算机视觉将用照片和视频破译图像。自然语言处理包括分类、标签和评估。
使用经典的机器学习算法,包括逻辑回归、卷积神经网络、递归神经网络和梯度提升决策树。应用了常见的推荐方法,例如基于内容的过滤、协同过滤和更高级的矩阵分解。
TikTok用来解读人们思想的秘密武器是:
(1)算法实验平台:工程师对逻辑回归、卷积神经网络等多种机器学习算法的混合进行实验,然后运行测试(A/B测试)并进行调整。
(2)广泛的分类和标签:模型基于用户的参与度,例如观看时间、滑动以及常用的点赞或分享(人们所做的作为通常是潜意识的反映)。用户特征、向量和类别的数量超过了世界上大多数推荐系统都要多,而且它们还在不断增加。
(3)用户反馈引擎:在多次迭代检索用户反馈后更新模型。体验管理平台是建立在这个引擎之上的,并最终改善了这些缺陷和建议。
为了解决推荐中的冷启动问题,使用了召回策略。就是从数以千万计的视频中挑选出数千名候选人,这些视频已经被证明是受欢迎的和高质量的视频。
与此同时,一些人工智能工作已经转移到客户端,以获得超快的响应。这包括在设备上进行实时培训、建模和推理。客户端使用了TensorFlow Lite或ByteNN等机器学习框架。
微服务架构
TikTok采用了云原生基础设施。用户分析、预测、冷启动、召回和用户反馈引擎等推荐组件用作API。这些服务托管在Amazon AWS和Microsoft Azure等云平台中。作为系统的结果,视频策展将通过云端推送给用户。
TikTok采用基于Kubernetes的容器化技术。Kubernetes被称为容器编排器,它是自动化应用程序生命周期的工具集。Kubeflow致力于在Kubernetes上部署机器学习工作流。
作为云原生堆栈的一部分,服务网格是另一种处理服务到服务通信的工具。它控制应用程序的不同部分如何相互共享数据。它在平台层而不是应用程序层插入功能或服务。
由于对高并发性的要求,这些服务是用Go语言和gRPC构建的。在TikTok中,Go由于其良好的内置网络和并发支持而成为服务开发中的主导语言。gRPC是一个远程过程控制框架,用于高效地构建和连接服务。
Tiktok的成功在于它会更加努力地提供最佳的用户体验。他们构建内部工具以最大限度地提高低级别(系统级别)的性能。例如,ByteMesh是Service Mesh的改进版本,KiteX是一个高性能的Golang gRPC框架,Sonic是一个增强的Golang JSON库。其他内部工具或系统包括参数服务器、ByteNN和abase等。
正如TikTok机器学习负责人所说,有时底层的基础设施比其上面的(机器学习)算法更重要。