java 板


LINE

https://booking.health.gov.tw/Home/TakeNum 网路上看到台北市疫喵接种预约系统顺利运行,也去看了一下, 试用了一下整个过程是: 1.首页(同意後选莫德纳) ->2.选院所(3个同意再Load时段Json) ->3.填资料送出(未真的送出) 发觉这系统没上云端,後台居然还是IIS 10,也没有提升到HTTP/2, dig一下发现也没有用DNS做RoundRobin, 查了一下北市75岁以上统计人口约19万多, 表示单一IP可能要同时承受上万人的殴打(×)点击(○), 北市府的资讯处真的厉害的打击手。 想说如果是一般规模不大的公司要如何解决,盘点一下设计思路, 1.不能时间一到就让所有人一拥而上。 2.毋须登录。 3.写入永远比读取慢很多,写入资料库则是更慢,档案则好些。 4.太多人选择同一时段造成的超额处理。 我想大多数解决人多的想法,就是多架几台(load balancer)来应付就好, 频宽不是问题,电信商调整一下就好。 首先第一要务是解决"单一IP可能要同时承受上万人的点击"这件事, 当然有钱的买一台高级的负载平衡器,用硬体来解决, 规模不大的公司出不起这个钱,所以我的做法是最前线就是 一台稍微好一点的机器架上一个 Linux Virtual Server(LVS)来分散入口流量, LVS後面就接上2~3台Nginx做反向代理(装在VM上做Load balancer用), 再来就是架上多台Web Server(也是在VM上)。 大概架构如下(我会把实体机接在同一个Hub上,减少网路传输时间, 同样VM也是分散在不同的实体机): (1)×LVS(实机)→(N)×Nginx(VM)→(X×N)×Tomcat(VM) 因为上述所有的机台都是用Linux,所以自然必须重新调整内核参数, 以应付大量Request,(可以用Nginx并发优化找到一堆内核调整的文章)。 1.防止时间一到所有人一拥而上,最好的策略,就是阅读测验: 例如阅读需知,点选同意与先回答一些问题,最後再跳出视窗再确认一下, 造成每人的时间差异,分散一下开局的压力。 2.毋须登录,让Web程式变成Stateless,也就是request资料, 无论送到哪一台Tomcat都一样,万一需要用户登录,最简单的方法就是导入 redisson-tomcat,把Session资料在Tomcat间共享,或都非Tomcat系直接导入 Spring-Session,但是就是要额外多架一台redis server 或是使用Hazelcast Library。(我的建议是redis) 3.最终资料总是要写入资料库的,不管怎麽Tune,concurrent connections 最多也只是调整到1、2干个,查询(快且占大多数)+写入(慢很多), 我觉得较好的策略就是快取(读取结果)+JMS(资料库缓写入), 当用户取得资格,最好的方式就是登记资料写入redis当快取并 抛给JMS慢慢写入资料库,完成再发简讯。 4.最後要说的就是Race condition的问题,举例多个人同时看到剩一个 名额时,最简单的方式,就是开sequence,但缺点是每个院所都要开一个, 也有人用trigger避免超过,但人一多都容易引发DB overwhelming。 更好的方式是使用redis的atomic做取号,超过就叫人重选一次院所。 虽然推荐redis,只是因为网路上都说好,我实际上只用Hazelcast实战过, 这里不得说一下,Redis虽然本身虽然有Transction,但她没有ROLLBACK, 如果要达成XA,必须引入redisson做为redis的Client。 另外还有一些改善点,Nginx支援HTTP/2与Etag, 常用的css,js,与图片,连到首页时就用同一个连线送出,并且就加ETag, 下次就客户端就无须重新载入这些Resources。 北市预约系统的jquery-3.3.1.min.js首页出来时未加ETag, 选医疗院所第2次才有ETag 然後重选医疗院所时ETag没有发挥效用,又再一次载入。 不知道是不是IIS的问题, --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.120.253.7 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1625110647.A.4AC.html







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP