面试冲刺:22---如何设计一个高并发的系统?
分类:
文章
•
2024-07-02 19:20:16
一、这种题目该如何回答?
- 首先明确的是,这种问题是没有标准答案的,面试官想要考你对整个体系架构的认知,以及体系架构中相关细节的描述
- 因此,你可以从服务器的优化、数据库的优化、缓存、中间件等多方面进行讲解
- 本文也只是个人总结,并不完美
二、服务端该如何优化?

- 但是在高并发的情况下,少量的服务器是根本无法承载这些服务需求的,因此此时需要考虑的技术有负载均衡、反向代理等知识点
-
在服务器界,我们以优秀的开源服务器Nginx为例,如下图所示:
- Nginx可以充当代理的角色,对后端的所有服务器进行反向代理,服务端连接到Nginx,Nginx再将所有请求转发到后端的服务器
- Nginx还可以实现负载均衡,负载均衡就是Nginx将客户端的请求按照一定的规则分配给后端服务器进行处理

- 当然,此处只是以宏观的方式展示服务器方面的优化,但是具体服务器内部的编码等实现细节此处就不做讲解了
三、中间件如何使用?
- 其实中间件这个概念有点模糊,也有点广泛,比如说Redis、MySQL、Nginx这些其实都是中间件,但是此处我们不把它们归并到这个地方
-
中间件有:消息队列(ZeroMQ、RocketMQ、ActiveMQ、Kafka)、分布式协同发现(ZooKeepr)、分布式文件系统等等
- 下面简单介绍一些,就不一一全部都介绍了
消息队列
- 我们知道队列是先进先出的规则,一端向消息队列存入数据,另一端从消息队列中取出数据
- 并且消息队列还有很多种方式,例如:请求-响应模式、发布-订阅模式等
- 例如,一些服务器获取数据之后向MQ写入数据,另外一些服务器需要获取这些数据,那么就可以从MQ中取出数据

FastDFS
- FastDFS可以充当分布式的文件系统,其内部的数据是直接存储在硬盘上的
- Nginx有一个fastdfs-nginx-module模块,可以配置在Nginx中,直接通过URL进行访问
-
主要优点有:
- 备Tracker服务,增强系统的可用性
- 系统不需要支持POSIX,这样的话就降低了系统的复杂度,使得处理的速度会更高
- 支持主从文件,支持自定义扩展名
- 支持在线扩容机制,增强了系统的可扩展性
- 实现了软RAID,增强了系统的并发处理能力和数据容错恢复能力

- 当然,消息中间件还有很多,就不一一介绍了,例如,还可以加入ZooKeeper等

四、数据库该如何设计?
MySQL
- 对于高并发下的数据的读写与存取,单台MySQL显然是无法满足需求的,因此此时就需要搭建MySQL的集群
- 集群的方式有很多,下面以主从模式为例,Master用来提供写服务,多台Slave用来提供读服务,从而实现读写分离
- 当然,对于MySQL内部的细节还有很多是需要优化的,比如MySQL索引的设置、MySQL的分库分表

MongoDB
- MongoDB 是一个基于分布式文件存储的数据库。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案

Redis
- Redis作为当今最火的缓存系统,高并发的系统当然少不了
- Redis作为服务端数据读写的缓存,不仅仅可以减轻后端数据库MySQL的压力,而且还提高了服务端数据的读写速度,Redis与MySQL的搭配是非常好的解决方案
