抖音的互联网架构

介绍

抖音,是由字节跳动孵化的一款音乐创意短视频社交软件。如今,抖音已成为各年龄段人们手中消磨时间的applet,我们可以用它看推送的短视频、点赞评论收藏喜欢的视频、也可以发送自己的日常。这是一个非常好的社交平台,彰显了当今社会快节奏的生活状态,也显现出新一代年轻人的娱乐方向和生活态度。随着抖音applet的上线及更新,它推送出更多的贴纸以及功能供大家使用,更加便利且满足了大家的需求。

那么,对于我们开发者而言,抖音是如何被开发出来的、它的框架结构又是怎样的?今天我们就来探讨探讨,剖析其中的奥秘所在。

框架

我们从以下两个大方面进行剖析。

一、刷抖音网络是怎样交互的?

交互的实现分为网络接入网络传输两个部分。

网络接入

我们从互联网路由ARP协议IP协议NAT导入。

互联网

图片里面的是互联网的大框架图。

左边的是各个终端,包括PC、pad等,当下通常通过wifi、4G、5G网络进行接入;再通过有线网络接入各个运营商的网络,包括移动、电信等。接着再接入抖音。

中间的网络等基本不会出现错误,除非是丢包等,这个就属于故障了。

路由

同网段接入:

SDN网络虚拟化,跨了两个交换机,看起来像是跨网段的,但其实是同网段的。

  • 同网段并不一定是接入一个同物理逻辑交换机的,有可能是软件定义网一个虚拟的同网段。

跨网段接入:

两个不同的服务器通过中间的路由进行连接。

  • 路由不是对称的!!!
  • 路由是工作在IP层协议的!!!
  • 路由不是改IP地址的,是改Mac地址的!!!

ARP协议

逻辑同网段才可以发送ARP,之所以这样,是因为同网段情况下才可以找到请求的目标MAC。

  • ARP本质上是查找下一跳的MAC,不是请求目标地址!

IP协议

  • IP协议是唯一标识,在互联网中通用。抖音客户端一个且服务端一个。
  • IP地址不能用MAC地址来代替。(对于这个点比较懵圈)
  • IPv4不够用时,用IPv6进行扩充。

NAT

NAT上网原理: 家里的路由器本质上是NAT。

网络传输

我们从数据包请求DNSDNS的传输协议UDPTCP三次握手TCP传输SSL/TLS握手导入。

数据包

首先我们来了解一下数据包的导入代码,并且学习一下代码的格式。

js 复制代码
struct pkt{
  something
}

void send_one_pkt()
{
  p = malloc(sizeof(pkt))
  p = append(p, siezoef(l2))
  p = append(p, siezoef(l3))
  p = append(p, siezoef(l4))
  
  send(p)
}

客户端发到服务器的完整路径👇 由图片可得出,message的经过有三个层次,分别是User space(用户空间)、Kernel space(内核空间)、Hardware(硬件)。而OSI模型和TCP/IP模型在三层次对应的层类型也有所区别。相对而言,TCP/IP的层次更为简洁。应用的客户端和应用的服务器端分别对应着源机器、目的机器,这两个属于硬件方面的内容。

请求DNS

客户端和服务端及客户端和递归解析器之间的联系👆 请求DNS的步骤如下:

  1. 客户端发解析请求*www.douyin.com*
  2. 递归解析器去问".",com.去哪里解析
  3. 递归解析器去问"com.",douyin.com去哪里解析
  4. douyin.com告诉递归解析应该解析到xxx

DNS的传输协议UDP

UDP本身相对简单,但想把它用好却很难,需要考虑很多方面的因素。

  • 用好它的一个重要的点:想发什么包就分配一个UDP的头,把payload里面塞数据发出去就行!

TCP三次握手

  • TCP是OSI层中的传输层协议,用于通过传输和确保通过支持网络和Internet传递消息来在远程计算机之间创建连接。

  • 拔了网线,TCP 连接会断开;如果重新再插上,TCP 连接会重新建立。

  • 所谓的"三次握手":为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。

三次握手图解👇

TCP传输

典型的tcp协议要求每一个数据段发送之后都要有一个ack回复,然后才能发送下一个数据段,虽然这样能保证数据的可靠传输,但是效率呢?由于tcp是全双工通信,在等待一个数据段的ack恢复之前网络将会闲置,因此效率将会受到极大影响,因此协议提出滑动窗口子协议,专门负责数据的传输,滑动窗口子协议分为简单的停-等协议,后退N协议,以及选择重传协议三个子子协议,其实三个子子协议可以由一个例程表示,只是一个例程的三个不同情况,比如发送和接受窗口都为1时就是简单的停等协议。三个子子协议都很复杂,只有靠这种复杂的机制才换取了网络链路的高效利用。

SSL/TLS握手

对称加密(上)和非对称加密(下)👆

(๑•̀ㅂ•́)و✧这种加密确保用户的信息安全,有效阻隔了黑客盗窃信息的行为。

二、网络架构怎么给抖音提质?

提质分为网络提速网络稳定两个部分。

网络提速

我们从协议优化路径优化导入。

协议优化

启用HTTP2.0实现多图并发下载的功能,自然提速了网络👇

路径优化

以数据中心分布为例,多路径同时进行,提高网络的运行速度,增强用户的体验感。

网络稳定

  • 维护网络稳定,首先我们需要有容灾概念,过程为故障发生、故障感知、自动切换、服务恢复。

  • 在故障排查中:

    1. 明确出现的是什么故障,例如:是什么接口的故障、主要体现在哪里、是否是修改导致的异常等。
    1. 及时故障止损,需将用户的体验放在第一位。
    1. 进行分段排查,分为客户端排查、服务端排查、中间链路排查,一步步跟进。

👉网络故障排查常用命令:dig查询DNS问题、ping/telnet/nmap查询三层/四层连通性、Traceroute排查中间链路、iptabels、tcpdump。

总结

抖音的架构很奇妙。在这节课中我们了解了抖音applet的开发和架构,对我们进一步的学习提供了良好的思路。在抖音框架的基础上,我们更全面地了解到一个产品的开发进程以及优化方案,这是非常关键的一步。

相关推荐
千慌百风定乾坤11 小时前
Go 语言入门指南:基础语法和常用特性解析(下) | 豆包MarsCode AI刷题
青训营笔记
FOFO11 小时前
青训营笔记 | HTML语义化的案例分析: 粗略地手绘分析juejin.cn首页 | 豆包MarsCode AI 刷题
青训营笔记
滑滑滑2 天前
后端实践-优化一个已有的 Go 程序提高其性能 | 豆包MarsCode AI刷题
青训营笔记
柠檬柠檬2 天前
Go 语言入门指南:基础语法和常用特性解析 | 豆包MarsCode AI刷题
青训营笔记
用户967136399652 天前
计算最小步长丨豆包MarsCodeAI刷题
青训营笔记
用户52975799354723 天前
字节跳动青训营刷题笔记2| 豆包MarsCode AI刷题
青训营笔记
clearcold3 天前
浅谈对LangChain中Model I/O的见解 | 豆包MarsCode AI刷题
青训营笔记
夭要7夜宵4 天前
【字节青训营】 Go 进阶语言:并发概述、Goroutine、Channel、协程池 | 豆包MarsCode AI刷题
青训营笔记
用户336901104444 天前
数字分组求和题解 | 豆包MarsCode AI刷题
青训营笔记
dnxb1234 天前
GO语言工程实践课后作业:实现思路、代码以及路径记录 | 豆包MarsCode AI刷题
青训营笔记