php网站开发面试题,广东省网站集约化建设通知,南宁网站建设南宁,sage wordpress1.1 缓存预热 场景#xff1a;“宕机” 服务器启动后迅速宕机 问题排查#xff1a; 1.请求数量较高#xff0c;大量的请求过来之后都需要去从缓存中获取数据#xff0c;但是缓存中又没有#xff0c;此时从数据库中查找数据然后将数据再存入缓存#xff0c;造成了短期…1.1 缓存预热 场景“宕机” 服务器启动后迅速宕机 问题排查 1.请求数量较高大量的请求过来之后都需要去从缓存中获取数据但是缓存中又没有此时从数据库中查找数据然后将数据再存入缓存造成了短期内对redis的高强度操作从而导致问题 2.主从之间数据吞吐量较大数据同步操作频度较高 解决方案 前置准备工作 1.日常例行统计数据访问记录统计访问频度较高的热点数据 2.利用LRU数据删除策略构建数据留存队列例如storm与kafka配合 准备工作 1.将统计结果中的数据分类根据级别redis优先加载级别较高的热点数据 2.利用分布式多服务器同时进行数据读取提速数据加载过程 3.热点数据主从同时预热 实施 4.使用脚本程序固定触发数据预热过程 5.如果条件允许使用了CDN内容分发网络效果会更好 总的来说缓存预热就是系统启动前提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候先查询数据库然后再将数据缓存的问题用户直接查询事先被预热的缓存数据
1.2 缓存雪崩 场景数据库服务器崩溃一连串的场景会随之儿来 1.系统平稳运行过程中忽然数据库连接量激增 2.应用服务器无法及时处理请求 3.大量408500错误页面出现 4.客户反复刷新页面获取数据 5.数据库崩溃 6.应用服务器崩溃 7.重启应用服务器无效 8.Redis服务器崩溃 9.Redis集群崩溃 10.重启数据库后再次被瞬间流量放倒 问题排查 1.在一个较短的时间内缓存中较多的key集中过期 2.此周期内请求访问过期的数据redis未命中redis向数据库获取数据 3.数据库同时接收到大量的请求无法及时处理 4.Redis大量请求被积压开始出现超时现象 5.数据库流量激增数据库崩溃 6.重启后仍然面对缓存中无数据可用 7.Redis服务器资源被严重占用Redis服务器崩溃 8.Redis集群呈现崩塌集群瓦解 9.应用服务器无法及时得到数据响应请求来自客户端的请求数量越来越多应用服务器崩溃 10.应用服务器redis数据库全部重启效果不理想 总而言之就两点短时间范围内大量key集中过期 解决方案 思路 1.更多的页面静态化处理 2.构建多级缓存架构 Nginx缓存redis缓存ehcache缓存 3.检测Mysql严重耗时业务进行优化 对数据库的瓶颈排查例如超时查询、耗时较高事务等 4.灾难预警机制 监控redis服务器性能指标 CPU占用、CPU使用率 内存容量 查询平均响应时间 线程数 5.限流、降级 短时间范围内牺牲一些客户体验限制一部分请求访问降低应用服务器压力待业务低速运转后再逐步放开访问 落地实践 1.LRU与LFU切换 2.数据有效期策略调整 根据业务数据有效期进行分类错峰A类90分钟B类80分钟C类70分钟 过期时间使用固定时间随机值的形式稀释集中到期的key的数量 3.超热数据使用永久key 4.定期维护自动人工 对即将过期数据做访问量分析确认是否延时配合访问量统计做热点数据的延时 5.加锁慎用 总的来说缓存雪崩就是瞬间过期数据量太大导致对数据库服务器造成压力。如能够有效避免过期时间集中可以有效解决雪崩现象的 出现约40%配合其他策略一起使用并监控服务器的运行数据根据运行记录做快速调整。
1.3 缓存击穿 场景还是数据库服务器崩溃但是跟之前的场景有点不太一样 1.系统平稳运行过程中 2.数据库连接量瞬间激增 3.Redis服务器无大量key过期 4.Redis内存平稳无波动 5.Redis服务器CPU正常 6.数据库崩溃 问题排查 1.Redis中某个key过期该key访问量巨大 2.多个数据请求从服务器直接压到Redis后均未命中 3.Redis在短时间内发起了大量对数据库中同一数据的访问 总而言之就两点单个key高热数据key过期 解决方案 1.预先设定 以电商为例每个商家根据店铺等级指定若干款主打商品在购物节期间加大此类信息key的过期时长 注意购物节不仅仅指当天以及后续若干天访问峰值呈现逐渐降低的趋势 2.现场调整 监控访问量对自然流量激增的数据延长过期时间或设置为永久性key 3.后台刷新数据 启动定时任务高峰期来临之前刷新数据有效期确保不丢失 4.二级缓存 设置不同的失效时间保障不会被同时淘汰就行 5.加锁 分布式锁防止被击穿但是要注意也是性能瓶颈慎重 总的来说缓存击穿就是单个高热数据过期的瞬间数据访问量较大未命中redis后发起了大量对同一数据的数据库访问导致对数 据库服务器造成压力。应对策略应该在业务数据分析与预防方面进行配合运行监控测试与即时调整策略毕竟单个key的过 期监控难度较高配合雪崩处理策略即可。
1.4 缓存穿透 场景数据库服务器又崩溃了跟之前的一样吗 1.系统平稳运行过程中 2.应用服务器流量随时间增量较大 3.Redis服务器命中率随时间逐步降低 4.Redis内存平稳内存无压力 5.Redis服务器CPU占用激增 6.数据库服务器压力激增 7.数据库崩溃 问题排查 1.Redis中大面积出现未命中 2.出现非正常URL访问 问题分析 获取的数据在数据库中也不存在数据库查询未得到对应数据 Redis获取到null数据未进行持久化直接返回 下次此类数据到达重复上述过程 出现黑客攻击服务器 解决方案 1.缓存null 对查询结果为null的数据进行缓存长期使用定期清理设定短时限例如30-60秒最高5分钟 2.白名单策略 提前预热各种分类数据id对应的bitmapsid作为bitmaps的offset相当于设置了数据白名单。当加载正常数据时放行加载异常数据时直接拦截效率偏低 使用布隆过滤器有关布隆过滤器的命中问题对当前状况可以忽略 2.实施监控 实时监控redis命中率业务正常范围时通常会有一个波动值与null数据的占比 非活动时段波动通常检测3-5倍超过5倍纳入重点排查对象 活动时段波动通常检测10-50倍超过50倍纳入重点排查对象 根据倍数不同启动不同的排查流程。然后使用黑名单进行防控运营 4.key加密 问题出现后临时启动防灾业务key对key进行业务层传输加密服务设定校验程序过来的key校验 例如每天随机分配60个加密串挑选2到3个混淆到页面数据id中发现访问key不满足规则驳回数据访问 总的来说缓存击穿是指访问了不存在的数据跳过了合法数据的redis数据缓存阶段每次访问数据库导致对数据库服务器造成压力。通常此类数据的出现量是一个较低的值当出现此类情况以毒攻毒并及时报警。应对策略应该在临时预案防范方面多做文章。 无论是黑名单还是白名单都是对整体系统的压力警报解除后尽快移除。 务器造成压力。应对策略应该在业务数据分析与预防方面进行配合运行监控测试与即时调整策略毕竟单个key的过 期监控难度较高配合雪崩处理策略即可。