從意外發(fā)現(xiàn)到效率革命:亞馬遜云科技大規(guī)模應(yīng)用自動推理提升系統(tǒng)效率
在亞馬遜云科技應(yīng)用自動推理的10多年時間里,我們發(fā)現(xiàn)經(jīng)過驗證的代碼通常比它所替代的未經(jīng)驗證的代碼性能更好。
這主要是因為在驗證過程中我們所做的bug修復通常會提升代碼的運行性能。自動推理讓開發(fā)人員有信心去探索額外的優(yōu)化,進一步提升系統(tǒng)性能。我們發(fā)現(xiàn)驗證的代碼更容易更新、修改和操作,這減少了半夜的日志分析和調(diào)試環(huán)節(jié)。
自動推理的基本概念
在亞馬遜云科技,我們努力為客戶構(gòu)建簡單、易用的服務(wù)。但在這種簡單的背后卻是龐大、復雜的分布式系統(tǒng),每秒處理著數(shù)十億個請求。驗證這些復雜系統(tǒng)的正確性是一個極大的挑戰(zhàn)。我們的服務(wù)隨著新功能的增加、組件的重新設(shè)計、安全的增強和性能的優(yōu)化,一直處于不斷變化和發(fā)展的狀態(tài)。很多變化本身就是非常復雜的,必須在不影響亞馬遜云科技本身或客戶的安全性和韌性的前提下進行。
設(shè)計評審、代碼審計、壓力測試和故障注入是我們經(jīng)常以及未來都會一直使用的寶貴工具。然而,我們發(fā)現(xiàn)仍然需要使用額外的技術(shù)來確認許多情況下的正確性。細微的bug仍可能逃過檢測,尤其是在大規(guī)模、容錯架構(gòu)中。有些問題甚至可能源于最初的系統(tǒng)設(shè)計,而不是實施缺陷。隨著我們服務(wù)規(guī)模和復雜性的增長,我們不得不使用基于數(shù)學和邏輯的更強大技術(shù)作為對傳統(tǒng)測試方法的補充。這就是人工智能(AI)的一個分支自動推理發(fā)揮作用的地方。
傳統(tǒng)測試側(cè)重于在特定場景下驗證系統(tǒng)行為,而自動推理旨在使用邏輯來驗證系統(tǒng)在任何可能場景下的行為。即使是一個中等復雜的系統(tǒng),要重現(xiàn)可能發(fā)生的每一種可能狀態(tài)和參數(shù)的組合,所需的時間也是難以想象的。自動推理可以通過計算系統(tǒng)正確性的邏輯證明來快速、高效地取得相同的效果。
使用自動推理需要我們的開發(fā)者具有不同的思維方式。我們不是試圖考慮所有可能的輸入場景及其可能出錯的方式,而是定義系統(tǒng)應(yīng)該如何工作,并識別出讓它正確運行必須滿足的條件。然后,我們可以使用數(shù)學證明來驗證這些條件是否為真。換句話說,我們可以驗證系統(tǒng)是否正確。
自動推理將系統(tǒng)的規(guī)范和實施以數(shù)學的形式進行審核,然后使用算法來驗證系統(tǒng)的數(shù)學表示是否滿足規(guī)范。通過把我們的系統(tǒng)編碼為數(shù)學系統(tǒng),并使用形式邏輯對其進行推理,自動推理使我們能夠有效和權(quán)威地解答有關(guān)系統(tǒng)未來行為的關(guān)鍵問題。系統(tǒng)能做什么?它將做什么?它永遠不會做什么?自動推理可以幫助回答系統(tǒng)的這些問題,即便是最復雜的、大規(guī)模的和潛在無限的系統(tǒng)——這些場景是單單通過傳統(tǒng)測試無法徹底驗證的。
自動推理能讓我們達到完美的程度嗎?不能,因為它仍然依賴于對系統(tǒng)組件的正確行為以及系統(tǒng)與其環(huán)境模型之間關(guān)系的某些假設(shè)。例如,系統(tǒng)模型可能錯誤地假設(shè)底層組件(如編譯器和處理器)沒有任何bug(盡管也可以對這些組件進行驗證)。話雖如此,與使用傳統(tǒng)軟件開發(fā)和測試方法相比,自動推理讓我們更有信心達到正確性。
更快的開發(fā)
自動推理不僅僅是數(shù)學家和科學家的工具。我們的 Amazon Simple Storage Service (Amazon S3) 工程師每天都在使用自動推理來防止bug。S3的背后是世界上最大、最復雜的分布式系統(tǒng)之一,它存儲了400萬億個對象、EB級別的數(shù)據(jù)并通常需要每秒處理1.5億個請求。S3由許多子系統(tǒng)組成,這些子系統(tǒng)本身就是分布式系統(tǒng),其中許多由數(shù)萬臺機器組成。S3一直不斷增加新的功能,同時它也被我們的客戶大量使用中。
S3索引子系統(tǒng)是S3的一個關(guān)鍵組件,它是一個對象元數(shù)據(jù)存儲,來支持快速的數(shù)據(jù)查找。該組件包含一個非常大的、復雜的數(shù)據(jù)結(jié)構(gòu)和精密的優(yōu)化算法。以S3的這種大規(guī)模,這些算法對于人類來說很難正確使用,同時我們也不能容許S3在查找時發(fā)生任何錯誤,為此我們大約每個季度都會進行新的改進,但任何更改都是在極其謹慎和大量測試的前提下進行的。
基于我們15年的經(jīng)驗,S3是一個構(gòu)建良好以及經(jīng)過充分測試的系統(tǒng)。然而,我們曾一度無法確認S3索引子系統(tǒng)中一個bug的根本原因。該系統(tǒng)能夠從異常中自動恢復,因此該bug的存在并沒有影響系統(tǒng)的行為。但我們并不滿足于此。
為什么這個bug存在這么久?像S3這樣的分布式系統(tǒng)擁有大量組件,每個組件都有自己的異常情況(corner cases),而且有可能同時發(fā)生很多異常情況。就S3而言,它擁有超過300個微服務(wù),這些異常情況的潛在組合的數(shù)量是巨大的。即使開發(fā)人員有證據(jù)證明bug存在,并可能知道引起bug的根本原因,但對于開發(fā)人員來說,他們不可能考慮到所有異常情況,更不用說這些異常情況的不同組合了。
這種復雜性促使我們探索如何使用自動推理來探索可能隱藏在這些狀態(tài)中的可能狀態(tài)和錯誤。通過構(gòu)建系統(tǒng)的正式規(guī)范,我們能夠找到bug并證明未來不存在此類bug。使用自動推理也讓我們有信心每一兩個月發(fā)布一次更新和改進,而不是一年只發(fā)布三或四次。
更快的代碼
Amazon Identity and Access Management (IAM)服務(wù)的正確性是確保我們客戶工作負載安全的基礎(chǔ)。每個發(fā)送到亞馬遜云科技的請求即每個API 調(diào)用都由IAM授權(quán)引擎處理,這會涉及到數(shù)百萬客戶、數(shù)千種資源類型和數(shù)百種亞馬遜云科技的服務(wù)。這種請求每秒就超過12億次。這是亞馬遜云科技中對安全要求最高以及需要高度擴展的軟件之一。
在亞馬遜云科技,任何改變在進入到生產(chǎn)環(huán)境之前,我們需要有極高的信心確保系統(tǒng)保持安全和正確。使用自動推理,我們可以證明我們的系統(tǒng)在幾乎所有情況下遵守特定的安全屬性。我們稱之為可證明的安全性。自動推理不僅使我們能夠為客戶提供可證明的安全保證,還讓我們能夠大規(guī)模交付功能、安全性和優(yōu)化。
與S3一樣,IAM在過去超過15年時間里,已經(jīng)成為一個經(jīng)過時間考驗的、值得信賴的系統(tǒng)。但我們想進一步提高標準。我們構(gòu)建了一個正式規(guī)范來捕獲現(xiàn)有IAM授權(quán)引擎的行為,將其策略評估原則編碼為可證明的定理,并使用自動推理構(gòu)建了一個新的、更高效的實施。今年早些時候,我們部署了新的經(jīng)過證明正確的授權(quán)引擎——沒人注意到。自動推理使我們能夠無縫地用經(jīng)證明正確的替換物代替授權(quán)引擎,一個最關(guān)鍵的亞馬遜云科技基礎(chǔ)設(shè)施之一。
有了規(guī)范和證明,我們可以很有信心的安全、積極地優(yōu)化代碼。在IAM的大規(guī)模下,每一微秒的性能改進都意味著更好的客戶體驗和我們自身更好的成本優(yōu)化。我們優(yōu)化了字符串匹配、刪除了不必要的內(nèi)存分配和冗余計算、加強了安全性并提高了可擴展性。每次更新后,我們都會再次運行證明,來確認系統(tǒng)仍在正確運行。
現(xiàn)在,優(yōu)化后的IAM授權(quán)引擎相比之前快了50%。如果不使用自動推理,我們根本不可能這么有信心地進行如此重要的優(yōu)化。
更快的代碼部署
大多數(shù)在線安全交易都受到加密保護。例如,RSA加密算法通過生成兩個密鑰來保護數(shù)據(jù):一個用于加密數(shù)據(jù),另一個用于解密數(shù)據(jù)。這些密鑰實現(xiàn)了安全的數(shù)據(jù)傳輸以及安全的數(shù)字簽名。在加密這種場景下,正確性和性能至關(guān)重要——加密算法中的一個bug可能是災(zāi)難性的。
隨著亞馬遜云科技客戶將工作負載遷移到Amazon Graviton上,針對ARM指令集的密碼優(yōu)化的好處也得到凸顯。但是,通過加密優(yōu)化獲得更好的性能是很復雜的,這使得驗證修改后的加密算法是否正常運行變得困難。在我們開始使用自動推理之前,對密碼學庫進行優(yōu)化通常需要數(shù)月的審查,才能獲得足夠的信心將其投入生產(chǎn)環(huán)境。
自動推理的力量就在于此:正式驗證使RSA更快,部署也更快。當我們將自動推理應(yīng)用于橢圓曲線密碼學時,我們也看到了類似的提升。
形成一個良性循環(huán)
我們在過去十多年間,在亞馬遜云科技的內(nèi)部越來越多的應(yīng)用自動推理技術(shù)來證明我們的云基礎(chǔ)設(shè)施和服務(wù)的正確性。我們經(jīng)常使用這些方法不僅用于驗證正確性,而且還用于增強安全性和可靠性,以及最小化設(shè)計缺陷??梢允褂米詣油评頌橐粋€系統(tǒng)創(chuàng)建一個精確且可測試的模型,使用該模型快速驗證更改是否安全,或者發(fā)現(xiàn)它們是不安全的來避免對生產(chǎn)環(huán)節(jié)產(chǎn)生有害影響。
我們可以回答關(guān)于我們基礎(chǔ)設(shè)施的一些關(guān)鍵問題,來檢測可能導致數(shù)據(jù)泄露的錯誤配置。我們可以阻止一些我們無法通過其他技術(shù)發(fā)現(xiàn)的微妙但嚴重的錯誤進入生產(chǎn)環(huán)境。有了模型檢查,我們獲得了顯著的性能優(yōu)化,這是我們以往不敢嘗試的。自動推理為關(guān)鍵系統(tǒng)按預(yù)期運行提供了嚴格的數(shù)學保證。
亞馬遜云科技是唯一一家如此大規(guī)模使用自動推理的云提供商。隨著越來越多的人使用自動推理工具,這讓我們在提升自動推理工具的可用性和可擴展性上更容易進行大量的投入。我們發(fā)現(xiàn)自動推理工具越易于使用,它們的功能就會變得越強大,同時自動推理工具的采用率也會變得越高。我們越能證明云基礎(chǔ)設(shè)施的正確性,對于那些看重安全的客戶而言我們的云就越有吸引力。正如前文所述,我們不僅能夠提高安全性,還能更快地為客戶提供更高性能的代碼,并最終節(jié)約客戶的成本。
我們正處于一個新時代的開端,在這個時代大規(guī)模云架構(gòu)的關(guān)鍵屬性,諸如安全、合規(guī)性、可用性、持久性和防護等都可以實現(xiàn)自動證明。亞馬遜與眾不同之處就在于,我們從基礎(chǔ)就用可靠的數(shù)學推理并持續(xù)分析我們所構(gòu)建的一切,防止從AI幻覺到分析虛擬機監(jiān)控程序、密碼學和分布式系統(tǒng)等潛在問題的發(fā)生。