抖音的互联网架构分析与系统设计实现 | 青训营

93 阅读2分钟

21fba1bbf3aaf04fb2897c5082db9c2.jpg 抖音互联网架构分析

抖音采用了分布式系统架构,将系统的不同组件拆分为微服务,并使用消息队列等技术实践组件之间的解耦

一、消息队列 MQ (Message Queue)

一种在系统间传递信息的中间件,起到了解耦、异步处理、削峰填谷等作用

指保存信息的一个容器,本质是一个队列,但这个队列要支持高吞吐,高并发,且高可用(就是除了能支持这些之外还不容易挂掉)

通过使用消息队列等技术,各个微服务之间可以通过异步消息的方式进行通信,实现了解耦。

1.消息队列-Kafka

使用场景:直播,搜索,订单,支付,点赞,收藏,业务日志,用户行为数据等服务

基本概念:Producer、Cluster、Consumer、Topic、Partition

数据迁移、Offset、Partition选主

一条消息从生产到消费是如何处理的,Producer端逻辑、Broker端逻辑、Consumer逻辑

2. 消息队列-BMQ

kafka在使用中遇到问题

BMQ架构

3. 消息队列-RocketMQ

一种开源的分布式消息中间件,采用分布式系统架构,可在多个节点上部署消息生产者和消费者,具有高性能、高可靠、高可用等特点,适用于金融、电商、物联网等对实时性要求较高的场景 RocketMQ 具有以下几个特点:

  • 高性能:RocketMQ 在生产环境中取得了优异的性能表现,可以满足高并发、高吞吐量的需求
  • 高可靠:RocketMQ 采用分布式架构,支持数据备份和容错,确保了消息的可靠存储和传递
  • 高可用:RocketMQ 支持集群部署,可以通过添加更多的节点来提高系统的可用性
  • 丰富的功能:RocketMQ 支持消息持久化、消息过滤、消息路由、事务消息等高级特性
  • 易用性:RocketMQ 提供了 Java、C++、Python 等多种语言的客户端 API,方便开发者集成和使用
  • 跨平台:RocketMQ 支持多种操作系统,如 Linux、Windows 等,以及多种硬件架构

二、数据存储

  1. ContentStorage类:一个模拟内容存储的类,使用Map(哈希表)来存储内容对象,通过id可检测出特定的内容

  2. CDN类:一个模拟内容分发CDN的类,使用另一个Map来缓存内容对象,以加速内容的获取,通过id可从缓存中获取内容

代码实现

    private String id;
    private String url;
    private String userId;
    private long timestamp;

    //  getters/setters
}

class ContentStorage {
    private Map<String, Content> contents = new HashMap<>();

    public void uploadContent(Content content) {
        contents.put(content.getId(), content);
    }

    public Content getContent(String contentId) {
        return contents.get(contentId);
    }
}

class CDN {
    private Map<String, Content> contentCache = new HashMap<>();

    public void cacheContent(Content content) {
        contentCache.put(content.getId(), content);
    }

    public Content getCachedContent(String contentId) {
        return contentCache.get(contentId);
    }

缓存(Redis)

三、异步处理