高并发解决方案详解(8大主流架构方案)

高并发解决方案详解(8大主流架构方案)

高并发是非常核心的大型架构技能,也是大厂重点考察的内容,下面我就全面来详解高并发解决方案@mikechen

负载均衡

负载均衡是:分布式系统、和高并发系统中,至关重要的技术。

负载均衡:是将用户请求分配到多台服务器上,避免单台服务器成为瓶颈,这使得系统能够处理更多的并发请求,提高整体处理能力。

所以,在高并发的场景,很多都会涉及到:负载均衡。

负载均衡(Load Balancing):是一种分布式计算技术,用于将传入的网络流量,分发到后端服务器群集中的多台服务器上。

高并发解决方案详解(8大主流架构方案)

通过均衡分配负载,可以避免单点过载,提高系统的整体处理能力、和可靠性。

负载均衡的实现,常见的有:硬件负载均衡、和软件负载均衡。

硬件负载均衡器是专门设计的设备,例如:F5、Citrix NetScaler…等。

除此之外,还有云服务商也有提供,比如:AWS Elastic Load Balancing、阿里云SLB、Google Cloud Load Balancing…等。

 

微服务拆分

高并发的大型网站,一般都会涉及到分布式架构,分布式架构首当其冲的,肯定都会涉及到微服务架构、以及拆分。

微服务架构通过将单一应用拆分成多个小服务,每个服务负责特定功能,这样可以独立部署、独立扩展。

通过微服务架构,可用更好的扩展,可用更好的应对高性能的场景。

微服务里,目前国内使用最多就是:Spring Cloud 、和 Spring Cloud Alibaba 微服务框架。

Spring Cloud微服务框架,如下图所示:

高并发解决方案详解(8大主流架构方案)

都会涉及到:提供服务发现(Eureka)、负载均衡(Ribbon)、配置管理(Config)、熔断(Hystrix)、路由(Zuul)…等功能。

以及Spring Cloud Alibaba 微服务框架,如下图所示:

高并发解决方案详解(8大主流架构方案)

 

Spring Cloud Alibaba,扩展了Spring Cloud的功能,增加了很多组件。

比如:Nacos(服务注册与发现、配置管理)、Sentinel(流量控制和熔断)、RocketMQ(分布式消息队列)、Dubbo(分布式服务框架)、Seata(分布式事务)…等组件。

 

分布式缓存

分布式缓存,主要用于快速存取数据,极大提升数据读取速度,广泛应用于:各类高并发、高性能系统中。

为什么涉及到性能,都会涉及到缓存呢?其实原因很简单。

主要体现在两点:

第一点:内存读写速度快

分布式缓存系统通常基于内存进行数据存储、和读取,内存的读写速度远高于磁盘,因此可以显著提高数据的访问速度。

第二点:减少数据库压力

将频繁访问的数据缓存到分布式缓存中,减少对数据库的直接访问,从而降低数据库的负载和响应时间。

目前比较常用的分布式缓存,主要就是:Redis、和Memcached。

Redis

基于内存的键值存储系统,支持多种数据结构(如:字符串、哈希、列表、集合、有序集合等),适用于快速读取和写入场景。

支持主从复制、持久化、事务、Lua脚本、和高可用集群。

Memcached

轻量级的基于内存的键值存储系统,主要用于缓存频繁访问的数据。

简单高效,适用于读多写少的场景。

 

异步处理

在高并发场景下,异步处理通过以下方式应对高并发,实现高效的任务处理,提升系统性能。

通过异步处理,服务器可以同时处理更多的请求,提升系统的吞吐量,显著减少单个请求的响应时间,提升用户体验。

如下图所示:

高并发解决方案详解(8大主流架构方案)

通过异步处理,将耗时的操作(如:下订单后的发短信),从同步改造为异步。

不仅能显著提升系统的响应速度、和并发处理能力,还能提高用户体验。

采用消息队列进行异步处理,是一种常见且有效的实现方式。

目前使用比较多的消息队列,主要就是:RabbitMQ、Kafka、RocketMQ。

 

 

分库分表

分库分表:是应对大规模数据存储、和高并发访问的一种常见策略。

通过将数据分散存储在多个数据库、或表中,以提高系统的性能、可扩展性和可用性。

分库分表的核心思想主要包括两个方面:分库和分表。

如下图所示:
高并发解决方案详解(8大主流架构方案)

垂直分库

垂直分库,是按照业务模块、或数据表进行拆分,将不同的业务模块、或表分散到不同的数据库实例中。

优点

  • 各模块独立:不同业务模块独立部署,互不影响。

缺点

  • 扩展性有限:单表数据量大时,仍会遇到性能瓶颈。
  • 事务处理复杂:跨库事务处理复杂,需要分布式事务管理。

水平分库

水平分库是将同一张表的数据,按照某种策略(如:用户ID、订单ID…等)分散到多个数据库实例中。

优点

  • 数据按量均衡分布,访问压力分散到多个数据库实例,提高系统性能。

缺点

  • 数据路由复杂:查询数据时需要根据分片规则确定数据所在的数据库实例。
  • 跨库查询复杂:跨库查询需要在应用层进行合并处理,增加了复杂性。

常见的分库分表中间件,主要会包含:ShardingSphere 、Mycat……等等。

高并发解决方案详解(8大主流架构方案)

 

削峰填谷

在高并发场景下,削峰填谷是一种重要的策略,主要用于:平滑系统负载波动,防止系统在短时间内被大量请求压垮。

如下图所示:

高并发解决方案详解(8大主流架构方案)

削峰填谷的实现原理:基于平滑系统负载,防止系统在短时间内被大量请求压垮,从而提高系统的稳定性和响应速度。

其核心思想:

第一步:是在高峰期将请求暂时存储起来,通常使用消息队列等方式,以减轻系统的瞬时压力;

第二步:在系统负载较低时,逐步处理这些请求;

第三步:最后,以达到平滑负载波动的目的。

总之,削峰填谷通过将高峰期的请求均匀分散到低谷期处理,减少系统在高峰期的压力。

 

数据库优化

数据库性能优化,是确保数据库系统能够高效、稳定地处理请求并提供良好性能的过程。

常见的方案有:

  • 使用规范化设计,避免数据冗余;
  • 选择合适的数据类型和字段长度,尽量减小数据存储空间;
  • 避免过多的索引,因为索引的存在会增加写操作的开销;
  • 定期检查索引的使用情况,并优化不必要的索引;
  • 尽量减少复杂的联合查询、和子查询,优化查询语句的性能。
  • 避免长事务,以减少锁定时间和锁冲突……等等。

这些都是数据库性能优化策略,具体的优化方法和策略需要根据具体的数据库类型、应用场景、和需求来确定。

 

分布式数据库

分布式数据库将数据分散存储在多个节点上,提高系统性能、可扩展性和可用性。

常见的有:

  • 分布式关系型数据库:如Google Cloud Spanner、TiDB。
  • 分布式列式数据库:如Apache Cassandra、HBase。
  • 分布式文档数据库:如MongoDB、Couchbase。

这些分布式数据库,合理的使用,都可用极大的提升性能。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧