当前位置: 首页 > news >正文

找国内外贸公司的网站邢台专业做网站的地方

找国内外贸公司的网站,邢台专业做网站的地方,百度账号申请注册,开个网站卖机器怎么做1、面试题 如何保证缓存与数据库的双写一致性#xff1f; 2、面试官心里分析 你只要用缓存#xff0c;就可能会涉及到缓存与数据库双存储双写#xff0c;你只要是双写#xff0c;就一定会有数据一致性的问题#xff0c;那么你如何解决一致性问题#xff1f; 3、面试题剖析…  1、面试题   如何保证缓存与数据库的双写一致性   2、面试官心里分析   你只要用缓存就可能会涉及到缓存与数据库双存储双写你只要是双写就一定会有数据一致性的问题那么你如何解决一致性问题   3、面试题剖析   一般来说就是如果你的系统不是严格要求缓存数据库必须一致性的话缓存可以稍微的跟数据库偶尔有不一致的情况最好不要做这个方案读请求和写请求串行化串到一个内存队列里去这样就可以保证一定不会出现不一致的情况   串行化之后就会导致系统的吞吐量会大幅度的降低用比正常情况下多几倍的机器去支撑线上的一个请求。    Cache Aside Pattern缓存数据库读写模式的分析 最经典的缓存数据库读写的模式cache aside pattern 1、Cache Aside Pattern 1读的时候先读缓存缓存没有的话那么就读数据库然后取出数据后放入缓存同时返回响应 2更新的时候先删除缓存然后再更新数据库   2、为什么是删除缓存而不是更新缓存呢 原因很简单很多时候复杂点的缓存的场景因为缓存有的时候不简单是数据库中直接取出来的值 商品详情页的系统修改库存只是修改了某个表的某些字段但是要真正把这个影响的最终的库存计算出来可能还需要从其他表查询一些数据然后进行一些复杂的运算才能最终计算出 现在最新的库存是多少然后才能将库存更新到缓存中去 比如可能更新了某个表的一个字段然后其对应的缓存是需要查询另外两个表的数据并进行运算才能计算出缓存最新的值的 更新缓存的代价是很高的 是不是说每次修改数据库的时候都一定要将其对应的缓存去跟新一份也许有的场景是这样的但是对于比较复杂的缓存数据计算的场景就不是这样了 如果你频繁修改一个缓存涉及的多个表那么这个缓存会被频繁的更新频繁的更新缓存 但是问题在于这个缓存到底会不会被频繁访问到 举个例子一个缓存涉及的表的字段在1分钟内就修改了20次或者是100次那么缓存跟新20次100次; 但是这个缓存在1分钟内就被读取了1次有大量的冷数据 28法则黄金法则20%的数据占用了80%的访问量 实际上如果你只是删除缓存的话那么1分钟内这个缓存不过就重新计算一次而已开销大幅度降低 每次数据过来就只是删除缓存然后修改数据库如果这个缓存在1分钟内只是被访问了1次那么只有那1次缓存是要被重新计算的用缓存才去算缓存 其实删除缓存而不是更新缓存就是一个lazy计算的思想不要每次都重新做复杂的计算不管它会不会用到而是让它到需要被使用的时候再重新计算 mybatishibernate懒加载思想 查询一个部门部门带了一个员工的list没有必要说每次查询部门都里面的1000个员工的数据也同时查出来啊 80%的情况查这个部门就只是要访问这个部门的信息就可以了 先查部门同时要访问里面的员工那么这个时候只有在你要访问里面的员工的时候才会去数据库里面查询1000个员工    高并发场景下的缓存数据库双写不一致问题分析与解决方案设计   马上开始去开发业务系统 从哪一步开始做从比较简单的那一块开始做实时性要求比较高的那块数据的缓存去做 实时性比较高的数据缓存选择的就是库存的服务 库存可能会修改每次修改都要去更新这个缓存数据; 每次库存的数据在缓存中一旦过期或者是被清理掉了前端的nginx服务都会发送请求给库存服务去获取相应的数据 库存这一块写数据库的时候直接更新redis缓存 实际上没有这么的简单这里其实就涉及到了一个问题数据库与缓存双写数据不一致的问题 围绕和结合实时性较高的库存服务把数据库与缓存双写不一致问题以及其解决方案给大家讲解一下 数据库与缓存双写不一致很常见的问题大型的缓存架构中第一个解决方案 大型的缓存架构全部讲解完了以后整套架构是非常复杂架构可以应对各种各样奇葩和极端的情况   1、最初级的缓存不一致问题以及解决方案 问题先修改数据库再删除缓存如果删除缓存失败了那么会导致数据库中是新数据缓存中是旧数据数据出现不一致 解决思路 先删除缓存再修改数据库如果删除缓存成功了如果修改数据库失败了那么数据库中是旧数据缓存中是空的那么数据不会不一致 因为读的时候缓存没有则读数据库中旧数据然后更新到缓存中   2、比较复杂的数据不一致问题分析 数据发生了变更先删除了缓存然后要去修改数据库此时还没修改 一个请求过来去读缓存发现缓存空了去查询数据库查到了修改前的旧数据放到了缓存中 数据变更的程序完成了数据库的修改 完了数据库和缓存中的数据不一样了。。。。   3、为什么上亿流量高并发场景下缓存会出现这个问题 只有在对一个数据在并发的进行读写的时候才可能会出现这种问题 其实如果说你的并发量很低的话特别是读并发很低每天访问量就1万次那么很少的情况下会出现刚才描述的那种不一致的场景 但是问题是如果每天的是上亿的流量每秒并发读是几万每秒只要有数据更新的请求就可能会出现上述的数据库缓存不一致的情况 高并发了以后问题是很多的 4、数据库与缓存更新与读取操作进行异步串行化 更新数据的时候根据数据的唯一标识将操作路由之后发送到一个jvm内部的队列中 读取数据的时候如果发现数据不在缓存中那么将重新读取数据更新缓存的操作根据唯一标识路由之后也发送同一个jvm内部的队列中 一个队列对应一个工作线程 每个工作线程串行拿到对应的操作然后一条一条的执行 这样的话一个数据变更的操作先执行删除缓存然后再去更新数据库但是还没完成更新 此时如果一个读请求过来读到了空的缓存那么可以先将缓存更新的请求发送到队列中此时会在队列中积压然后同步等待缓存更新完成 这里有一个优化点一个队列中其实多个更新缓存请求串在一起是没意义的因此可以做过滤如果发现队列中已经有一个更新缓存的请求了那么就不用再放个更新请求操作进去了直接等待前面的更新操作请求完成即可 待那个队列对应的工作线程完成了上一个操作的数据库的修改之后才会去执行下一个操作也就是缓存更新的操作此时会从数据库中读取最新的值然后写入缓存中 如果请求还在等待时间范围内不断轮询发现可以取到值了那么就直接返回; 如果请求等待的时间超过一定时长那么这一次直接从数据库中读取当前的旧值 5、高并发的场景下该解决方案要注意的问题 1读请求长时阻塞 由于读请求进行了非常轻度的异步化所以一定要注意读超时的问题每个读请求必须在超时时间范围内返回 该解决方案最大的风险点在于说可能数据更新很频繁导致队列中积压了大量更新操作在里面然后读请求会发生大量的超时最后导致大量的请求直接走数据库 务必通过一些模拟真实的测试看看更新数据的频繁是怎样的 另外一点因为一个队列中可能会积压针对多个数据项的更新操作因此需要根据自己的业务情况进行测试可能需要部署多个服务每个服务分摊一些数据的更新操作 如果一个内存队列里居然会挤压100个商品的库存修改操作每隔库存修改操作要耗费10ms区完成那么最后一个商品的读请求可能等待10 * 100 1000ms 1s后才能得到数据 这个时候就导致读请求的长时阻塞 一定要做根据实际业务系统的运行情况去进行一些压力测试和模拟线上环境去看看最繁忙的时候内存队列可能会挤压多少更新操作可能会导致最后一个更新操作对应的读请求会hang多少时间如果读请求在200ms返回如果你计算过后哪怕是最繁忙的时候积压10个更新操作最多等待200ms那还可以的 如果一个内存队列可能积压的更新操作特别多那么你就要加机器让每个机器上部署的服务实例处理更少的数据那么每个内存队列中积压的更新操作就会越少 其实根据之前的项目经验一般来说数据的写频率是很低的因此实际上正常来说在队列中积压的更新操作应该是很少的 针对读高并发读缓存架构的项目一般写请求相对读来说是非常非常少的每秒的QPS能到几百就不错了 一秒500的写操作5份每200ms就100个写操作 单机器20个内存队列每个内存队列可能就积压5个写操作每个写操作性能测试后一般在20ms左右就完成 那么针对每个内存队列中的数据的读请求也就最多hang一会儿200ms以内肯定能返回了 写QPS扩大10倍但是经过刚才的测算就知道单机支撑写QPS几百没问题那么就扩容机器扩容10倍的机器10台机器每个机器20个队列200个队列 大部分的情况下应该是这样的大量的读请求过来都是直接走缓存取到数据的 少量情况下可能遇到读跟数据更新冲突的情况如上所述那么此时更新操作如果先入队列之后可能会瞬间来了对这个数据大量的读请求但是因为做了去重的优化所以也就一个更新缓存的操作跟在它后面 等数据更新完了读请求触发的缓存更新操作也完成然后临时等待的读请求全部可以读到缓存中的数据 2读请求并发量过高 这里还必须做好压力测试确保恰巧碰上上述情况的时候还有一个风险就是突然间大量读请求会在几十毫秒的延时hang在服务上看服务能不能抗的住需要多少机器才能抗住最大的极限情况的峰值 但是因为并不是所有的数据都在同一时间更新缓存也不会同一时间失效所以每次可能也就是少数数据的缓存失效了然后那些数据对应的读请求过来并发量应该也不会特别大 按1:99的比例计算读和写的请求每秒5万的读QPS可能只有500次更新操作 如果一秒有500的写QPS那么要测算好可能写操作影响的数据有500条这500条数据在缓存中失效后可能导致多少读请求发送读请求到库存服务来要求更新缓存 一般来说1:11:21:3每秒钟有1000个读请求会hang在库存服务上每个读请求最多hang多少时间200ms就会返回 在同一时间最多hang住的可能也就是单机200个读请求同时hang住 单机hang200个读请求还是ok的 1:20每秒更新500条数据这500秒数据对应的读请求会有20 * 500 1万 1万个读请求全部hang在库存服务上就死定了 3多服务实例部署的请求路由 可能这个服务部署了多个实例那么必须保证说执行数据更新操作以及执行缓存更新操作的请求都通过nginx服务器路由到相同的服务实例上 4热点商品的路由问题导致请求的倾斜 万一某个商品的读写请求特别高全部打到相同的机器的相同的队列里面去了可能造成某台机器的压力过大 就是说因为只有在商品数据更新的时候才会清空缓存然后才会导致读写并发所以更新频率不是太高的话这个问题的影响并不是特别大 但是的确可能某些机器的负载会高一些。 复杂的数据库缓存双写一致保障方案        读写并发的时候复杂的数据库缓存双写不一致的场景    机器级别的请求路由问题    转载于:https://www.cnblogs.com/daiwei1981/p/9412871.html
http://www.huolong8.cn/news/145985/

相关文章:

  • 惠州市跨境电子商务网站开发中国建筑招聘信息
  • 自动化 东莞网站建设wordpress对比
  • 做360全景的网站wordpress optimize
  • 网站建设费可以抵扣进项税吗企业网站开发汇报
  • 米拓建站下载如何开公司做网站
  • 搭建网站的步骤优化大师的三大功能
  • 在线做印章网站wordpress get_the_date
  • 网站运营编辑做什么的龙岗坑梓网站建设
  • 无锡优化网站珠海网站排名提升
  • 网站不用模板如何更新文章长沙企业建站系统
  • 网站建设的目的包含哪些方面网站建设公司组织架构
  • 福州网站建设推广平台基于漏斗模型网站关键路径分析
  • 微网站开发外包门户网站建设好如何维护
  • 手车做网课网站基本网站建设技术
  • 锦州做网站多少钱云南建网科技有限公司
  • 网站建设挂什么费用上行30m可以做网站吗
  • 深圳做自适应网站物联网平台源码
  • 花店网站建设论文广告设计公司工作规范流程
  • 专业型企业网站有哪些郑州国际装备制造业会展网站的建设
  • 如何做婚恋网站资料网站怎么做
  • 织梦网站视频asp做静态网站
  • 数字广东网络建设有限公司电话网站推广优化的方法
  • 视频网站如何优化nike官方网站定制
  • 网页与网站的区别深圳营销型网站建设公司
  • 如何做网站宣传自己天安保险公司官网
  • 研磨材料 东莞网站建设建站程序的价钱
  • 中英文双语网站怎么做教您如何申请企业邮箱
  • 如何制作自己的网站包就业的培训学校
  • 网站代码502济南模板网站设计
  • 济宁百度网站建设有什么网站可以在线做试题