Java开发框架和中间件面试题(9)

news/2024/8/19 10:58:09

目录

102.你了解秒杀吗?怎么设计?

103.什么是缓存穿透?怎么解决?


102.你了解秒杀吗?怎么设计?

1.设计难点:并发量大,应用,数据库都承受不了。另外难控制超卖。

2.设计要点:

      将请求尽量拦截在系统上游html尽量静态化,部署到cdn上面。按钮及时设置为不可用,禁止用户重复提交请求。

     设置页面缓存,针对同一个页面和uid一段时间内返回缓存页面。

     数据用缓存抗,不直接落到数据库。

     读数据的时候不做强一致性校验,写数据的时候再做。

     在每台物理机上也缓存商品信息等等变动不大的相关的数据。

    像商品中的标题和描述这些本身不变的会在秒杀开始之前全量推送到秒杀机器上并一直缓存直到秒杀结束。

    像库存这种动态数据会采用被动失效的方式缓存一定时间(一般是数秒)。失效后再去缓存拉取最新的数据。如果允许的话,用异步的模式,等缓存都落库之后再返回结果。

  如果允许的话,增加验证措施。

3.其他业务和技术保障措施:

           业务隔离。把秒杀做成一种营销活动,卖家要参加秒杀这种营销活动需要单独报名,从技术上说,卖家报名之后对我们来说就是已知热点,当真正开始时我们可以提前做好预热。

           系统隔离。系统隔离更多的是运行时的隔离,可以通过分组部署的方式和另外99%分开。秒杀还申请了单独的域名,目的也是请求到不同的集群中。

          数据隔离。秒杀所调用的数据大部分都是热数据,比如,会启用单独Cache集群或者MySQL数据库来放热点数据,目前也是不想0.01%的数据影响另外99.9%。另外需要复习缓存穿透,雪崩等等问题,主要的流量都落在了缓存数据库上,需要针对缓存数据库的高可用作保障。

 4.短连接生成  这个应该是比较公认的方案了:

   1.分布式ID生成器产生ID

   2.ID转62进制字符串

   3.   记录数据库,根据业务要求确定过期时间,可以保留部分永久链接,主要难点在于分布式ID生成。鉴于短连接一般没有严格递增的需求,可以使用预先分发一个号段,然后生成的方式。看了下新浪微博的短连接,8位,理论上可以保存超过200万亿对关系,具体怎么存储还有待研究。

103.什么是缓存穿透?怎么解决?

   1.缓存穿透。

     一般的缓存穿透,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB数据库)。一些恶意的请求会故意查询不存在key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。

   2.怎么解决?对查询结果为空的情况也进行缓存,缓存时设置短一点,或者该key对应的数据insert之后清理缓存。对一定不存在的key进行过滤。可以把所有的可能存在的key放在一个大的bitmap中,查询是通过该bitmap过滤。

3.缓存雪崩。

当缓存服务器重启或者大量缓存集中在某一时间段失效,这样在失效的时候,会给后端系统带来很大的压力,导致系统崩溃。

4.如何解决?

在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如:

对某个key只允许一个线程查询数据和写缓存,其他线程等待;

做二级缓存,不同的key,设置不同的过期时间,让缓存失效的时间尽量均匀。

  

  


http://lihuaxi.xjx100.cn/news/1920449.html

相关文章

redis 从0到1完整学习 (十):RedisObject 数据结构

文章目录 1. 引言2. redis 源码下载3. redisObject 数据结构4. 参考 1. 引言 前情提要: 《redis 从0到1完整学习 (一):安装&初识 redis》 《redis 从0到1完整学习 (二):redis 常用命令》 《…

鸿蒙Harmony(八)ArkUI--状态管理器之@State

状态管理 在声明式UI中,是以状态驱动视图更新 状态:指驱动视图更新的数据(被装饰器标记的变量) StateProp 和 LinkProvide和 Consume State State装饰器标记的变量必须初始化,不能为空值State支持Object 、class、…

MIT线性代数笔记-第31讲-线性变换及对应矩阵

目录 31.线性变换及对应矩阵打赏 31.线性变换及对应矩阵 线性变换相当于是矩阵的抽象表示,每个线性变换都对应着一个矩阵 例: 考虑一个变换 T T T,使得平面上的一个向量投影为平面上的另一个向量,即 T : R 2 → R 2 T:R^2 \to R…

腾讯云轻量应用服务器购买流程(两种方式)

腾讯云轻量应用服务器购买指南,有两个入口,一个是在特价活动上购买,一个是在轻量应用服务器官方页面购买,特价活动上购买价格更便宜,轻量2核2G3M带宽服务器62元一年起,阿腾云atengyun.com分享腾讯云轻量应用…

成考生必看!2023年成人高考录取后入学拿证流程

成人高考录取后并不是就可以坐等拿证了! 成人高考录取后你还有这些事情要做。 一起来了解一下吧! 成人高考入学到拿证流程 办理入学流程 1.入学时间 确认被高校录取后,12月下旬左右开始办理入学(实际时间以各院校安排为准) 2.缴…

DDP分布式训练的官方demo及相关知识

参考链接 1.分布式训练:并行化,跨进程和跨集群的计算 2.torch.distributed.init_process_group() 来初始化进程组,需要指定worker的通信机制,一般为nccl(NVIDIA推出),1个进程对应1个gpu.nccl是nvidia的显卡通信方式,用于把模型参数…

ts中的任意接口

interface Persontest {name:string;[key:string]:any } var psss:Persontest{name:1,age:10,sex:男,[Symbol()]:灵境胡同 }ts中,[Symbol()] 是一个计算属性名称的语法,可以在对象字面量中使用 Symbol 类型来动态地生成属性名称,[Symbol()] 生…

react 代数效应 和 vue vm思想

前言 React 的代数效应和 Vue 的 VM 思想是两种不同的编程模型,它们都试图解决 UI 开发中的一些挑战,如副作用管理、状态同步、组件抽象等。 React 的代数效应 是指将副作用从函数调用中分离,使函数关注点保持纯粹,同时通过代数运…