下咽顿除烟火气,入齿便作冰雪声。 文天祥 西瓜吟
场景 : 618抢购。 很多系统宕机,很多服务500(404)。
发生这个场景的问题所在:
1: 独立api频繁被调用
2:电商网站某个模块入口被瞬间挤爆
3: 调用第三方网站api,我方请求过多,第三方网站无法及时响应,服务器排队太多宕机。
针对不同的场景,使用不同的限流算法来避免网站不可用。
高并发系统的三把利剑
1:缓存
1.1 缓存目的 : 提升系统访问速度和增大系统能处理的容量。提升性能,缓解数据库压力
1.2 缓存的方式: redis , memcached
1.3 缓存带来的问题
【1】、缓存穿透:缓存穿透是说收到一个请求,但是该请求缓存中不存在,只能去数据库中查询,然后放进缓存。 【2】、缓存击穿:上面提到的某个数据没有,然后好多请求查询数据库,可以归为缓存击穿的范畴:对于热点数据,当缓存失效的一瞬间,所有的请求都被下放到数据库去请求更新缓存,数据库被压垮。 【3】、缓存雪崩:缓存雪崩是指当我们给所有的缓存设置了同样的过期时间,当某一时刻,整个缓存的数据全部过期了,然后瞬间所有的请求都被抛向了数据库,数据库就崩掉了。 【4】、缓存刷新:既清空缓存 ,一般在insert、update、delete操作后就需要刷新缓存,如果不执行就会出现脏数据。但当缓存请求的系统蹦掉后,返回给缓存的值为null。
2:降级 Spring Cloud Hystrix
2.1 人工降级
修改配置中心的配置,代码里面根据相关配置开关去执行不同的代码逻辑块。
2.2 自动降级
熔断策略
熔断本质上是一个过载保护机制。
举例:
微服务A -》微服务B -》微服务C,如果微服务A需要发布新版本,会对B,C产生影响。
房子的排污管道从上至下,如果你家楼下的管道堵住了,污水会灌到你们家。这时候你先避免自己
家收到影响,然后通知楼下去疏通。
熔断系统性能