专栏链接:https://time.geekbang.org/column/intro/100105701
软件建模
在软件开发中,有两个客观存在:
一个是我们要解决的领域问题
另一个客观存在就是最终开发出来的软件系统软件系统
对这两个客观存在进行抽象化处理的手段,就是软件模型
对领域问题和软件系统进行分析、设计和抽象的这个过程,就是软件建模设计
高并发架构设计方法
分布式应用
使用负载均衡服务器,将多台应用服务器构成一个分布式集群,用户请求首先到达负载均衡服务器
- 然后由负载均衡服务器将请求分发到不同的应用服务器上
当高并发的用户请求到达时,请求将被分摊到不同的服务器上
- 这样一来,每台服务器创建的线程都不会太多,占用的资源也在合理范围内,系统就会保持正常运行
分布式缓存
将数据缓存起来,每次访问数据的时候先从缓存中读取,如果缓存中没有需要的数据,才去数据库中查找
这样可以极大降低数据库的负载压力,也有效提高了获取数据的速度
- 同样,缓存可以通过将多台服务器够构成一个分布式集群,提升数据处理能力
分布式消息队列
应用程序(消息生产者)就可以将写数据库的操作,写入到消息队列中,然后由消息消费者服务器从消息队列中消费消息
- 根据取出来的消息将数据写入到数据库中
- 当有突发的高并发写入的时候,只要控制消息消费者的消费速度,就可以保证数据库的负载压力不会太大
由于消息生产者和消息消费者没有调用耦合,当需要增强系统的处理能力
- 只需要增加消息生产者或者消息消费者服务器就可以,不需要改动任何代码,实现伸缩更加简单
分布式关系数据库
将多台服务器构建成一个分布式的关系数据库集群,从而实现数据库的伸缩性
分布式微服务
将单体架构中庞大的业务逻辑拆分成一些更小、更低耦合的服务,然后通过服务间的调用完成业务的处理
短视频系统设计
部署模型
用户上传视频时,上传请求会通过负载均衡服务器和网关服务器,到达视频上传微服务
视频上传微服务需要做两件事:
- 一是把上传文件数据流写入视频文件暂存服务器
- 二是把用户名、上传时间、视频时长、视频标题等视频元数据写入分布式
MySQL
数据库视频文件上传完成后,视频上传微服务会生成一个视频上传完成消息,并将其写入到消息队列服务器
视频内容处理器将消费这个上传完成消息,并根据消息内容:
- 从视频文件暂存服务器获取视频文件数据,进行处理
视频存储系统设计
使用Hadoop分布式文件系统
HDFS
进行存储
HDFS适合大文件存储的一次写入多次读取的场景,满足视频一次上传多次播放的需求
同时,它还可以自动进行数据备份,满足数据存储高可用
HDFS适合存储大文件,大文件减少磁盘碎片,更有利于存储空间的利用
- 同时
HDFS NameNode
的访问压力也更小,所以需要把若干个视频文件合并成一个HDFS文件进行存储
- 并将存储相关的细节记录到
HBase
中
网约车系统设计
整体架构
两个
APP
应用:
一个是给乘客的,用来叫车
一个是给司机的,用来接单
长连接管理
TCP是长连接,一旦建立了连接,连接通道就需要长期保持,不管是司机App发送位置信息给服务器
- 还是服务器推送派单信息给司机
App
,都需要使用这个特定的连接通道也就是说,司机App和服务器的连接是特定的,司机
App
需要知道自己连接的服务器是哪一台
- 而给司机App推送消息的时候,也需要知道要通过哪一台服务器才能完成推送
司机端的
TCP
长连接需要进行专门管理,处理司机App和服务器的连接信息