黄冈网站推广平台,网站的开发语言有哪些,做网站沈阳,西安建设厅网站首页实战篇-08.优惠券秒杀-集群下的线程并发安全问题_哔哩哔哩_bilibili 为了应对高并发#xff0c;需要把项目部署到多个机器构成集群#xff0c;所以需要配置nginx。 1.如何模拟集群
通过idea的ctrl d修改配置#xff0c;实现多个tomcat运行模拟集群 然后在nginx上配置节点需要把项目部署到多个机器构成集群所以需要配置nginx。 1.如何模拟集群
通过idea的ctrl d修改配置实现多个tomcat运行模拟集群 然后在nginx上配置节点8080/api 会代理到backend然后backend配置了各个节点的信息upstream
实现轮询节点达到负载均衡。 2.集群引出了新的并发问题
前文在单节点情况下实现了并发安全但是如果一个用户发两个秒杀请求分别被nginx分配到两个节点上那么你一个节点上的用户锁以用户id作为监视器不能在不同的节点上生效这样还是锁不住同一用户的多个秒杀行为然后还是不能保证一人一单。所以就需要分布式锁。 原因 前文的intern函数为什么呢即使你new了只要内容相同就会返回相同的地址呢因为他会从字符串常量池里去找这个字符串的地址无论你来几次返回的都是常量池里那个字符串的地址所以是一样的。不管你哪个线程都是在一个tomcat上运行的只有一个jvm就只有一个常量池。 而集群部署的时候不同服务器有自己的tomcat那么每个服务器都有独立的jvm所以常量池也不一样。所以无法保证intern返回值相同也就无法保证两个服务器上的锁监视器是同一个也就锁不住同一个用户。 只能保证一个jvm内部锁住同一个用户不能保证所有的jvm都锁住一个用户。