RedSo的新產品-NoQ

Louis Li
Louis Li
Mar 13, 2020 · 8 min read
Image for post
Image for post

我們最近推出了一個叫NoQ (https://noq.hk) 的新產品,在hardsell之前,請容我講個小故事,一切要追溯到除夕大抽獎。

上年底旅發局搞的除夕大抽獎,成為了IT人茶餘飯後的話題。其實早在網站未上線之時已有人預言系統一定會出事。當時我不置可否,因為在此之前,李嘉誠基金會就和Google Cloud做了一個完美的案例,在短時間内用雲端技術將派錢也解決得妥妥當當,理論上大抽獎也算是普通的eForm,不會複雜太多。

Image for post
Image for post
圖片來自:fortuneinsight.com

系統最初採用SMS認證碼

不過當OTP用在大流量系統時,事情就沒有這樣簡單了。記得幾年前大家都搶購iPhone的時候,Apple就推出了iReserve系統,消費者需要獲得SMS OTP才可以進入系統選購。由於沒有公開數據,估計以當時短炒iPhone的豐厚回報,大膽估計參與人數不會少於買演唱會門票,姑且毫無根據地假設參與人數為20萬人。還記得當時很多人都投訴因為遲了收到SMS而買不到iPhone嗎?顯然SMS系統的throughput是有限的,20萬SMS並不是同一時間一起送出,就像排隊一樣,只有排得較前的人會快點收到SMS。

稍為看了一下其中一個流行的SMS gateway-accessyou,其服務列表中列明最快的delivery speed為20K-200K SMS/hour。

Image for post
Image for post
Source: http://www.accessyou.com/smsapi.pdf

所以假如蘋果真的有20萬人在買,要送完所有SMS最快要花上一小時,而worst case是整整十小時。

回到除夕大抽獎,對象是(全港在港市民+在港遊客)。根據旅發局數據:https://partnernet.hktb.com/filemanager/intranet/pm/VisitorArrivalStatistics/ViS_Stat_E/VisE_2019/Tourism%20Statistics%2011%202019.pdf,2019年11月訪港人次為200多萬,本港居民按700萬計,這個大抽獎要應付的SMS量起碼也要百萬級計。就算一小時派送20萬SMS,一百萬個已經要花五個小時,除非登記時間提前幾天,否則要在抽獎當日收到SMS根本沒有可能。

系統最終改以email作為驗證碼

事實上Email-OTP比SMS-OTP還更難控制。Email服務由一個server送出,再由另一個server接收,這個連接牽涉兩個server的溝通問題。由於日常Email Spam問題非常嚴重,一般Email server在接收到郵件後都會有機制去擋格高風險的郵件。如果Email由非常陌生、甚至新註冊的Domain送出,基本上沒有機會可以送達用戶的戶口。在大抽獎時,服務採用了sendgrid派送Email,sendgrid本身是一個專門派送Email的服務,理論上sendgrid已經幫忙處理好上述的風險問題。

但sendgrid服務同樣有rate limit。 以全港大抽獎的規模來說,肯定可以輕易突破這個上限。以每分鐘10,000 request計算,send完200多萬個mail,最少要花上 2,000,000/10,000/60 ~= 3.3小時。不過sendgrid作為一個Email服務專家,資料到達sendgrid後,系統還需要再針對不同的收件server進行排程,及分派到不同IP的server發出,這樣才不會令sendgrid整個domain都被其他收件server列入黑名單。就當一切順利,接下來,當Email派送到收件server,收件方還會再做Spam and Phishing掃描,國內有些server甚至會對內容進行政治審查,只有在完成這些安全檢查後,郵件才會派送到客戶郵箱。

Image for post
Image for post

如是者,如果系統要求收到Email認證碼並且在限定時間內進行登記的話,技術上根本不可行。個人經驗,我的email OTP在2020年1月1日凌晨接近3時才送達,共延誤差不多9小時。結論,這種大流量系統應該避免使用OTP。

網上排隊系統

Image for post
Image for post
source: http://www.mingpaocanada.com/TOR/htm/News/20180424/hk-mba1_r.htm

我們相信網上排隊可以有更好的解決方法,一種更有效率,更公平,無論供求方都更便利的方式。於是我們開發了NoQ。

大流量系統之難

Image for post
Image for post
https://cloud.google.com/datastore/docs/concepts/limits

在雲端技術中,就算前端可以同時顯示資料給一百萬人閱覽,在下訂單要寫入數據庫時,數據庫的瓶頸依然存在。以Google Cloud的Datastore為例,rate limit是一秒一個寫入。在面對百萬級人流,如果沒有適當的處理方法隨時需要過百小時。將數據庫做Sharding(分片化)處理是其中一個有效的方式,但遇上幾萬人同時搶購同一產品,單一產品的庫存更新還是非常難做到的。所以NoQ乾脆就連數據庫都不用,那麼瓶頸也就消失了。

NoQ實戰

Image for post
Image for post
source: 東方日報 https://orientaldaily.on.cc/cnt/sport/20120206/00286_002.html

NoQ全名Not Only Queueing,基本上不是排隊系統,理解為No Queue亦不為過。如果說坊間的系統像鐵馬,NoQ就像是賽跑的終點線-同一時間會有很多跑手衝線,但每位跑手都有獨立的衝線時間,就算真的相差一個半個馬鼻,仍然可以分出先後,無須等待前面的人衝線才讓下一位跑手衝線。為確保數據安全性,NoQ自然配備HTTPS基本功能,確保客戶端與伺服器之間資訊的保密性和完整性。在此之上,所有數據在傳輸之前都會使用RSA和AES加密,確保數據就算中途不幸被截取,亦不會洩漏半點。

NoQ雖然面世沒多久,但已經做出了少許成績。我們利用NoQ配合Boutir掌舖,投入了人流最多的口罩搶購事業。幾萬個買口罩的名額,引來了10多萬人流,產生了幾百萬pageview,NoQ只用了短短幾十秒就派發完成,過程非常順利,獲得了不少客戶的正評。防止機械人、重覆拿籌等問題,我們也當是理所當然的加入了就不累贅了。本地知名搶飛專業 KKFly 亦實測過就算使用程式方式都不能搶到名額。

Image for post
Image for post

RedSo作為Google Cloud的Premium Partner,NoQ使用了Google Cloud最尖端的Serverless技術,穩定性高,在我們內部測試中處理百萬級人流完全沒有問題。NoQ的應用場景很多,包括各式非常大流量的應用,例如投票、限時閃購、各種門票、比賽登記,當然亦包括大抽獎了。如果你的服務需要應付大流量人流,NoQ一定能幫你妥善解決。

💬 Facebook🌐 官方網站📮電郵

RedSo

Technical Posts from our soldiers

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store