如何应对电商高并发场景,选择哪种解决方案更有效?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1209个文字,预计阅读时间需要5分钟。
网站架构师面临的最大挑战之一就是并发。自Web服务开始以来,并发水平一直在不断增长。一个主流网站同时服务数十万甚至数百万用户,这种现象并不罕见。就目前而言,广泛应用的电商平台来说,并发更是不言而喻。
网站架构师面临的最大挑战之一就是并发。自Web服务开始以来,并发水平一直在不断增长,一个主流网站同时服务十万甚至数百万用户,这并不罕见。
就目前应用广泛的电商系统来说,各种营销场景的增加,让电商系统高并发也成为一种必然。为此,本文将给大家带来2种高并发解决方案,希望能为电商系统实现高并发提供一些灵感。
1、多级缓存
2、Nginx 限流
本文我们将以CRMEB商城为例,了解电商中常见的2种高并发方案
一、多级缓存
我们以CRMEB Pro版首页为例
在上图中,我们可以看到商品的分类变化不大,我们可以把它存储在缓存中,这样会大大减轻数据库的压力,这种情况我们可以用redis进行缓存,但是有时候电商网站的并发数只靠redis,会使redis的压力太大。这时我们在这里引入一个概念:多级缓存。
1.什么是多级缓存
为了解决上述问题,我们在redis的基础上增加了另一个nginx缓存。这时候用户访问我们的网站,会先访问nginx缓存。如果nginx缓存不存在,他们会再次访问redis缓存。如果redis也不存在,我们最终会访问MySQL来获取数据。这样一来redis的压力就大大降低了,然后nginx缓存和redis缓存就形成了多级缓存。
2、多级缓存怎么实现
了解了多级缓存的概念,我们该怎么去实现多级缓存呢?
我们可以使用OpenResty实现,这是一个基于Nginx和Lua的高性能Web平台,它将Nginx与大量复杂的Lua库、第三方模块和大多数依赖项集成在一起。Lua是一种轻量级紧凑脚本语言,用标准C语言编写,以源代码的形式开放。它被设计成嵌入在应用程序中,从而为应用程序提供灵活的扩展和定制功能。在实际操作中,我们通常使用Lua脚本来访问Nginx缓存、Redis缓存和MySQL。流程图如下:
图片来自网络,侵权联系删除
但是,在上述过程中,我们会发现一个问题。当Redis缓存已经存在时,数据库中的数据已经更改。此时所有用户都访问缓存的数据,那么如何解决这个问题呢?
3、Redis 缓存同步 MySql 数据
我们可以通过 canal 解决上面的问题。canal 是一个用来监控数据库数据的变化的工具,可以在Mysql 数据更新时获取其更新的数据。
解决方案:当Mysql数据发生变化时,我们可以通过canal微服务或者用RocketMQ或Kafka配置MQ模式来改变redis中的缓存数据,使Redis中的缓存数据与Mysql中的数据保持一致。
二、Nginx 限流
平常情况下,首页的并发量会比较大,即使使用多级缓存,当用户不断刷新页面时,或者大量恶意请求首页,也会对系统造成影响。这时候就需要采用限流方案了。
1、什么是限流
顾名思义,限流就是限制流量。比如你的手机流量包只有1 G的流量,用完了就没了。这时候我们就可以说我们的流量被限制了,这就叫限流。
常见的限流有漏桶算法
图片来自网络,侵权联系删除
算法思路:
水(请求)从上方倒入水桶,从水桶下面流出(被处理);
来不及流出的水,储存在水桶(缓冲器)里,以固定的速率流出;
水桶满后水溢出(丢弃)。
这个算法的核心是:缓存请求,统一处理,直接丢弃冗余请求。
2、nginx 限流的方式
控制速度
我们先来说第一种,控制速度。Nginx 控制速率主要使用的是漏桶算法,这样能够强行保证请求的实时处理速度不会超过设置的阈值。
配置 OpenResty 中 Nginx 的配置文件,使在访问 ip/test1 地址时进行限流,该地址会访问一个 Lua 脚本
user root root;
worker_processes 1;
events {
worker_connections 1024;
}
www.558idc.com/hkzq.html提供,感恩】
本文共计1209个文字,预计阅读时间需要5分钟。
网站架构师面临的最大挑战之一就是并发。自Web服务开始以来,并发水平一直在不断增长。一个主流网站同时服务数十万甚至数百万用户,这种现象并不罕见。就目前而言,广泛应用的电商平台来说,并发更是不言而喻。
网站架构师面临的最大挑战之一就是并发。自Web服务开始以来,并发水平一直在不断增长,一个主流网站同时服务十万甚至数百万用户,这并不罕见。
就目前应用广泛的电商系统来说,各种营销场景的增加,让电商系统高并发也成为一种必然。为此,本文将给大家带来2种高并发解决方案,希望能为电商系统实现高并发提供一些灵感。
1、多级缓存
2、Nginx 限流
本文我们将以CRMEB商城为例,了解电商中常见的2种高并发方案
一、多级缓存
我们以CRMEB Pro版首页为例
在上图中,我们可以看到商品的分类变化不大,我们可以把它存储在缓存中,这样会大大减轻数据库的压力,这种情况我们可以用redis进行缓存,但是有时候电商网站的并发数只靠redis,会使redis的压力太大。这时我们在这里引入一个概念:多级缓存。
1.什么是多级缓存
为了解决上述问题,我们在redis的基础上增加了另一个nginx缓存。这时候用户访问我们的网站,会先访问nginx缓存。如果nginx缓存不存在,他们会再次访问redis缓存。如果redis也不存在,我们最终会访问MySQL来获取数据。这样一来redis的压力就大大降低了,然后nginx缓存和redis缓存就形成了多级缓存。
2、多级缓存怎么实现
了解了多级缓存的概念,我们该怎么去实现多级缓存呢?
我们可以使用OpenResty实现,这是一个基于Nginx和Lua的高性能Web平台,它将Nginx与大量复杂的Lua库、第三方模块和大多数依赖项集成在一起。Lua是一种轻量级紧凑脚本语言,用标准C语言编写,以源代码的形式开放。它被设计成嵌入在应用程序中,从而为应用程序提供灵活的扩展和定制功能。在实际操作中,我们通常使用Lua脚本来访问Nginx缓存、Redis缓存和MySQL。流程图如下:
图片来自网络,侵权联系删除
但是,在上述过程中,我们会发现一个问题。当Redis缓存已经存在时,数据库中的数据已经更改。此时所有用户都访问缓存的数据,那么如何解决这个问题呢?
3、Redis 缓存同步 MySql 数据
我们可以通过 canal 解决上面的问题。canal 是一个用来监控数据库数据的变化的工具,可以在Mysql 数据更新时获取其更新的数据。
解决方案:当Mysql数据发生变化时,我们可以通过canal微服务或者用RocketMQ或Kafka配置MQ模式来改变redis中的缓存数据,使Redis中的缓存数据与Mysql中的数据保持一致。
二、Nginx 限流
平常情况下,首页的并发量会比较大,即使使用多级缓存,当用户不断刷新页面时,或者大量恶意请求首页,也会对系统造成影响。这时候就需要采用限流方案了。
1、什么是限流
顾名思义,限流就是限制流量。比如你的手机流量包只有1 G的流量,用完了就没了。这时候我们就可以说我们的流量被限制了,这就叫限流。
常见的限流有漏桶算法
图片来自网络,侵权联系删除
算法思路:
水(请求)从上方倒入水桶,从水桶下面流出(被处理);
来不及流出的水,储存在水桶(缓冲器)里,以固定的速率流出;
水桶满后水溢出(丢弃)。
这个算法的核心是:缓存请求,统一处理,直接丢弃冗余请求。
2、nginx 限流的方式
控制速度
我们先来说第一种,控制速度。Nginx 控制速率主要使用的是漏桶算法,这样能够强行保证请求的实时处理速度不会超过设置的阈值。
配置 OpenResty 中 Nginx 的配置文件,使在访问 ip/test1 地址时进行限流,该地址会访问一个 Lua 脚本
user root root;
worker_processes 1;
events {
worker_connections 1024;
}
www.558idc.com/hkzq.html提供,感恩】

