什么是高并发
高并发是指系统在同一时间内处理大量并发请求的能力,比如:天猫双十一活动,同时在凌晨12点上千万人同时来抢购商品。
这样的场景就是典型的高并发,同一时间有大量的请求来访问网站,这就需要系统具备高并发处理能力。
如何提高高并发能力
实现高并发性能的挑战,包括但不限于以下几个方面:
1.分布式缓存
使用缓存可以减轻服务器和数据库的负担,提高响应速度。
2.负载均衡
使用负载均衡技术,将请求分发到多个服务器上,以避免单一服务器成为性能瓶颈。
3.数据库优化
数据库是很多应用的瓶颈之一,因此需要采取一系列的数据库优化措施。
比如:常见的读写分离,分库分表等数据库优化技术。
4.流量削峰
线上的秒杀等业务场景,需要平安度过同时抢购带来的流量峰值的问题,这就是流量削峰。
5.分布式架构
将系统拆分成多个独立的模块,通过分布式架构实现并行处理,提高整体的并发处理能力。
网络优化: 优化网络通信,减少延迟,提高数据传输效率。
分布式缓存
分布式缓存是一种将缓存数据存储在多个节点上的系统,通过在分布式环境中共享缓存数据,提高整体系统的性能和可扩展性。
常用的分布式缓存包括:Redis和Memcached。
1.Memcached
Memcached是一个开源的,高性能的内存绶存软件,从名称上看Mem就是内存的意思,而Cache就是缓存的意思。
Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。
Memcached通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。
2.Redis
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
特点:
Redis支持多种类型的数据结构,最常用的5大数据类型,如下图所示:
Redis的持久化机制有3种:
1.RDB(Redis Data Base) 内存快照
RDB 快照是一次全量备份,RDB快照是内存数据的二进制序列化形式,在存储上非常紧凑。
2.AOF(Append Only File) 增量日志
AOF 则是将每次执行的写命令保存到硬盘,类似于 MySQL 的 Binlog,AOF 持久化的实时性更好,即当进程意外退出时丢失的数据更少。
3.RDB AOF混合持久化
Redis4.0 后大部分的使用场景都不会单独使用 RDB 或者 AOF 来做持久化机制,而是兼顾二者的优势混合使用。
负载均衡
负载均衡(Load Balancing)是一种分布式系统架构中的技术,用于将网络请求或任务分散到多个服务器或资源上。
比如:当系统面临大量用户访问,负载过高的时候,通常会使用增加服务器数量来进行横向扩展来提高整个系统的处理能力。
如下图所示:
负载均衡器使用不同的算法来选择目标服务器。
常见的算法包括:轮询(Round Robin)、最小连接数(Least Connections)、最小响应时间(Least Response Time)等。
有许多负载均衡软件可用,它们提供各种负载均衡算法和功能,以满足不同场景和需求。
比如:
- Nginx: Nginx是一款高性能的开源反向代理服务器,它同时也可以作为负载均衡器使用。
- HAProxy: HAProxy是一款高性能的负载均衡器和反向代理服务器,它支持TCP和HTTP负载均衡,具有强大的配置选项和灵活的算法。
- F5 BIG-IP: F5 BIG-IP是一种商业负载均衡和应用交付控制器,它提供了广泛的负载均衡和应用交付功能,适用于大型企业和数据中心。
数据库优化
1.读写分离
读写分离是一种数据库架构设计模式,用于优化数据库系统的性能和可伸缩性。
以下是读写分离的一些关键概念和特点:
- 主从复制(Master-Slave Replication): 读写分离的核心是在数据库中使用主从复制机制。主数据库负责处理写操作(插入、更新、删除等),而从数据库则复制主数据库的数据,用于处理读操作。
- 读操作分发到从库: 所有的读操作,例如查询请求,被分发到从数据库上执行。由于从数据库不负责写操作,因此可以更好地应对读操作的高并发需求。
- 写操作集中在主库: 所有的写操作都集中在主数据库上执行。这确保了数据的一致性,因为写操作只在一个地方进行。
- 数据复制机制: 通常,从主数据库到从数据库的数据复制是异步的,这意味着主库的变化不会立即反映在所有的从库上。这可能导致在某些情况下出现读取到旧数据的情况,因此需要在应用程序中考虑这一点。
2.分库分表
类似淘宝这样的网站,海量数据的存储和访问成为了系统设计的瓶颈问题,一张表超过了亿级数据,都会考虑拆分。
分库分表的核心思想,主要包含:分库和分表
如下图所示:
以下是分库分表的一些关键概念和特点:
- 分库: 将整个数据库按照某种规则划分成多个数据库实例,通常分库的选择可以基于某种业务规则,例如:按照用户ID范围、按照地理位置等。
- 分表: 在每个数据库实例中,将大表按照某种规则水平切分成多个小表,分表的规则可以是按照表的某个字段进行切分,例如按照时间、按照哈希值等。
- 水平切分: 分库分表属于水平切分的一种,即按行切分数据,这与垂直切分(按列切分)相对应,垂直切分通常是将表按照列的方式进行拆分。
流量削峰
流量削峰是一种通过调整系统或服务的策略,以减缓或平滑系统处理的峰值流量的过程。
削峰从本质上来说就是更多地延缓用户请求,以及层层过滤用户的访问需求。
如下图所示:
可以通过CDN、缓存、消息中间件等方式,来一步步降低流量,从而减少对数据库的压力。
分布式架构
分布式架构会从一个拆分为多个系统,每个系统都有独立的数据库等,通过这样的横向扩展,就可以支撑更大的并发量。
微服务架构拆分,最常见的就是Spring Cloud 和Spring Cloud Alibaba。
Spring Cloud体系,包含如下:
如果还想更加深入的了解Spring Cloud,请查看:Spring Cloud最全详解(万字图文总结)
以及Spring Cloud Alibaba体系,包含如下:
更加详细的请查看:Spring Cloud Alibaba详解(史上最全组件文档教程)
总体而言,实现高并发需要综合考虑硬件、软件、网络和架构等多个方面的因素,以确保系统在大量并发请求的情况下仍然能够保持稳定、高效的运行。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》