QCon看點|亞馬遜雲科技可持續軟體工程實踐分享

亞馬遜雲AI社群發表於2021-10-21

在技術領域裡,2021 年是特殊的一年。這一年是亞馬遜雲科技成立的第 15 週年,這一切始於亞馬遜雲科技的物件儲存解決方案 Amazon S3。在這過去的 15 年裡,我們可以看到雲端計算改變了整個世界。並且有越來越多的客戶將業務遷移到公有云,開啟了企業數字化之旅。

未來十年,雲端計算髮展將是一個持續擴張和不斷迭代的過程。與此同時,“可持續發展”已成為全球、全國以及各個企業必須考慮的主題之一。作為全球領先的科技企業亞馬遜雲科技也在技術的可持續發展性上不斷探索,從基礎設施到軟體設計,有一整套自下而上的具有前瞻性的解決方案實現它。

作為亞馬遜雲科技可持續發展架構副總裁,Adrian Cockcroft 在 9 月 11 日的亞馬遜雲科技中國峰會 Dev Day 上發表了主題演講,講解了亞馬遜雲科技的可持續發展戰略,更重要的是,他從開發者的角度闡述了亞馬遜雲科技如何進行可持續軟體工程實踐,我們可以從中得到非常多的啟發。

我們為什麼要關注“可持續發展”

可持續網路宣言:如果網際網路是一個國家,那麼它製造出來的二氧化碳排放量,排在全球第七位。

聯合國於 2015 年制定了一個全球框架《巴黎協定》,隨後各締約國紛紛制定了“碳中和”路徑和目標,對地球環境的健康發展做出承諾。今年兩會,中國也將“碳中和”和“碳達峰”寫入政府工作報告,目標在2030年前實現“碳達峰”,2060 年前實現“碳中和”。毋庸置疑,可持續發展已經成為不言而喻的社會共識。但在社會共識之下,還需要個人、企業、政府等各類社會主體的參與——其中體量龐大的科技企業是至關重要的參與者。

目前全球網際網路使用者超過 46 億,隨著網際網路普及率的上升,網際網路很快將產生近 10億噸二氧化碳,用電量相當於全球的 10%。其中為資料中心供電所需的能源量大約每四年翻一番,就碳排放而言,ICT 行業自 2007 年以來一直貢獻了 2-6%,幾乎與航空業持平。

好訊息是,雖然 ICT 和雲採用呈指數級增長,但能源使用和碳排放卻能相對保持不變,因為主流雲提供商的超大規模資料中心正顯著地提高效率。埃森哲的分析表明,倘若採用綠色方法遷移至公有云,全球二氧化碳排放量每年可減少 5,900 萬噸,這相當於動動手指就能減少 2,200 萬輛汽車的碳排放量!

在中國,網際網路科技企業也都在不斷加大力量投入到碳中和改造中。今年 8 月國際環保組織綠色和平 (Greenpeace) 釋出了中國科技巨頭《綠色雲端 2021》排行榜,從能源資訊披露、節能減碳表現、可再生能源方面合梳理了中國網際網路科技企業的氣候行動,相比去年,中國網際網路科技企業整體平均得分上升 11%。在 9 月 11 日的亞馬遜雲科技中國峰會 Dev Day 上,Adrian Cockcroft 表示亞馬遜雲科技取得的成績非常顯著:亞馬遜雲科技的基礎設施能源效率比普通美國企業資料中心高出 3.6 倍。同時,亞馬遜雲科技在執行相同任務時,可以減少 88% 的碳足跡。

這是多種因素促成的結果,Adrian Cockcroft講述了亞馬遜雲科技探索出來的構建綠色雲服務的幾條有效路徑。

  • 第一是水資源的保護,亞馬遜雲科技使用蒸發冷卻,迴圈用水,並儘可能在現場處理水。
  • 第二是採購可再生能源,亞馬遜雲科技現在是美國和歐洲最大的可再生能源買家。
  • 第三是移除了傳統的不間斷電源(UPS),轉而採用了整合在每個機架的小型電池組合自定義電源。以往,每次在電壓和直流電 / 交流電轉換當中都會有一些功率損失,通過移除傳統的 UPS,優化機架電源,減少最終轉換等措施讓能量損失降低約 35%。
  • 第四是探索創新的伺服器設計。中央處理器是現代計算機最耗電的部分,亞馬遜雲科技自研、基於ARM 架構的 Amazon Graviton 2 處理器每瓦特效能比其他業界標準流程高 2 ~ 3.5 倍。
  • 第五是在新資料中心建設中增加使用低碳混凝土,它能夠減少新建築碳排放量的25%。

可持續軟體工程實踐

很多人可能認為遷移到雲就足夠了,以至於忽視了優化內部效率。實際上,遷移到雲上的每個工作負載都會消耗能源,有一些任務還尤其耗電,比如有計算密集的 AI 或 ML 業務。一項對自然語言處理模型的研究說明了問題的嚴重性,研究表明訓練一個 NLP 模型產生的碳排放量相當於從紐約到北京的航班往返 125 趟。

另一項研究量化了觀看 YouTube 視訊所產生的碳足跡,它等同於一個小城市的二氧化碳排放量。這項研究同時指出,如果讓 25% 的音樂視訊改進為後臺播放,那麼一年可以節省 323,000 噸二氧化碳當量,這等同於每年 50,000 輛汽車的排放量。研究團隊的成員之一 Chris Preist 教授強調:“一個人對環境的影響很小,但把全球服務加起來時,它們可能會產生明顯的影響”。

對於我們技術人來說也是一樣,當手下的那一份“綠色”程式碼部署到成千上萬、甚至過億裝置上時,所產生的節能效應將是巨大的,所以大家有責任確保我們的技術能更加“可持續發展”。

那麼作為開發者,我們到底能做些什麼呢?

可持續軟體工程是一個新興的領域,但亞馬遜雲科技的探索能給我們一些啟示,Adrian Cockcroft 在演講中,從程式碼效率、平臺部署、軟體應用設計等方面講述了該如何實施可持續工程,InfoQ 摘取了其中一些開發者相關的部分以饗讀者。

發揮開源的作用

如果我們考慮在雲上進行優化,開源是一個很好的方式。現在很多我們正在使用的演算法其實不是很高效,但幸運的是,還存在每個開發人員都可以使用的、更為高效的開源替代方案。

JSON 文件在網際網路上無處不在,伺服器花費大量時間來解析這些文件。開發者們希望在進行完全驗證(包括字元編碼)的同時儘可能使用常用的 SIMD 指令來加速 JSON 的解析。

GitHub 上有一個開源 JSON 解析器 simdjson,通過與其他常用解析器的對比實驗,結果顯示,simdjson 的解析速度達到 2.2 GB/s。與其它解析器相比,simdjson 只使用四分之一或更少的指令,並且可用於許多不同的平臺和語言。

這個解析器是 2019 年開源的,但亞馬遜雲科技已經使用 simdjson 處理了大量的 JSON,Adrian Cockcroft 總結說效果是驚人的。

另一個例子是關於壓縮的。很多時候,我們需要壓縮日誌檔案,以壓縮的格式儲存千兆位元組或萬兆位元組的資料。gzip 和類似演算法作為廣泛使用的格式流行了很長一段時間,但現在有了一個新的、由臉書開發的叫做 Z-Standard 的演算法。這種演算法不僅可以使用更少的 CPU 來進行壓縮,而且能獲得更高的壓縮率,壓縮後的檔案最終只有 gzip 檔案大小的 60%。對於單獨一個小檔案來說,壓縮到這個程度可能可有可無,但是當你要處理千或萬兆位元組的資料時,這就有了很大的不同,你可以通過遍歷和重新壓縮來釋放大量的資料空間。

這就是開發者可以做的一些簡單的事情:尋找其他更有效的演算法,來替代程式中的低效演算法。

在峰值和碳足跡之間多加權衡

工作負載執行時通常會出現尖峰,所以需要我們提供高於期望峰值的容量,但是碳足跡不依賴於系統的平均使用量,甚至不依賴於系統的峰值使用量,碳足跡取決於系統預留的容量。而我們常常需要為一些這樣的“尖峰”時刻準備大量的資源。

因此,減少碳足跡的方法之一是確保負荷峰值分散開來,避免產生這樣的尖峰。即使平均利用率是相同的,所完成的工作量也相同,但通過減少峰值,就能減少預留容量。

另外就是配置定時任務的執行。如每天午夜執行的 Crontab 任務,很多人通過它來設定批處理作業,或進行資料倉儲的日常彙總。當每個客戶同時執行同步工作負載時,這些同步作業會增加峰值工作負載。這實際上提高了對亞馬遜雲科技的需求,因為我們必須提供更大的容量來處理這些併發任務造成的高峰。

但如果能避開整點、適當的安排偏移或抖動,就能避免併發產生的高峰。而且還不需要額外付出,因為你的工作量並沒有變化。因為在高峰時點的可用資源更為緊張,如果能避開高峰,在資源不那麼緊張的時候,可能你的任務也因此會執行得更快一點。

總的來說,減少碳足跡的方法之一是在服務水平協議和可持續性承諾之間進行權衡,比如說可以稍微降低期望值。我們知道二八定律,如果需要提升 20% 的效能,那麼這 20% 的效能提升涉及的努力通常會佔據整體工作量的 80%。有相當多的演算法或業務都存在這樣的權衡比較。例如當服務水平協議中規定響應時間為 500 毫秒,只要仍然符合服務水平協議的要求,就沒必要用 100 毫秒的響應時間來超額完成工作。

還有高可用性配置,如果你有一個等待故障轉移的熱備系統,你就可以在服務級別協議內採用冷備或是溫備系統進行故障轉移,從冷備啟動所需的時間實際上可能不會比溫備或熱備所需的時間長很多。高可用性總是要付出額外的成本和額外的碳代價,所以,我們可以利用這些權衡來減少碳足跡。

利用無伺服器架構

無伺服器是另一個減少碳足跡的極好的方式。

無伺服器計算指應用在遠端託管的執行環境中按需執行。過去幾年中,構建有彈性的無伺服器系統一直是系統管理員和 SaaS 公司的主要關注點。該架構提供的關鍵優勢在於:無伺服器模型無需使用者自身去維護作業系統,只需生成通用的程式碼,上傳到無伺服器框架,看著它執行就好了。

因此,使用者可以選取託管服務,使用 Amazon Lambda 執行計算資源的所有管理工作,可以關聯平臺配置伸縮這樣的工作。比如即時排程這樣的程式,當不使用時可以關閉計算機休眠所有測試環境,僅在需要的時候進行喚醒。這是一種極其強大的可以減少能源消耗和執行系統的成本的方式,能實現的事情之一就是釋放閒置的硬體,讓別人可以同時利用,可以降低亞馬遜雲科技執行所需的總體容量,也不會影響到使用者的實際工作。

因此,構建更可持續的體系結構的一個強有力的方法是轉向無伺服器,將工作負載轉移到雲服務,然後選擇最小化能源使用的服務和例項型別。

最後

實施可持續軟體工程,我們可以自上而下進行,首先從管理的角度測量整個企業的碳足跡,將工作負載從資料中心轉移到雲區域,改變使用模式以避免產生骯髒能源開發,然後選擇最小化能源使用的服務和例項型別。再深入到更多細節,優化工作負載以提高利用率,我們可以分散定時任務,降低負載峰值,達到調整 CPU 使用效率的目的。

重要的是,優化並不是只考慮某一個地方就可以,需要我們在架構和系統層面去思考,Adrian Cockcroft 還講道,亞馬遜雲科技正在培訓可持續發展解決方案架構師,以幫助大家進行可持續性架構評估。在可持續發展的共同責任模型的基礎上開展工作,最大限度地減少能源消耗,最大限度地提高每項資源消耗的工作量,轉向更省電的共享服務,並通過分享知識來持續改進。

在演講的最後,Adrian Cockcroft 發出了一個“行動的號召”:每位開發者都可以從現在開始去理解“可持續性”相關的術語和原則,在工作中尋找優化負載的機會,開源自己的經驗和方案,通過“分享”促進大家一起達成“可持續發展”的目標。

活動推薦:

在今年 10 月 22 日舉辦的 QCon 全球軟體開發大會上海站,我們設定了亞馬遜雲科技專場,以可持續發展技術為核心,四位頂尖專家將分別從 “構建未來的大資料平臺”、“利用無伺服器架構”、“發揮開源的作用”、“雲端機器學習助推”四個方面展開分享,帶大家探索軟體開發的下一站旅程。


快來掃碼參加吧?

相關文章