我和几十万人一样在12:15pm按州属选项按到抓狂,KL、KL、KL……试了大约15分钟,日期选项终于慢条斯理地出现,接下来就是penuh、penuh、penuh……我生气吗?有一点,但生气的不是网站失灵。我是过气软件工程师,电脑程序中的错误叫做“臭虫”(bug),不可能完全避免。强如美国,2013年推出Obamacare时网站也瘫痪,而且长达16天。但造成这次问题的不是臭虫,而是懒虫。
平心而论,冠病疫苗特别供应委员会(JKJAV)的网站相当优秀,和其他政府部门的官网一比便知。排版大方,资讯清楚,介面方便,访客能轻易找到资料。先撇开7000万不谈,政府若不外包给私人界建立和经营,因受官僚文化所限,本身绝对没能力做出来,绝对。相信凯里应该一早就认清这点,网站是建立公众信心的门面,抗疫这种生死攸关的大事,不能让内部公务员搞砸。那么,为什么这个“优秀”的网站这次会犯众怒?
大家都知道的,太多人同时共用一个网站时,它会瘫痪。这事我有第一手经验,有店网路书店办李欣怡新书预购时瘫痪过,大将去年办《买书撑大将》时瘫痪过,我是网站瘫痪专家(呵呵,可惜不是修复专家)。这道理和交通堵塞是一样的,伺服器的频宽只有那么多,电脑能同时处理的工作也只有那么多,你在你的浏览器同时开一百个tab,就知道我的意思。为防大堵车,JKJAV网站便使用工程师在网上热议的Cloudflare,这是什么东东?
Cloudflare是其中一家最受欢迎的内容传递网络(CDN),在世界各地都有伺服器。它把JKJAV网站上的静态网页复制多份。当你到访JKJAV网站时,由最靠近你的CDN伺服器提供预存的内容给你,而不是JKJAV自己的伺服器。这就像Domino’s Pizza,如果你每次点餐都只能靠本店送餐,本店肯定来不及处理;CDN就像Domino’s Pizza的分店,每一家都能做出一样的Pizza,由最靠近你的分店送餐。JKJAV使用CDN,不管访客再多,都有一整组世界级的硬体在服务顾客,就可避免瘫痪。
JKJAV网站使用Cloudflare这做法本身没错,就算它选用免费版,技术上也没有错,因为Cloudflare免费版并未明文限制流量。但若细读条规,Cloudflare并不保证100%全天候操作,除非付费。付多少?不过每月两百美金。有7千万的预算,却不投资区区两百美金,说不过去的其实是这个。既然有7千万预算,为什么不投资在能和Cloudflare并驾齐驱的顶级硬体呢?难道人民的性命不值得投资吗?因为这就变成非常无谓的浪费。
假设你是开肉干店的,你会不会为了应付新年潮而临时开50家分店?JKJAV不是谷歌、脸书,流量不会全年走高,也不确定何时走高,若投资百万在硬体,伺服器却大部分时间在拍苍蝇,那就真是浪费纳税人的钱了。而且,不只不确定何时流量会攀升,攀升到什么程度也无法预计,可能投资百万也还不够,最终还是被骂。租用像Cloudflare这样有可扩展性的服务,需要提升时才提升,是比较精明的。无论如何,后来网站失灵,主因不在Cloudflare——我猜想在JKJAV网站工程师团队眼中,网站并没有“失灵”,他们只是“失算”。
任何网站工程必定经过测试阶段,连大将出版社这样的小网站也经过压力测试,我知道它的极限是同时应付200人造访,如果我使用Cloudflare,还可应付更多访客。但是,它却未必可应付200人同时下单。Cloudflare支援的是静态网页,内容是固定不变动的,比如About Us、Contact页,谁来看都一样。下单买东西则是另一回事,每个人的选项都不一样,Cloudflare不可能预存,必须动用我自己的伺服器资源去生成网页。我们在JKJAV登记接种疫苗,你选择日期的时候,它的伺服器必须检查有没有空缺,然后回来告诉你结果,这些工作Cloudflare帮不上忙。
JKJAV网站需要测试的,不是网站能服务多少人同时来访,而是能应付多少人同时登记。他们当然不可能找来几十万人同时测试,而得要花点钱用电脑模拟。他们有做吗?我估计会有的,因为这是基本常识,但叫他们失算的是,第一回合登记接种AZ的人数,以及后来乐龄人士的登记人数,都没有这一回合高。假设他们的压力测试预估20万人,实际上却来了百万,那也只能瘫痪了。如果是这样,好像也不该只骂JKJAV,谁叫我们前两回合不够踊跃呢?
真正叫我生气的,是没照顾好网站介面的小细节。
网站没给用户视觉反馈,比如说你按了州属选项,伺服器在背后忙着寻找相应的日期,这时候应该要显示“工作中”的图标或讯息让你知道;否则,你再按,伺服器又更忙。那些日期选项如果已满,就该显示红色,别再让我们再点选了,不然我们再按,伺服器又更忙。最后,登记成功应该马上传简讯或电邮确认,但我倒明白为什么他们没这么做,因为这会加重伺服器和网路负担,在无法预估流量的情况下,先把电脑资源集中用在接受登记,之后才一次过处理通知,可说是比较明智的设计。但,这延后处理的过程也不合格。
我至今没收到简讯通知,尽管MySejahtera中有显示接种疫苗的预约日期。若不是朋友提醒,搞不好我没注意到。MySejahtera应该要能推送通知,主动告知我登记成功,这是最基本的功能。你猜到预约日期前一天,MySejahtera会不会提醒我?这我还不知道,如果没有提醒,又会有多少人忘记赴约?这些疏漏,源于疏懒,懒虫会坏了生死大事。
回到7千万的议题。凯里很快就回应民众质问,列举预算所涵盖的后台系统,而且说明7千万是预算顶限,视进展而定,不代表政府要付出这个总数。至于数额合理与否,外人不知全套系统有多繁复,很难评断,只好先闭一只眼。况且,尽管有差错,这网站终究还是完成了主要任务,也就是为许多人民完成接种疫苗预约。
另一方面,我们也看到大家踊跃登记,这总比门可罗雀好。我们都是羊群,看到有人抢,自己也会想参与;坦白说,我是看朋友在上一回合抢, 这回合才更想抢。我相信JKJAV汲取了此次教训,下回会改进。凯里说年底可完成八成人口接种,可是,政府只能准备疫苗、架好网站,最终还是要靠你我配合,伸出手臂,卷起衣袖,才可能达标。骂归骂,下回合请你还是要去抢。
延伸阅读:周若鹏专栏《鹏程万理》其他文章
请问可以帮我早点打瘟疫苗,我有忧郁症,每天活在恐惧中。我已经申请几个月了还没轮到我,是不是因为我是中国人。我免疫力差的,我家婆八十5了,我每天接触家婆的。我已经42岁了,有忧郁症很辛苦的。可以帮我吗?谢谢