分析抖音的互联网架构,了解其系统设计和技术实现,并思考在类似场景下如何构建高可用的系统 | 青训营

84 阅读5分钟

这是一篇后端的实践笔记,本文分析了抖音的互联网架构,了解并熟悉其系统设计和技术实现,此外还思考了在类似的场景下如何构建高可用的系统,如有错误指出,还请大家指出。

一、抖音互联网架构分析

1.1 分布式系统架构

抖音采用了分布式的系统架构,把一个大型的系统拆分成了不同的组件,即分成了不同的微服务,每个微服务可以实现独立运行,还可以独立扩展,方便后序功能上的扩充。组件之间通过消息队列的方式实现解耦操作,这样做可以有效的提高系统可扩展性以及容错性,利于后续的扩展以及性能的提升。这种将大型系统拆分为独立组件的方法,使系统更加的灵活,每个模块可以独立的部署和升级操作,在实际应用中非常方便。

抖音的分布式架构包含了很多方面,如:分布式文件系统、分布式缓存、分布式数据库等。

分布式架构可以很好的应对数量庞大的用户群体,其具体的实现包括以下几方面:

(1)服务拆分

把功能强大的系统细分为不同的服务模块,每个模块只专注于自己应实现的功能,比如抖音将功能细化为用户的认证模块、发布的内容管理模块以及对用户进行内容推荐的模块,这些部分都是独立的一部分,互不干扰。

(2)负载均衡

负载均衡技术因为可以根据不同的用户请求、流量变化进行自动的分配操作,因此能够有效的保障资源的利用率和系统的性能,同样可以利用该项技术来构建高可用性的系统。

通常采用负载均衡的方式将请求分布到不同的服务器当中,实现负载压力的分担,有效提升系统处理问题的能力,此外,负载均衡还实现了对于故障的隔离,即便某个服务器出现了问题,仍然可以将请求重新分配到其他可用的服务器上,并不会因此影响到整个系统的运行。

常使用的负载均衡算有轮询法、权重法。

1.2 微服务

1.1中提到,抖音采用服务拆分的方式以实现分布式架构,拆分了的微服务可以实现以下几点功能:

(1)独立开发、部署

微服务架构可以更加灵活的完成开发工作,以及开发后期的部署工作,不同的团队之间可以独立的完成开发、部署,并不需要等待其他小组完成某部分的开发任务后才能进行后续的开发,极大的减少了开发的成本,同时也减少了系统开发的耦合性,极大的提升了开发的效率

(2)使用消息队列、API通信

微服务之间需要进行通信,采用的是API、消息队列的方式实现通信,异步通信的方式实现了解耦操作。当组件间需要交互时,不需要使用其他组件的接口,直接将消息传入到消息队列中即可。除此以外,消息队列还有着缓冲的功能,可以暂存信息,防止数据的丢失。

1.3 数据存储

抖音中有大量的数据需要进行存储,因此高效合理的数据存储方式是非常有必要的,抖音中要存储的数据包含了用户数据、视频数据等信息,他们分别采用不同的方式进行存储。

(1)关系型数据库

用于存储用户的信息、关系数据,如MySQL;

(2)视频数据、用户上传的图片数据可以使用分布式文件系统(如HDFS)或对象存储(如阿里云OSS)存储。

二、构建高可用系统

基于以上的分析,我认为构建高可用系统需要保障以下的几点要素:

(1)使用负载均衡等技术

Go语言编写的程序具有高并发的特性,我们要充分利用这一优势,但同时也要考虑到流量的波动问题,因此可以通过使用负载均衡的策略,保障系统始终具备处理问题的能力,不会因为同时出现多个请求而导致系统出现故障。

(2)故障恢复

系统在实际的运行过程中,很有可能出现故障,因此可靠的监控和故障恢复机制就发挥了很大的作用,迅速监控到出故障的地方,并发出警报,以便采取补救措施,Go语言可以使用API手机相关指标用于系统监控。

(3)容错设计

构建高可用系统的一个重要方面就是引入冗余的组件,使用容错技术,可以保障系统在出现问题时仍然可以正常运行,常用的容错技术包括故障切换、跨机房部署等方法。

(4)安全防护措施

在高可用系统中,安全防护的设计也是必不可少的一个环节,使用如访问控制、数据加密等一些列的防护机制,可以有效的保障系统的安全,因此构建一个高可用系统,要具备良好的防护机制。