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

网站怎么上传代码吗西安网页制作与设计

网站怎么上传代码吗,西安网页制作与设计,集团网站建设特点,做电影字幕的网站故事 对于小猫来讲#xff0c;最近的一段日子是不好过的#xff0c;纵使听着再有节拍的音乐#xff0c;也换不起他对生活的热情。由于上一次“幂等事件”躺枪#xff0c;他已经有几天没有休息好了。他感觉人生到了低谷。 当接手这个商城项目之后#xff0c;他感觉他一直没… 故事 对于小猫来讲最近的一段日子是不好过的纵使听着再有节拍的音乐也换不起他对生活的热情。由于上一次“幂等事件”躺枪他已经有几天没有休息好了。他感觉人生到了低谷。 当接手这个商城项目之后他感觉他一直没有好过。他的内心彷徨在工位上边写着事故报告边嘀咕着“今年到底是犯了啥冲...为什么...” 然而屋漏又遭连夜雨船破偏遇当头风好像坏事儿又找上了他。 坐他旁边的哥们在一旁抱怨“啥情况我就想给公司助助力买点咱自家公司的产品咋商详页咋点来点去进不了你看看你的呢”。 “你自己手机不行了吧你瞧你那老破烂也该换了iphone15 pmax搞起...” 旁边的老六开涮道。 然而却触动了小猫的神经他赶紧打开app发现自己的也进不去了。他赶紧打开Grafana脸色苍白口干舌燥....数据库连接全部打满。 不到一会组长的电话也收到了客服反馈的客诉组长向小猫投来质疑的目光。 小猫无辜而又无奈“我真的没有动过代码......”。 经过一轮彻彻底底地摸排事情的原因也终于水落石出。 大概如下图这么回事儿 流程 上次A公司对接商城服务之后开始在他们商城平台推拼团售卖活动活动中的几个商品的缓存被删除之后没有恢复原因是因为第三方对接的API商品大量推送队列有堆积导致redis缓存并没有及时更新。大批量的用户在进行购买活动商品的时候请求全部打到了DB上。 反正也不晓得是哪个挨千刀的设计的技术方案缓存到redis中的时候用的居然是异步消息队列。商品发布量小访问量小的时候可能没有什么问题。 但是偏偏各种巧合发生在了一起就产生了这样一个事故这可能就是所谓的墨菲定律吧。 小猫已经走到了绝望的边缘......下次就不说小猫踩坑了让他缓几天哈哈 聊聊缓存击穿 在此我们对小猫表示同情但是这是一个很好的例子还是和大家一起聊聊缓存击穿雪崩的话题。 咱们就从以下几个方面聊聊缓存雪崩击穿的问题。 概览图 在上图中可以看见我们会对布隆过滤器做一个重点的介绍因为这个也是比较常用的方式缓存击穿的方式。 什么是缓存击穿是什么原因导致的 从上面小猫的案例中其实就已经很明了了所谓缓存击穿就是原本由于缓存组件抗住的流量结果全部打到了数据库层给数据库带来了巨大的压力甚至严重的情况下直接把数据库干跨。导致缓存失效的原因也是很显然易见的由于缓存在一个无法预期的一个场景下缓存失效了。 在小猫的案例中可以看到是热卖的商品在redis中Key值全部同时失效导致的。当然这是一种常见的技术方案有问题导致的。那么还有一种导致缓存失效的原因就是缓存中间件直接宕机。这种情况是运维层面需要解决的可能要求对缓存中间件做好高可用如何做高可用我们在此不做深究。 下面是咱们的缓存用法大家可以看一下下面的流程。 缓存流程 从上述的流程图中我们可以看到当有请求过来的时候首先会尝试从缓存中去读取当缓存中没有读到的时候这个时候咱们就会回源到数据库再次查找当查到相关商品数据之后返回给客户端之后并将该数据继续缓存到数据库中。 接下来咱们来看一下发生雪崩之后的解决方案。 无效key值处理 这种情况其实很简单了既然由于没有在缓存数据库中找到数据那么咱们也不应该直接将redis中那些Key值直接删除这样找不到key的话肯定还是会打到数据库所以我们只要避免请求去查数据库就可以了。所以我们就把无效的Key也保存到redis中即可。这种值的话我们都保存成“null”。这样的话redis中的key一定就是全量的了客户端查询数据的时候顶多也就是查不到。 这种方案可能会影响到用户体验我们对这个方案其实也可以做一下改造就是利用异步定时任务重新检测缓存中为null的数据异步去刷新数据到redis中。但是还是没有从根本解决客户体验的问题只是尽量降低客户的不满意度。大概流程如下。 无效key定时任务 这种方案的缺点就是存在用户体验问题。 另外的这种方案还有一个缺点大家思考一下我们将失效的key以null值的形式缓存到redis中但是如果有个恶意攻击的行为专门挑一些随机的key去攻击我们的接口的时候请求是不是还是最终会打到数据库所以这种方案不是万无一失的也不是最好的提到的布隆过滤器则不会存在这样的问题后面我们再看。 互斥锁方案 我们看到导致数据库雪崩是由于请求太大穿透到数据库那么我们可以在访问数据库的时候动动脑筋。我们可以在访问数据这个环节中加锁虽然影响性能但是对于系统来说是安全的。这种方案和无效key方案进行组合之后其实可以用来作为兜底方案搭配使用其实效果也不错的。我们来看下图。 缓存回源加锁 这种情况就是在上面的标准缓存流程中回溯数据库的地方利用redis的特性 setNx加了一把互斥锁这样的话咱们能够尽量保证少量的请求打到数据库中。 大白话可以这么理解张三李四去同时去访问同一个商品的时候他们两只有一个能成功成功拒绝了并发时候针对同一个热门商品的访问。 热点数据限流访问 关于这个我想其实可以不做太多展开思路很简单既然是由于请求量太大导致不走缓存走到了DB从而将DB打垮那么咱们就限流量呗。请求量少了那么自然不会打垮数据库了。关于限流的一些措施以及算法所以在此也不做赘述。大家有兴趣的话可以访问 布隆过滤器 如果用上布隆过滤器的话那么我们方案如下调整。 系统在初始化的时候将key初始化到布隆过滤器中。当查询的时候把布隆过滤器放到查询redis缓存之前如果发现存在Key在布隆过滤器中那么就继续后续的流程如果不存在则根本就连摸缓存的机会都没有更别提数据库了这样就成功避免了恶意采用无用的key值进行攻击。 什么是布隆过滤器 关于布隆过滤器在此也展开说一下因为觉得这个可能是这些防雪崩方案中最好的一种方案。那么咱们来看一下什么是布隆过滤器。 这种过滤器是一个叫做Bloom的哥们于1970年提出的咱们可以把它看做由二进制向量或者说位数组和一系列随机映射函数哈希函数两部分组成的数据结构。位数组即bit数组bit是计算机中最小的单位也就是我们常说的计算机中的0和1这种就是用一个位来表示的。 Bit数组大概长的就是如下这样的。 bit数组 位数组中的每个元素都只占用 1 bit , 并且每个元素只能是0 或 1 。这样申请一个 100w 个元素的位数组只占用 1000000Bit / 8 125000 Byte 125000 / 10214 kb ≈ 122kb 的空间。所以占用空间极小。 布隆过滤器原理 其基本原理是利用多个哈希函数将一个元素映射成多个位然后将这些位设置为 1。当查询一个元素时如果这些位都被设置为 1则认为元素可能存在于集合中否则肯定不存在。所以布隆过滤器可以准确的判断一个元素是否一定不存在但是因为哈希冲突的存在所以他没办法判断一个元素一定存在。只能判断可能存在。 如下图 添加元素的流程。 针对相同的key通过不同的hash计算算出不同的值。 分别更新数组中的数据值为1。 查询元素的流程。例如上图当查询一个不存在的Key3的时候调用hash1以及hash2函数恰好命中了之前key1和key2的hash值此处我们就有可能误判觉得Key3值也是存在的。这样的话也会打到后续流程中去做查询的业务动作。 手撸一个简单的java布隆过滤器 丐版的布隆过滤器的实现方式其实还是比较容易的。如下源码 /*** author * date 2024/1/18 23:30*/ public class BloomFilter {/*** 初始化大小*/private static final int DEFAULT_SIZE  2  24;/*** 位数组。数组中到元素只能是 0 和 1*/private BitSet bits  new BitSet(DEFAULT_SIZE);/*** 计算hash值* param key* return*/static final int hash(Object key) {int h;return (key  null) ? 0 : Math.abs((h  key.hashCode()) ^ (h  16));}/*** 添加元素到位数组*/public void add(Object value) {bits.set(hash(value), true);}/*** 判断指定元素是否存在于位数组*/public boolean contains(Object value) {return bits.get(hash(value));} }写个main函数测试一下 /*** author * date 2024/1/18 23:33*/ public class Test {public static void main(String[] args) {String value1  https://blog.ktdaddy.com/;String value2  kdaddy2;BloomFilter filter  new BloomFilter();System.out.println(filter.contains(value1));System.out.println(filter.contains(value2));filter.add(value1);filter.add(value2);System.out.println(filter.contains(value1));System.out.println(filter.contains(value2));} }结果输出也很简单 falsefalsetruetrue其他第三方布隆过滤器 当然Java中还可以使用第三方库来实现布隆过滤器常见的有Google Guava库和Apache Commons库以及Redis。关于这两种过滤器的用法在此就不做赘述了篇幅过长大家可能都会丧失读下去的欲望了所以就到此打住感兴趣的小伙伴可以自行去找一下相关的资料然后写个demo玩玩。 写在最后 上述基于小猫的痛苦之上给大家分享了缓存击穿的一系列的解决方案如果大家还有补充的话也欢迎大家能够在评论区留言。有个问题想问一下大家当你新接手一个你不熟悉的项目的时候你做的第一件事情是什么 先说一下自己吧我一般会将现有的业务模型梳理一下即相关的表结构然后将核心的流程画一画继而通过一些列新的迭代慢慢熟悉整个系统当然在此期间其实也会遇到这样的各种各样的坑无论是技术方案的坑还是说代码的坑。其实还是比较喜欢“早发现早治疗”这种方式发现问题尽早解决掉个人还是比较抵触现在网上比较流行的说法“防御式编程”。因为如果有问题等到真的爆发的时候有可能就是灾难性的。
http://www.zqtcl.cn/news/71214/

相关文章:

  • 个人作品网站链接怎么做房地产信息网新楼盘
  • 专业网站美工凡客诚品正品男
  • 体育彩票网站开发方案asp.net怎么做网站
  • 天津网站推广¥做下拉去118cr爱采购下载app
  • 网站备案主体是什么意思建设网站工作室的问题疑问
  • 用别人代码搭建网站微信公众号开通商城
  • 建设网站前的需求分析wordpress 用户管理
  • 网站建设氺首选金手指14前端网站开发框架
  • 网页设计与网站建设在线考试网站设计知识准备
  • 自己如何做公司网站视频wordpress的不好
  • 网站建立失败的原因是东莞企石网站设计
  • 宽屏网站背景云南seo
  • 如何制作手机网站线上营销工具
  • wordpress 太慢了东莞网站优化推荐
  • 当雄网站建设wordpress 如何设置首页
  • 网站建设的一般步骤包含哪些建设银行官网官方网站
  • 北京市住房与建设厅官方网站深圳软件系统开发公司
  • 青岛网站建设网站制作怎么搭建wap网站
  • 机关网络 网站 建设免费货源网站免费版权
  • 无锡大型网站建设使用vue做商城网站项目难点
  • 网站的登录弹窗怎么做手机端wordpress模板
  • 聊城做网站价位切实加强门户网站建设
  • 小榄做网站企业做婚恋网站的开发
  • 哪些网站可以做推广上海社保网站哪里做转入
  • 郑州网站建设庄园国内比较大的源码网站
  • 算命先生的网站怎么做如何购买大量客户电话号码
  • 充值网站源码phpwordpress热门分类
  • 自助建设影视网站wordpress 发帖
  • 本地资讯网站做的最好的app开发策划书范文
  • 接广告的网站上海注册公司电话咨询