【架构】架构 知识点(完善中...)

目录

架构

缓存雪崩

状况

解决

缓存穿透

状况

解决

缓存击穿

状况

解决

需要学习的内容

基础

工作技术

提升技术

消息中间件

接口幂等性

介绍

解决方案

风控系统

分布式job

分布式配置中心

性能调优


架构

1.缓存雪崩

状况

缓存雪崩是指大量缓存失效 直接走数据库

缓存在同一时间内大量key过期(失效),接着无数的请求瞬间都落在了数据库中导致连接异常。

数据库无限被请求导致超负载挂掉  不走缓存,重启数据库之后又无限的请求

解决

  1. 事前:redis高可用,主从+哨兵,redis cluster,避免全盘崩溃
  2. 事中:本地ehcache缓存 + hystrix限流&降级,避免MySQL挂掉
  3. 事后:redis持久化RDB+AOF,快速恢复缓存数据
  4. 缓存的失效时间设置为随机值,避免同时失效

 

2.缓存穿透

状况

黑客频繁请求不在缓存内的数据 导致不走缓存

恶意用户模拟请求很多缓存中不存在的数据,由于缓存中都没有,导致这些请求短时间内直接落在了数据库上,导致数据库异常,甚至瞬间宕机。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。

 

解决

  1. 对请求参数进行校验,不合理直接返回
  2. 查询不到的数据也放到缓存,value为空,如 set -999 “”
  3. 使用布隆过滤器,快速判断key是否在数据库中存在,不存在直接返回

第一种是最基本的策略,第二种其实并不常用,第三种比较常用。

为什么第二种并不常用呢?

因为如果黑客构造的请求id是随机数,第二种并不能起作用,反而由于缓存的清空策略,(例如清除最近没有被访问的缓存)导致有用的缓存被清除了。
 

 

3.缓存击穿

状况

缓存击穿是指热点数据的缓存失效

key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。

热点数据 就是 经常使用的数据,当经常使用的缓存失效之后,大量的请求直接打到数据库 导致数据库挂掉

解决

  1. 设置key永远不过期,或者快过期时,通过另一个异步线程重新设置key
  2. 当从缓存拿到的数据为null,重新从数据库加载数据的过程上锁,下面写个分布式锁实现的demo

 

参考:https://blog.csdn.net/zzti_erlie/article/details/104655455

 

 

 

 

需要学习的内容

  • NIO
  • Netty
  • HTTP

 

基础

  • 分布式技术
  • 数据库技术
  • 应用开发
  • 互联网开源框架

工作技术

  • Java并发编程
  • 消息中间件
  • 源码分析能力
  • 微服务技术

提升技术

  • JVM调优
  • 设计模式
  • 数据结构与算法
  • 数据库调优

 

 

消息中间件

RocketMQ(阿里出品)推荐

RabbitMQ 

ActiveMQ(不推荐)

中小型公司,技术实力较为一般,技术挑战不是特别高,用 RabbitMQ 是不错的选择;

大型公司,基础架构研发实力较强,用 RocketMQ 是很好的选择。

 

 

分布式

微服务

Apollo 分布式配置中心  动态修改配置信息

Nacos注册和配置中心

SSO

 

 

接口幂等性

介绍

防止重复下单等...

接口可重复调用 在调用方多次调用的情况下, 接口最终得到的结果是一致的

解决方案

全局唯一ID Redis

去重表 Mysql

状态机  类似于 乐观锁   

通过数据库状态字段限制

 

 

风控系统

 

 

分布式job

xxl-job

 

 

 

 

分布式配置中心

  • 配置的增删改查;
  • 不同环境配置隔离(开发、测试、预发布、灰度/线上);
  • 高性能、高可用性;
  • 请求量多、高并发;
  • 读多写少;

现有的配置中心组件有:Spring Cloud Config、Apollo、Disconf、Diamond 等等

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

https://github.com/ctripcorp/apollo

 

性能调优

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是Superman丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值