抖音互联网架构分析 | 青训营

143 阅读4分钟

抖音的主要架构

抖音的架构种类丰富,包括分布式架构、微服务、内容分发网络CDN、分布式数据库等等。

下面我主要介绍这些架构中的分布式架构、微服务。

分布式架构

分布式架构是一种将系统拆分成多个独立的组件或服务,这些组件可以在不同的计算机、服务器或地理位置上运行,通过网络进行通信和协作,以实现更高的可扩展性、可靠性和性能。分布式架构通常用于处理大规模数据、高并发请求以及需要高可用性的应用场景。

分布式架构将应用拆分成多个独立的模块,并使用通信网络进行数据交换(如使用HTTP、RPC等通信协议)。使用分布式框架可以实现多个节点负载均衡,并且提高容错性和可用性。

抖音面对的数据量是十分庞大的,从课程学习中我们可以得知

抖音面临的经典业务场景:

  • 海量容量场景: 业务持续产生大量数据,数据规模>>PB级别,存储容量和成本压力极大
  • 海量QPS场景: 业务场景有高QPS读写请求,量级>>100K/s,并且时延要求极高,对底层存储IOPS压力极大
  • 高可用性场景:业务对于SLA要求非常高,要求避免全局性不可用事件发生,但对于一致性要求比较低

我们可以使用Partition方法,将数据散布到系统中不同机器节点来计算存储,提高容错性与可用性。

常见的Partition方法有:

1.hash partition

选择合适的hash函数,使用该函数将数据映射到一个固定大小的哈希码,这个哈希码用来确定数据属于哪个分区。

2.Range Partition

Range Partition(范围分区)通过选择一个适合的分区键,该键通常是数据集合中的某个有序属性,如日期、数字范围、价格等,将数据分割成不同的范围。每个范围对应一个分区,范围可以是开区间、闭区间或半开半闭区间。

相比于哈希分区,范围分区数据较不均匀,且可能需要调整数据分区范围。范围分区优势在于其逻辑上的连续性和直观性。

微服务

微服务(Microservices)是一种软件架构风格,将应用程序拆分为多个小型、独立的服务单元,每个服务单元都可以独立开发、部署和运行。每个微服务都专注于执行一个特定的业务功能,通过互相通信来协同工作,从而构建复杂的应用系统。微服务架构强调解耦、可扩展性、灵活性和可维护性。

以下是微服务架构的一些关键特点和原则:

  1. 独立性: 每个微服务都是一个独立的、自治的服务单元,可以独立开发、部署和运行。这使得团队可以专注于特定功能的开发,而不会影响其他微服务。

  2. 解耦: 微服务之间通过定义清晰的API来进行通信,从而实现解耦。每个微服务可以使用不同的技术栈和编程语言,只需遵循统一的通信规范。将不同的组件、模块或服务之间的依赖关系降低到最小,从而减少彼此之间的相互影响和耦合度。解耦的目标是使得各个组件能够独立变更、演化和维护,而不会对其他组件产生意外的影响。解耦可以通过定义清晰的API接口来实现。不同的微服务通过API接口进行通信,从而降低了它们之间的直接依赖。API定义应该尽量稳定,以避免频繁的变更。

  3. 可扩展性: 由于每个微服务都是独立的,可以根据需要进行独立的水平扩展,以满足不同服务的负载需求。

  4. 独立部署: 微服务可以独立部署,这意味着更新一个微服务不会影响其他服务,从而减少系统的停机时间。解耦使得各个微服务可以独立部署,不需要考虑其他服务的变更。这有助于减少部署的风险和影响范围。

微服务架构的优点是代码更容易更新,团队可以对不同的组件使用不同的技术栈和不同的编程语言。在微服务架构中,可以从各个维度对端到端的流量在链路上进行精确控制,组件可以相互独立地扩展,从而减少与必须扩展整个应用相关的浪费和成本,

在实际项目的实践中 ,使用分布式框架和微服务框架可以帮助开发者构建高效可用的系统。