如果 2023 年我要重新寫個 online judge 的 backend 的話,應該會重新思考當年的一些 design choices…
- 用個 RabbitMQ 之類的成熟方案管理 job queue。自己兜 server 和 client 然後對接測試的效率實在太差,中間用個「可以信任它是對的」的東西搭起來能解決這個問題。
- 考慮用 Docker images 之類的方式編譯或執行測試程式。之前沒用是因為信任自己的沙盒,不想重複的工做兩次,但發現自己處理環境的設定和復原實在頗麻煩。
- 用一套 Python 的 async library (像是 trio)。在 Python 裡手寫非同步的程式碼根本是災難。尤其是網路和檔案 I/O 混雜、又有複雜的狀態轉移的時候。
- 放棄自己發明的那套 pipeline,學學市面上成熟的 CI,像是 GitLab CI 或 Azure Pipeline (咦怎麼沒有 GitHu…)。但這可能是因為我太想要一次就設計完所有功能了卻實作不完。
- 寫文件 XD
其實就是睡前想到所以筆記個。不知道什麼時候有時間繼續做這個專案。