熟悉 AWS 上的系統架構,有設計系統的 CI / CD 經驗,亦有開發聊天機器人的經驗。
開發穩定高流量的系統經驗︰
「紙言」是我在 2013 開發的產品,經過數年時間後,使用人數漸漸增加,現在平均每秒處理約 30 個 HTTP Requests,但系統依舊穩定高效。
「紙言」使用了 AWS + CloudFlare 去解決了高流量和安全性的問題。當中在 AWS 使用了這些服務︰ ECS、ECR、ALB、RDS、CloudFront、ElastiCache、Spot Fleet、 ACM 和 IAM。
所有程式都會在部署前轉成 Docker 容器,方便去部署到 ECS 中,當需要部署時,會傳送到 ECR 上,再經由 ECS Task 去部署新版本,另外 ALB 會自動進行 Health Check,當新版本有問題時不會將流量指向新版本,減少有問題的時間。
而 ECS 的底層服務器是使用 Spot Fleet 去建立的,這個可以為我節省一大筆服務器費用,因為 Spot Fleet 的價錢大約是平時服務器的 10% - 20% 左右,另外 Spot Fleet 支援彈性增減服務器 ,在流量增加時可以自動建立更多服務器來應付需求,當流量減少會自動還原原先狀態。
另外最重要的是使用 ElastiCache 和 CloudFront 去減少 RDS 的負擔,CloudFront 可以選擇性將頁面暫存在 CloudFront 服務器上,HTTP Request 就可以不用 ECS 服務去處理,又可以加快反應時間,而 ElastiCache 是處理一些 CloudFront 不能暫存的頁面,這些大多是即時性較高的頁面,如果有暫存在 ElastiCache 上,就可以不用 RDS 去處理了。
另外 CloudFlare 的作用是提供 DDoS 保護性外,亦可以提供一個暫存的地方,將所有永久性暫存都放在 CloudFlare 上,CloudFlare 和 CloudFront 最大分別是不能使用 Cookie 或 HTTP Header 去區分不同的暫存,CloudFront 支持更多的暫存條件,就算是為每個人儲存獨立的暫存也可以,彈性較高,當然價錢也比較高,所以再使用 CloudFlare 去減低 CloudFront 的使用量。
ACM 是用來生成 SSL Cert 以提供一個全程使用 HTTPS 加密的環境,而且 ACM 是免費的,又可以提高安全性,當然會使用。
大型系統遷移經驗︰
曾經替香港理工大學由傳統安裝式的電腦系統重寫一套全新基於網絡和瀏覽器的系統, 我主要負責設計該系統的底層框架、資料遷移、全新的資料審查流程和資料控制權限等等核心程序,令開發人員減少出錯機會並提高開發效率。
這個任務最困難的地方是要同時使用舊系統,亦要使用部份新系統。要確保兩邊的系統資料同步不出錯,最終都非常順利地由舊系統遷移到新系統。
離線式的瀏覽器系統︰
曾經替 HKCC 學院由零開始設計一個招生系統,該系統主要是解決太多人排隊提交實體申請表格的問題,另一方面如果不使用離線式的瀏覽器系統,服務器會抵受不住太多同時在線人數而影響到其他運行中的收生程序,所以我提出了離線式的瀏覽器系統這個方案。
系統的頁面全部都是靜態的 HTML 頁面,以減底服務器的負擔,另外開發一個程式從資料庫取出資料放到 JavaScript 裡,再生成靜態的 HTML 頁面,當資料有更新時只需將頁面重新放上服務器就可以了。
系統主要兩部份分別是 React 和 QR Code,React 負責動態生成報名表格表格並使用 JavaScript 處理一些資料驗證,提交表格時不是直接傳送到服務器,因為職員要先審核所有資料,才可以將該筆資料儲存到資料庫中,所以系統會生成一個 QR Code ,經過 QR Code 掃描器傳送資料到職員的電腦,當所有資料正確無誤後再將資料經由職員的電腦儲存到資料庫中。
這樣的好處是沒有任何公開 API 給申請者直接使用,減低被攻擊的風險,所有資料必定經過職員驗證才會儲存到資料庫中,防止機器人胡亂生成數據。
這個系統幫助 HKCC 減低手寫表格的出錯率,也不用人手將實體申請表格的資料一個一個輸入到系統中,加快整個收生程序,減少出錯機會,也滿足他們要審核所有資料的程序,服務器也幾乎沒有增加到任何負擔,所以這個方案是解決了他們很多問題。