天天看點

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

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

在技術領域裡,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% 的碳足迹。

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

這是多種因素促成的結果,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隻使用四分之一或更少的指令,并且可用于許多不同的平台和語言。

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

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

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

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

在峰值和碳足迹之間多權重衡

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

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

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

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

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

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

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

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

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

利用無伺服器架構

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

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

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

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

最後

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

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

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

活動推薦:

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

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

快來掃碼參加吧👆 

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

繼續閱讀