面试冲刺:22---如何设计一个高并发的系统?

一、这种题目该如何回答?

  • 首先明确的是,这种问题是没有标准答案的,面试官想要考你对整个体系架构的认知,以及体系架构中相关细节的描述
  • 因此,你可以从服务器的优化、数据库的优化、缓存、中间件等多方面进行讲解
  • 本文也只是个人总结,并不完美

二、服务端该如何优化?

  • 不在高并发的系统下,可能几台服务器就可以解决需求

  • 但是在高并发的情况下,少量的服务器是根本无法承载这些服务需求的,因此此时需要考虑的技术有负载均衡、反向代理等知识点
  • 在服务器界,我们以优秀的开源服务器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的搭配是非常好的解决方案

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/107759781