高并发解决方案

一般来说,我们的数据是存储在数据库的,当用户访问服务时,用户通过后端请求数据库数据,最害怕的就是出现热Key、大Value情况,所谓热Key就是某个值瞬间被上万甚至十万百万个用户请求

1.限流

在电商系统的秒杀中,也会有大批量的用户同时涌入,鉴于只有少部分用户能够秒杀成功,所以要限制大部分流 量,只允许少部分流量进入服务后端

  • Netflix的hystrix
  • 阿里系开源的sentinel

(1):nginx也可以做限流

Nginx 提供两种限流方式,一是控制速率,二是控制并发连接数

limit_req_zonelimit_conn_zone、

限流算法:漏桶算法

(2):gatway网关实现限流

限流算法:令牌桶算法

配置加入令牌的速率,和令牌桶能放入的最大令牌数量,只有请求获得了令牌才能访问,没有获得令牌就会拒绝访问,令牌桶算法是基于redis实现的,默认使用redis的RateLimter限流算法实现的

高并发解决方案_第1张图片

 配置了RequestRateLimiter的限流过滤器

burstCapacity,令牌桶总容量。
replenishRate,令牌桶每秒填充平均速率。
key-resolver,用于限流的键的解析器的 Bean 对象的名字。它使用 SpEL 表达式根据#{@beanName}从 Spring 容器中获取 Bean 对象。
KeyResolver需要实现resolve方法,比如根据Hostname进行限流,则需要用hostAddress去判断。实现完KeyResolver之后,需要将这个类的Bean注册到Ioc容器中

2.页面静态化

首先我们可以使用Freemarker对页面进行静态化,让用户减少跟后端服务器之间的交互。这样就能降低服务器的 压力,如果条件允许我们可以采用CDN加速

3.引入redis

总所周知计算机的瓶颈之一就是IO,为了解决内存与磁盘速度不匹配的问题,产生了缓存。将热点数据存放在内存中随用随取,不仅可以降低连接到数据库的请求,避免数据库挂掉;还可以减少频繁重复的复杂逻辑结果。需要注意的是,无论是击穿、穿透与雪崩,都是在高并发前提下。

4.MQ,异步解耦

你可能感兴趣的:(JAVASE,java,开发语言)