可汗學院為何用Golang重寫他們的Python後端?

banq 發表於 2022-01-20
Python Go

可汗學院最近進行了大規模重寫,他們用 Go 編寫的面向服務的後端替換了舊的 Python 2 單體。

Kevin Dangoor 和 Marta Kosarchyn 是可汗學院的高階工程師,他們寫了一系列關於重寫的技術選擇、執行和結果的部落格文章。我們將在下面總結這個系列。

2019 年底,可汗學院正在尋求升級他們的後端。該站點建立在 Python 2 單體架構上,並且執行良好 10 多年。

然而,Python 2 即將在2020 年 1 月 1 日正式結束生命週期,因此可汗學院的工程師決定他們必須進行更新。

可汗學院有幾種選擇:

  • 從 Python 2 遷移到 Python 3 - 這將使 KA 的後端伺服器程式碼效能和 Python 3 的語言特性提高 10-15%。
  • 從 Python 2 遷移到 Kotlin - KA 開始將 Kotlin用於計算密集型後端任務,因為它比 Python 2 效能更高。從 Python 切換到 Kotlin 可能意味著可汗學院的響應速度更快,伺服器成本下降。
  • 從 Python 2 遷移到 Go - Go 是一種簡單而簡潔的語言,編譯時間非常快,對Google App Engine的一流支援以及比 Kotlin 更少的記憶體使用量(基於 KA 的測試)。

在這些選項中,可汗學院決定採用第三種選擇,並使用 Go 重寫他們的 Python 2 單體。

他們進行了效能測試,發現 Go 和 Kotlin(在 JVM 上)的效能相似,Kotlin 領先幾個百分點。但是,Go 使用的記憶體要少得多。

Go 和 Python 之間的巨大效能差異使得轉換所涉及的努力是值得的。