短视频内容平台(如TikTok、Instagram Reel、YouTube Shorts)的系统设计

现在,短视频内容已成为新趋势,每个人都在从TikTok、Instagram、YouTube等平台上消费这些内容。让我们看看如何为TikTok创建一个系统。

这样的应用程序看起来很小,但在后台有很多事情正在进行。以下是相关的挑战:

?由于该应用程序在全球范围内使用,将会有大量的请求发送到服务器。这最终会增加服务器的负载。?将视频上传到后台将是一个巨大的任务,这将增加服务器的负载并阻塞。?流畅地播放视频,无缓冲。?一个基于用户兴趣推荐视频的推荐系统。

让我们逐一了解每个部分。我将其分为三个部分:

?与用户相关的服务?与视频发布相关的服务?与点赞和评论相关的服务?推荐服务

与用户相关的服务

这是一个包含与用户相关服务的服务,如下所示:

?注册: 用户将在应用程序中注册。?登录: 它将对凭证进行身份验证,并向应用程序发送响应。?登出: 用户将从应用程序中注销。?关注: 如果用户想要关注或取消关注其他用户,则可以通过此服务完成。

为了存储与用户相关的数据,我们将使用基于SQL的数据库,如MYSQLPostgreSQL,因为与用户相关的数据(例如追踪关注者)将会是关联数据,所以这是一个适当的选择。

为了优化数据库性能,我们将使用主从架构。主数据库用于执行写操作,从数据库用于执行读操作。要了解有关此内容的更多信息,可以阅读文章如何优化数据库性能并扩展它?[3]

 

现在让我们讨论用户服务的流程。应用程序将发出API调用,API Gateway将管理这些API。它将为用户服务路由请求。

请求将通过负载均衡器进行,负载均衡器下将有多个用户服务实例。根据负载,它将决定哪个实例将处理请求。一旦请求被处理,负载均衡器将将响应发送回API网关,然后再发送回应用程序。

与视频发布相关的服务

这是一个包含与视频发布相关服务的服务,如下所示:

?上传视频: 将视频上传到后台服务器。?发布: 如果用户想要创建、编辑或删除帖子,则可以通过此服务完成。

为了存储与帖子相关的数据,我们将使用基于NoSQL的数据库,如MongoDB。对于每个用户,可能会有成千上万的帖子,这将导致大量数据。

为了实现最佳性能,扩展数据库可能会很困难。NoSQL数据库支持水平分片,这有助于我们在不影响性能的情况下扩展数据库。要了解有关数据库分片的更多信息,可以阅读文章关于数据库分片的一切 | 扩展数据库[4]

短视频内容平台(如TikTok、Instagram Reel、YouTube Shorts)的系统设计
 

现在让我们讨论视频服务的流程。应用程序将发出API调用,API Gateway将管理这些API。它将为视频服务路由请求。

请求将通过负载均衡器进行,负载均衡器下将有多个视频服务实例。根据负载,它将决定哪个实例将处理请求。一旦请求被处理,负载均衡器将将响应发送回API网关,然后再发送回应用程序。

如何使文件在全球范围内可访问而不增加下载时间?

视频文件将上传到单独的云存储服务,如Amazon S3 Bucket。现在,如果我们想在世界范围内任何地方访问文件而没有任何延迟,那么该文件将发送到内容分发网络(CDN),它将将媒体文件更新到世界各地的不同数据云存储中。

我们能进一步优化以减少下载时间吗?

还有一个挑战需要解决,即原始视频的大小可能较大,因此如果将大文件发送回客户端,则下载时间会更长,这会影响用户体验。

文件一旦上传到云存储,您可以在数据库中存储文件路径。然后将帖子/视频详细信息发送到消息队列系统,如KafkaRabbitMQ

为了使用户体验流畅,我们需要压缩视频并为不同设备创建不同分辨率的视频。视频处理工作者将从消息队列系统接收视频详细信息,然后从

云存储中提取文件并进行处理。处理完成后,这些新的视频文件将发送到CDN

如何访问压缩的视频文件?

现在您可能会想,应用程序如何知道上述讨论中压缩的视频的文件路径?由于压缩文件将存储在分类文件夹中,因此可以根据分辨率和文件名轻松查找文件。

视频发布API只会返回文件名,而要访问文件,应用程序将在URL本身中添加分辨率细节,例如/media//

当访问此URL时,它将经过API网关,并从URL中提取分辨率和文件名详细信息。然后它将在缓存系统(Redis)中检查,如果文件不可用,则将访问CDN并通过它获取文件。然后将其添加到缓存中,以便如果再次请求相同文件,则不必从CDN获取。

点赞和评论相关的服务

这是一个包含与视频点赞和评论相关服务的服务。正如名称所示,通过此服务,我们可以为特定帖子更新点赞和评论。与上面讨论的其他流程相同。

 

推荐服务

通过此服务,基于用户偏好推荐一系列帖子。幕后有很多其他事情正在进行。让我们看看幕后运行的流程。

 

然后,创建一个帖子后,它将被发送到消息队列系统,然后消费者将提取数据并将数据更新到大数据(Hadoop)中。

将为机器学习服务(如PyTorchTensorflow)设置单独的服务器,在这里它将从大数据中提取数据并训练模型。推荐服务将使用此AI模型为给定用户推荐帖子。

结论

这是类似于TikTok的应用程序的基本级别的系统设计,根据需求可以添加许多其他内容,如跟踪用户行为(用户参与的帖子,用户关注的帖子)。基于此,可以改进AI模型,为用户推荐帖子。

原创文章,作者:小技术君,如若转载,请注明出处:https://www.sudun.com/ask/33922.html

(0)
小技术君's avatar小技术君
上一篇 2024年4月3日 下午12:58
下一篇 2024年4月3日 下午1:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注