可靠、安全、穩定,開源高質量專案 | 亞馬遜的開源文化

亞馬遜雲開發者發表於2023-02-17

亞馬遜的領導力準則是亞馬遜文化的核心,它如同亞馬遜的 DNA 融入貫穿每一個重要決策,深深影響著每一位亞麻人、影響著每一位亞馬遜的客戶、合作伙伴以及每一位亞馬遜雲科技的構建者。同時,亞馬遜的領導力準則對亞馬遜與開源的互動方式也產生著深遠的影響。

在上篇文章,我們為大家講述了亞馬遜是如何在開源社群中踐行最重要的一條領導力準則——客戶至尚:透過始終以客戶為中心,聆聽開發者的反饋,透過合作和參與開源社群,讓開源更易用。

本篇我們想與大家分享我們另一條領導力準則在開源文化中的實踐——最高標準。

最高標準


不論是為開發者提供全託管開源軟體服務,還是為自管理方式的客戶提供各類複雜的基礎雲服務,我們都需要確保這些產品及服務能夠在滿足開發者需求的基礎上具備足夠的可靠性、安全性、穩定性。這就是亞馬遜的另一領導力準則——最高標準。

亞馬遜內部使用 Apache Lucene 多年,在 2019 年 Amazon.com 決定將搜尋服務 100% 轉為由 Lucene 驅動。作為一項開源技術,Lucene 能否支援亞馬遜執行的規模下的搜尋效能,遷移是否會有業務風險?事實證明,亞馬遜的加入,將 Lucene 搜尋效能的極限推向又一個新高峰。

Apache Lucene


  • 專案主頁

https://lucene.apache.org/

  • 專案地址

https://github.com/apache/lucene

Apache Lucene 是一個使用 Java 構建的開源全文搜尋庫,亞馬遜的高階首席搜尋工程師 Mike McCandless(Lucene 和相關專案的長期貢獻者)表示,在將 Lucene 的使用“推向極限”的過程中,亞馬遜的工程師們發現了一些邊緣粗糙 (rough edges)、漏洞和其他問題,並有效解決了這些問題。

出於行業競爭或者產品戰略的考慮,Apache 2.0 許可證允許開發者們在使用開源產品時,可以自行修改程式碼且無需把更改回饋給上游。但亞馬遜選擇了將程式碼修改和最佳實踐積極回饋給 Lucene 社群以幫助與之相關的其他專案。並且亞馬遜的工程師們一直在加大參與開源專案的力度以更好地服務客戶,即使在搜尋等可能創造競爭優勢的戰略性領域也是如此。

亞馬遜已經向 Lucene 提出了多項重要的改進,包括:

對 Lucene 索引程式碼進行的重大低階別更改, 實現併發 “更新” 和 “刪除” ,使得在支援併發執行的硬體上的執行效率極大提升;

建立自定義詞頻索引,將行為訊號引入排名依據中(例如顧客在搜尋某個商品後可能的行為);

眾多錯誤修復,並向上遊分支推送更改。

Open 3D Engine

  • 專案主頁

https://www.o3de.org/

  • 專案地址

https://github.com/o3de/o3de

遊戲、模擬開發人員對我們說,從頭開始構建 3D 工具成本高昂,需要數年的開發時間,並需要大量的資源來維護。要麼將大部分資金花費在重複做別人或者自己已經做過的事情上,要麼只好使用那些難以定製的專用解決方案。他們想要更多的選擇,幫助他們在生產過程中實現協作、自定義和創造性控制。

2021 年 7 月 7 日亞馬遜官方釋出一款模組化的、開源的、跨平臺的 3D 引擎 Open 3D Engine (O3DE),為從 3A 級遊戲到電影質量的 3D 世界再到高保真模擬提供動力。這是一個開源專案,沒有費用或者商業義務。O3DE 使用了 Apache 2.0 許可,並由 Linux 基金會管理。

O3DE 的開發初衷

故事需要從 2016 年亞馬遜推出 Lumberyard 遊戲引擎開始。Lumberyard 提供了完全免費、原始碼可用的實時 3D 開發引擎,以便透過雲整合進行快速構建、部署和擴充套件。過去幾年中,透過不斷地根據使用者新的需求進行改進,終於構建了功能強大的元件實體系統和備受歡迎的 Script Canvas 視覺化指令碼引擎。亞馬遜為此收購了 Emotion FX 動畫編輯器,建立了模組化 Gem 系統,並實施了許多 Twitch 和亞馬遜雲科技整合。

要想提供世界一流免費 3D 渲染工具,Lumberyard 還不夠,於是亞馬遜藉助 Lumberyard 的構建經驗,在此基礎上進一步的迭代改進,實現了更好的協作和創新性控制,在 2021 年釋出了 O3DE。區別於傳統遊戲引擎整體式的構建設計,O3DE 被設計為具有可擴充套件性的模組化引擎,並採用開放的、標準化工具。在此基礎上,我們新增了預置系統、新構建系統、可擴充套件 UI、新的雲屬性的功能、大量資料庫最佳化、新網路功能等等。另外我們還新增了全新的基於物理渲染 (Physically Based Rendering - PBR) 的渲染器,它能夠透過光線追蹤和 Gi 支援實現前向渲染和延遲渲染。

O3DE 的設計

模組化

藉助 O3DE 的模組化架構新增新功能非常簡單,這樣開發人員就可以持續創新。

O3DE 引擎被設計為模組化引擎,幾乎所有引擎部件都是一個庫。因此開發人員可以獨立替換圖形渲染器、音訊子系統、編輯器、語言支援、網路堆疊、物理系統和其他庫,而不影響其他庫。核心引擎模組和任何附加元件或外掛統稱為“Gem”。開發人員可以透過引入 30 多種功能和工具中的任何一種來精簡專案,也可以將這些功能和工具作為獨立庫來實施。如果開發人員已經擁有引擎並希望減少技術債務或更新程式碼,可以從開源專案中輕鬆選擇所需的功能,然後將其實施到自己的技術堆疊中。他們可以建立併合並自己的堆疊。

引擎即 SDK

便於自定義引擎元件,並根據需要用特定自定義模組替換預構建元件。

Lumberyard 開發人員會發現引擎已經發生了很大的變化。它的構建類似於 SDK,因為對於引擎模組和 Gem,它可以以預編譯的形式提供,這可被視為是一種“引擎即 SDK”方法。同樣,在專案發生變化時,不需要重新編譯預編譯的庫或 Gem。而且,當新引擎版本釋出時,開發人員可以更新核心 Gem,只需解決專案程式碼本身的編譯問題即可。

Atom 渲染器

另一個重大變化是 Atom 渲染器,正如預期的那樣,它作為 Gem 交付。該渲染器透過提供基於物理的現代渲染器 (PBR) 來支援多個平臺,該渲染器符合 ACES 色彩空間標準並完全支援 Vulkan、Metal(開發中)和 DirectX 12 的光線追蹤。Atom 隨附全域性光照 (GI) 和前向+ 渲染,開箱即用,並支援延遲渲染管道。與 O3DE 本身一樣,Atom 具有模組化、可編寫指令碼和資料驅動等特點。亞馬遜雲科技甚至為它編寫了一種全新的著色語言,稱為 AZSL。這種語言利用 Atom 的資料驅動功能,方便開發人員隨著新硬體介面的出現不斷創新。同時,Atom 是開源且免費的,就像 O3DE 中的其他所有功能一樣。請參閱這篇部落格,詳細瞭解 Atom 渲染器:

網路

O3DE 中包含了全新的網路堆疊,它具有高度靈活的資料驅動模型,支援 TCP/UDP,並在簡單的 API 背後抽象了低延遲傳輸層。該堆疊支援加密和壓縮,並具有內建模擬器,用於延遲、抖動、重新排序和丟失。為了確保最低延遲和最高保真度,它支援透過無序不可靠的資料複製進行實體複製、本地預測延遲補償、針對伺服器許可權的向後協調,及支援自動去同步檢測和修正的可拆分玩家行為。為了確保開發人員可以使用不同的伺服器型號,該堆疊支援開箱即用的玩家託管伺服器和專用伺服器型號。請參閱這篇部落格,獲取更多開發詳情:

O3DE 的發展和未來

開源友好型構建系統

對於開發人員來說,模組化還必須易於理解並允許快速開發,因此,我們決定將整個構建系統移到開源 CMake 系統中。這一選擇為各種 IDE(例如 Visual Studio、XCode 等)提供了更好的 CTest、外掛庫、分析、編輯並繼續、快速程式碼生成及本機專案生成的支援。這種新方法透過適當的依賴關係樹來構建所選的目標,並確保只重新構建實際的依賴關係,以便提高迭代開發的速度,進而節省時間。這種模組化特性還允許我們簡化專案和 Gem 管理,方法是:刪除所有二進位制格式,然後將其移到可使用 CMake 編寫指令碼的人類可讀的 JSON 檔案。因此,只需簡單地更改 JSON 檔案中的某一行,即可在專案中新增或刪除Gem。透過部落格詳細瞭解 Lumberyard 構建系統的未來:

更快、更輕、效能更高

相較於前一代的 Lumberyard,O3DE 更輕便、速度更快、效能更高。現在的版本已經刪除了超過 200 萬行舊程式碼冗餘,為開源做好來準備。

建立了新的高效能數學庫,這些庫利用現代 CPU 和當前 SIMD 指令集。數學是精彩遊戲和模擬的核心,它提供了使用者、貢獻者和社群擁有非常堅實的工作基礎。最終結果將是,幀率提高,平臺支援得到改進(尤其是在 ARM 裝置上),準確性提高,及可用於動畫、特效和遊戲執行的計算資源增加。畢竟,3D 引擎中的幾乎所有內容都與數學有關!請參閱這篇部落格,詳細瞭解我們的高效能數學工作:

生產力和可擴充套件性

工具和管道實施對於簡化生產所需的時間同樣至關重要。為了幫助加速自定義,它被擴充套件了 UI 工具,它使用可訪問程式碼介面的 Python 擴充套件和 Qt 來建立自定義編輯器元件。透過新的步驟前和步驟後 Python 繫結極大地更新了資產建立,以允許 FBX 和材料處理的動態處理和自定義行為。這些繫結使技術類遊戲藝術家能夠編寫可拆分、分配或重新定位資產的 Python 指令碼,以及從任何輸入源建立自定義材料。

許多其他功能也發生了變化,以便社群以新方式對其擴充套件。Script Canvas 現在支援透過未來本機程式碼支援編譯為 Lua,並透過可擴充套件行為上下文管理器進行指令碼繫結。O3DE 終於已經從 Lumberyard 管理遊戲內部資產的“切片”模型轉向了大家都很熟悉的預製模型。O3DE 模組化標準介面使開發人員能夠針對其他 Gem 介面執行直接函式呼叫,並提供 IDE 自動完成支援,這樣使得開發人員能夠在自己的專案中發現和實施功能(無論是整個還是部分功能)。

小結


對於亞馬遜雲科技來說,我們將繼續與 Linux Foundation、合作伙伴和大學合作,以幫助實現更多創新,開展令人興奮的即將宣佈的年度 O3DE 新活動,以及舉辦全球行業展覽和駭客馬拉松。我們希望任何人都可以利用這項開源技術提供的遊戲模擬開發平臺,快速構建更加精彩的遊戲和實時模擬。我們相信現在正是發展 3D 視覺化和工具業務的理想時機,我們期待更多的開發者加入到這個專案中來。

我們會在下一篇分享中,解讀指引亞馬遜開源文化的另一領導力準則——創新簡化。你將會了解到我們在這一準則指導下傾力打造的兩款開源產品 Bottlerocket 和 Firecracker。

歡迎持續關注 Build On Cloud 微信公眾號,瞭解更多面向開發者的技術分享和雲開發動態!

推薦閱讀


  • 合作、參與、讓開源更易用 | 亞馬遜的開源文化
  • 機器學習洞察 | JAX,機器學習領域的“新面孔”
  • 機器學習洞察 | 一文帶你“講透” JAX

圖片
作者鄭予彬亞馬遜雲科技資深開發者佈道師,20 年 ICT 行業和數字化轉型實踐積累,專注於亞馬遜雲科技雲原生、雲安全技術領域。18 年架構師經驗,致力於為金融、教育、製造以及世界 500 強企業使用者提供資料中心建設以及軟體定義資料中心等解決方案的諮詢及技術落地。

亞馬遜雲科技解決方案
基於行業客戶應用場景及技術領域的解決方案
聯絡亞馬遜雲科技專家

相關文章