「那你現在算全端了嗎?」 「不不,還差得遠!😅」 # 前言 在應用系統開發實務上,就算你把前端刻得出來、後端 API 也設計得有模有樣,頂多只是做出了一個「能動的東西」。但「能動」跟「能活」,是兩件差很多的事。 一個能活的系統,需要有人(或者一套機制)負責讓它在對的環境裡跑起來、確保它跑歪了有人知道、更新它的時候不會順便把什麼東西搞壞、以及保護它不被奇奇怪怪的人亂戳。 這些,就是本篇文章要聊的後半場課題:DevOps、資訊安全、系統分析與設計、還有系統整合。 # DevOps 在開始接觸 DevOps 之前,我對它的理解大概是:「寫個 script 讓程式自己更新,這樣就不用手動了。」這個理解沒有大錯,但它只抓到了 DevOps 的皮,沒有抓到骨。 DevOps 的核心其實是一個問題的解答:「開發者做出來的東西,怎麼讓它穩定、可重複地到達使用者手上,而且出了問題能夠快速恢復?」 這個問題的背後,牽涉到的不只是 CI/CD pipeline 的設定,而是整個開發、測試、部署、監控的流程設計。乍聽之下很簡單,但當你開始細想,就會發現問題一個接著一個冒出來: 新版模型訓練完之後,怎麼確認它比舊版好再換上去? 如果新版上線之後發現結果不對,怎麼快速退版? 模型更新的過程中,服務要繼續提供預測還是先暫停? 這整個流程有沒有日誌記錄? 有沒有人在監控這些日誌? 每一個問題,都指向一個需要設計的環節,而不只是寫一段程式碼就能解決的事。一直到我在業界當中,實際參與應用佈署流程,親自接觸 GitLab + Harbor + Rancher + Argo CD 等 Kubernetes 生態系工具來實作 DevOps,才更加深刻地體認到 DevOps 當中「可重現的環境」這個概念的重要性。 # 跨越 Windows / Linux 的系統鴻溝 大多數資料科學家的日常開發環境是 Windows、公司配的筆電是 Windows,Excel 是 Windows,連 Jupyter Notebook 大概也是在 Windows 上跑的。一切都很和平,直...