一次抢口罩的负载优化

前言由于这次令人讨厌的疫情,导致口罩一罩难求,虽然各大厂商都在努力生产,但是毕竟僧多粥少,也幸好疫情快要结束了,也希望早点结束。因为口罩实在难以购买,所以很多地方的口罩采用统一调配,但是如何把口罩发放到大众手里,也成为了一个问题,所以预约购买成了最为安全的购买方式,购买后可以邮寄到家或者根据选择的时间段到店自提,但是由于购买人数过多,也带来了一个新的问题,服务器并发的问题,至少我在二月份参与了很多预约购买口罩的平台,没有一个平台不崩溃的,大多都是10几分钟了,就没有正常请求过服务器一次,不过幸好现在大部分平台已经调整为抽签的形式,而不是之前的先到先得规则,这样相对于先到先得更加公平,不受限于网络和运气,因为我们公司也做了相应的预约平台,不过由于客户要求先到先得原则,所以了本文。不过由于使用我们平台的用户并没有一线城市那么夸张,动不动几百万人同时抢购,而且我们平台的服务器也没有那么好的配置,所以本文的方式只是在几万人同时抢购的情况下测试过,当然其中思路还是可以参考的一下的,毕竟没有万金油,负载优化肯定是要根据实际情况来处理的 要求首先第一个要求是不能超发,第二个要求是尽可能提交成功的失败率不会太高,也就是说不要100人都提交成功了,但是最后只有一个人抢到了口罩,第三就是要求服务器不要崩溃,尽可能的不要出现请求服务器失败的情况。 首先一个要求解决方案:因为考虑到大并发的情况的,而且还做了负载均衡,所以要么采用分布式锁或者队列, 分布式锁分布式锁的优点是可以实时知道抢购结果,坏处就是性能低下,处理不好容易造成服务器压力过大。 分布式锁可以采用zookeeper,当然还有别的分布式中间件或者框架,千万别直接用语言自带的锁,做了负载均衡后,…

全面了解Nginx主要应用场景

前言本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得。所以还请见谅,同时欢迎留言交流 Nginx能做什么1.反向代理2.负载均衡3.HTTP服务器(包含动静分离)4.正向代理以上就是我了解到的Nginx在不依赖第三方模块能处理的事情,下面详细说明每种功能怎么做 反向代理反向代理应该是Nginx做的最多的一件事了,什么是反向代理呢,以下是百度百科的说法:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已。 下面贴上一段简单的实现反向代理的代码 server { listen 80; server_name localhost; client_max_body_size 1024M; location / { proxy_pass http://localhost:8080; proxy_set_header…

Nginx 与 tomcat 反向代理配置

由于本人资金有限,所以经常需要一个服务器中同时运行多个网址,但是问题来了,域名解析是只能80端口进入的,不支持其他端口,而且也不能带后缀,所以如何让多个网址都能进行域名解析成了一个问题,后面百度发现有反向代理这个功能,但是一般Nginx服务器的方向代理教程都是教你如何指向一个虚拟目录的,这个对于用tomcat的人来说我不知道到底能不能行,反正我是没有成功配置过,不过后来发现也可以直接指向网路地址,废话少说,上配置 首先说明,本配置基于Nginx 1.8.0,其他版本的情况不清楚,需要自己测试 首先下载Nginx 1.8.0,Nginx 下载地址下载好后解压(windows上面是直接解压,其他系统的不清楚,不过估计也差不多),然后进入目录conf,打开nginx.conf,进行编辑。 现在的情况是tomcat占用8080端口,web程序路径为localhost:8080/blog,而我们的目标就是要利用Nginx的反向代理,使用localhost直接访问到localhost:8080/blog,当然如果有域名和服务器也可以用你的域名和服务器测试。 主要配置如下(nginx.conf) server { listen 80; server_…