高并发架构实战课

月伴飞鱼 2024-08-15 13:08:18
学习专栏
支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者!

专栏链接:https://time.geekbang.org/column/intro/100105701

软件建模

在软件开发中,有两个客观存在:

  • 一个是我们要解决的领域问题

  • 另一个客观存在就是最终开发出来的软件系统软件系统

对这两个客观存在进行抽象化处理的手段,就是软件模型

对领域问题和软件系统进行分析、设计和抽象的这个过程,就是软件建模设计

image-20240815115228093

高并发架构设计方法

分布式应用

使用负载均衡服务器,将多台应用服务器构成一个分布式集群,用户请求首先到达负载均衡服务器

  • 然后由负载均衡服务器将请求分发到不同的应用服务器上

当高并发的用户请求到达时,请求将被分摊到不同的服务器上

  • 这样一来,每台服务器创建的线程都不会太多,占用的资源也在合理范围内,系统就会保持正常运行

image-20240815120217667

分布式缓存

将数据缓存起来,每次访问数据的时候先从缓存中读取,如果缓存中没有需要的数据,才去数据库中查找

这样可以极大降低数据库的负载压力,也有效提高了获取数据的速度

  • 同样,缓存可以通过将多台服务器够构成一个分布式集群,提升数据处理能力

image-20240815120456510

分布式消息队列

应用程序(消息生产者)就可以将写数据库的操作,写入到消息队列中,然后由消息消费者服务器从消息队列中消费消息

  • 根据取出来的消息将数据写入到数据库中
  • 当有突发的高并发写入的时候,只要控制消息消费者的消费速度,就可以保证数据库的负载压力不会太大

由于消息生产者和消息消费者没有调用耦合,当需要增强系统的处理能力

  • 只需要增加消息生产者或者消息消费者服务器就可以,不需要改动任何代码,实现伸缩更加简单

image-20240815123925883

分布式关系数据库

将多台服务器构建成一个分布式的关系数据库集群,从而实现数据库的伸缩性

image-20240815124041953

分布式微服务

将单体架构中庞大的业务逻辑拆分成一些更小、更低耦合的服务,然后通过服务间的调用完成业务的处理

image-20240815124141124

短视频系统设计

部署模型

用户上传视频时,上传请求会通过负载均衡服务器和网关服务器,到达视频上传微服务

视频上传微服务需要做两件事:

  • 一是把上传文件数据流写入视频文件暂存服务器
  • 二是把用户名、上传时间、视频时长、视频标题等视频元数据写入分布式MySQL数据库

视频文件上传完成后,视频上传微服务会生成一个视频上传完成消息,并将其写入到消息队列服务器

视频内容处理器将消费这个上传完成消息,并根据消息内容:

  • 从视频文件暂存服务器获取视频文件数据,进行处理

image-20240815130448598

视频存储系统设计

使用Hadoop分布式文件系统HDFS进行存储

  • HDFS适合大文件存储的一次写入多次读取的场景,满足视频一次上传多次播放的需求

  • 同时,它还可以自动进行数据备份,满足数据存储高可用

HDFS适合存储大文件,大文件减少磁盘碎片,更有利于存储空间的利用

  • 同时HDFS NameNode的访问压力也更小,所以需要把若干个视频文件合并成一个HDFS文件进行存储
    • 并将存储相关的细节记录到HBase

image-20240815130758982

网约车系统设计

整体架构

两个APP应用:

  • 一个是给乘客的,用来叫车

  • 一个是给司机的,用来接单

image-20240815125006200

长连接管理

TCP是长连接,一旦建立了连接,连接通道就需要长期保持,不管是司机App发送位置信息给服务器

  • 还是服务器推送派单信息给司机App,都需要使用这个特定的连接通道

也就是说,司机App和服务器的连接是特定的,司机App需要知道自己连接的服务器是哪一台

  • 而给司机App推送消息的时候,也需要知道要通过哪一台服务器才能完成推送

司机端的TCP长连接需要进行专门管理,处理司机App和服务器的连接信息

image-20240815125708450

支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者!