大小:574.53K 時長:03:16

蘋果公司已將其全球密碼監控服務從 Java 遷移到 Swift,實現了輸送量增加 40%,並顯著減少了記憶體使用量——釋放了近 50%之前分配 Kubernetes 的容量。
在最近的一篇文章中,蘋果工程師詳細說明瞭重寫如何幫助服務擴展到每天數十億次請求,同時提高了回應能力和可維護性。 團隊提到,較低的記憶體開銷、更好的啟動時間和簡化的併發性是選擇 Swift 而不是進一步優化 JVM 的關鍵原因。
Swift 使我們能夠編寫更小、更簡潔、更具表現力的代碼庫(代碼行數減少了近 85%),這些代碼庫在優先考慮安全性和效率的同時具有高度的可讀性。
蘋果的密碼監控服務是更廣泛的密碼應用生態系統的一部分,負責安全地檢查使用者保存的憑據是否出現在已知的數據洩露中,而不會向蘋果洩露任何私人資訊。 它每天處理數十億次請求,使用隱私保護協議進行密碼學比較。
這種工作負載需要高計算輸送量、嚴格的延遲限制和跨區域的彈性伸縮。 一天之內的流量波動很大,區域峰值差異高達 50%。 為了適應這些波動,系統必須能夠快速啟動或關閉實例,同時保持低延遲回應。
蘋果之前的 Java 實現難以滿足服務不斷增長的性能和可擴充性需求。 垃圾收集在負載下導致不可預測的暫停時間,降低了延遲一致性。 從 JVM 初始化、類載入和即時編譯的啟動開銷,減緩了系統實時擴展的能力。 此外,服務的記憶體佔用量通常每個實例達到數十 GB,降低了基礎設施效率並增加了運營成本。
Swift 最初是作為蘋果平臺的用戶端語言開發的,後來擴展到伺服器端用例。 蘋果的工程團隊選擇 Swift,不僅是因為它的生態系統一致性,還因為它能夠在計算密集型環境中提供一致的性能。
這次重寫還使用了 Vapor(這是一個流行的 Swift Web 框架)作為基礎。 還實現了其他自定義包老處理橢圓曲線操作、密碼學審計和特定於密碼監控領域的中間件。
Swift 的確定性記憶體管理,基於引用計數而不是垃圾回收(GC),消除了由 GC 暫停引起的延遲峰值。 事實證明,這種一致性對於大規模低延遲系統至關重要。 在調優之後,蘋果報告了亞毫秒級的 99.9 百分位延遲和記憶體使用量的大幅下降:Swift 實例消耗了數百 MB,而 Java 則消耗了數十 GB。
啟動時間也得到了改善。 沒有 JVM 初始化開銷或 JIT 預熱,Swift 服務可以更快地冷啟動,支援蘋果的全球自動擴展需求。
蘋果的遷移反映了一個更廣泛的趨勢:在極端規模的服務中使用面向性能的語言。 從高性能的原始程式碼控制解決方案到區塊鏈的程式設計語言,Meta 與 Rust 有著悠久的歷史。 Netflix 引入了 Rend,這是一個用 Go 編寫的高性能代理,來接管與 Memcached 交互的基於 Java 的用戶端。 AWS 在確定性性能和低資源使用提高基礎設施效率的服務中越來越多地依賴 Rust。
雖然這並不是 Java 和類似語言衰落的跡象,但有越來越多的證據表明,在性能需求的最高端,一些人發現通用運行時不再滿足其需求。
原文連結:
大會推薦:
8 月 22~23 日的 AICon 深圳站 將以 “探索 AI 應用邊界” 為主題,聚焦 Agent、多模態、AI 產品設計等熱門方向,圍繞企業如何通過大模型降低成本、提升經營效率的實際應用案例,邀請來自頭部企業、大廠以及明星創業公司的專家,帶來一線的大模型實踐經驗和前沿洞察。 一起探索 AI 應用的更多可能,發掘 AI 驅動業務增長的新路徑!
評論 1 條評論