系統(tǒng)設(shè)計的“元素周期表”:40個橫跨所有領(lǐng)域的通用設(shè)計原則
近日,一篇名為《系統(tǒng)設(shè)計的元素》(Elements of System Design)的論文引發(fā)社區(qū)熱議。它的目標(biāo)宏大且吸睛:通過梳理上百篇橫跨操作系統(tǒng)、數(shù)據(jù)庫、分布式系統(tǒng)等領(lǐng)域的經(jīng)典論文,提煉出一套通用的系統(tǒng)設(shè)計原則“元素周期表”。
這份“周期表”的價值,不在于提供一套死板的規(guī)則,而在于為我們提供一套共享的詞匯和心智模型。它能幫助我們更清晰地思考、更精確地溝通、更深刻地理解不同系統(tǒng)設(shè)計背后的內(nèi)在聯(lián)系。
下面便是該論文的中譯版,希望能給大家?guī)l(fā)。
系統(tǒng)設(shè)計通常通過特定領(lǐng)域的解決方案來傳授,例如數(shù)據(jù)庫、操作系統(tǒng)或計算機體系結(jié)構(gòu),每個領(lǐng)域都有其自成一派的方法和術(shù)語。雖然這種多樣性是一種優(yōu)勢,但它也可能掩蓋了跨領(lǐng)域反復(fù)出現(xiàn)的共通原則。本文提出了一個從計算機系統(tǒng)多個領(lǐng)域中提煉出的系統(tǒng)設(shè)計原則的初步分類法。其目標(biāo)是提供一套共享、簡潔的詞匯,以幫助學(xué)生、研究人員和實踐者對系統(tǒng)結(jié)構(gòu)和權(quán)衡進行推理,跨領(lǐng)域比較設(shè)計,并更清晰地溝通設(shè)計選擇。
引言
投身于計算機系統(tǒng)領(lǐng)域的一大樂趣在于其純粹的多樣性,它涵蓋了操作系統(tǒng)、數(shù)據(jù)庫、計算機體系結(jié)構(gòu)、分布式系統(tǒng)、編程語言、網(wǎng)絡(luò)等眾多分支,每個分支都有著豐富的歷史。對于初學(xué)者來說,由于傳統(tǒng)和詞匯的多樣性,要發(fā)現(xiàn)不同領(lǐng)域之間的聯(lián)系可能頗具挑戰(zhàn):相同的設(shè)計原則可能會以不同的面貌出現(xiàn)在不同的領(lǐng)域中。
例如,思考一下 Jim Gray 等人關(guān)于數(shù)據(jù)庫隔離級別的經(jīng)典論文。它仔細闡述了并發(fā)控制機制以及在正確性和性能之間的權(quán)衡。然而,如果沒有在操作系統(tǒng)或計算機體系結(jié)構(gòu)領(lǐng)域接觸過類似問題,這些思想可能看起來僅僅是狹隘地“關(guān)于數(shù)據(jù)庫”的。實際上,相同的設(shè)計原則,“放寬一致性”,以不同的形式在各種系統(tǒng)中反復(fù)出現(xiàn),從弱順序內(nèi)存層次結(jié)構(gòu)到分布式系統(tǒng)中的最終一致性協(xié)議。當(dāng)每個社區(qū)都使用自己的術(shù)語和范例時,初學(xué)者可能很難識別出底層的設(shè)計原則。這種碎片化增加了認知開銷,因為同一個權(quán)衡必須在每個上下文中重新學(xué)習(xí)。
這是一個更廣泛的模式:系統(tǒng)研究富含實踐洞見,但在共享的概念性支架上則較為薄弱。在各個領(lǐng)域中,類似的挑戰(zhàn)反復(fù)出現(xiàn),如管理并發(fā)、確保一致性和適應(yīng)變化,而其框架和詞匯卻常常不同。因此,看似毫不相關(guān)的領(lǐng)域之間的深層聯(lián)系可能仍然相對模糊。
本文是朝著彌合這些差距邁出的一小步。借用門捷列夫的比喻,我們提出了一個反復(fù)出現(xiàn)的系統(tǒng)設(shè)計原則的“元素周期表”。其目標(biāo)并非一個僵化的分類法,而是一個可用的詞匯表:一種用以標(biāo)注論文、講座和設(shè)計文檔中所采用的基本原則的簡潔方式。其目的是揭示計算機系統(tǒng)中已經(jīng)存在的結(jié)構(gòu),以便學(xué)生能形成更連貫的心理地圖,研究人員能精確定位其貢獻,而實踐者能以更高的清晰度跨領(lǐng)域討論設(shè)計選擇。
方法論
我們通過回顧操作系統(tǒng)、計算機體系結(jié)構(gòu)、數(shù)據(jù)庫、網(wǎng)絡(luò)、編程語言、安全以及計算機系統(tǒng)其他領(lǐng)域的 100 多篇有影響力的論文來識別這些原則。這些論文因其歷史意義和持續(xù)的相關(guān)性而被選中,例如關(guān)于并發(fā)控制 和共識 的經(jīng)典論文,以及關(guān)于在系統(tǒng)內(nèi)部使用機器學(xué)習(xí) 和為云設(shè)計系統(tǒng) 的近期工作。
對于每篇論文,我們都問:其底層的高層設(shè)計原則是什么?在不同領(lǐng)域中,獨立的系統(tǒng)常常不是在機制上趨于一致,而是在共享的設(shè)計原則上:例如,通過放寬一致性來提高性能,或通過提升抽象來增強可用性。
要被認定為一條系統(tǒng)設(shè)計原則,它必須滿足兩個條件:
- 抽象性 – 該原則必須獨立于具體的技術(shù)或?qū)崿F(xiàn)。
- 通用性 – 該原則必須在不同領(lǐng)域中出現(xiàn)(例如,數(shù)據(jù)庫系統(tǒng)、操作系統(tǒng)、編程語言)。
本分析旨在梳理出許多具有持久、通用價值的原則,而非對所有原則進行編目。
設(shè)計原則表
我們整理了一套結(jié)構(gòu)化的、包含 40 多個從系統(tǒng)文獻中提煉出的通用設(shè)計原則。如下圖所示,它們被組織成反映了系統(tǒng)設(shè)計中常見維度的不同主題組。
圖片
圖例: Code = 唯一短符號, Name = 原則名稱, Intent = 簡短描述。
每個原則都帶有一個簡短的符號(例如,Co 代表可組合性,Op 代表樂觀設(shè)計)以便快速參考。我們強調(diào)設(shè)計意圖而非規(guī)定具體機制:這些原則闡述的是諸如“在并發(fā)下保持正確性”或“優(yōu)先處理普遍情況”等目標(biāo),而不是“使用此鎖定協(xié)議”或“優(yōu)化此查詢計劃”,具體的實現(xiàn)則留給特定領(lǐng)域。
目錄
- Group 1: 結(jié)構(gòu): 如何用清晰的邊界和擴展點來切分和連接組件。
- Group 2: 效率: 通過將精力集中在有回報的地方,來減少工作或降低成本。
- Group 3: 語義: 精確地指定行為和接口。
- Group 4: 分布: 在分布式架構(gòu)中協(xié)調(diào)工作和數(shù)據(jù)。
- Group 5: 規(guī)劃: 根據(jù)目標(biāo)、成本和約束自動選擇方案。
- Group 6: 可操作性: 在最小化中斷的情況下觀察、適應(yīng)和演進運行中的系統(tǒng)。
- Group 7: 可靠性: 在故障、并發(fā)和部分失效下保持正確性。
- Group 8: 安全性: 約束權(quán)限和強制隔離以保護安全和完整性。
Group 1: 結(jié)構(gòu)
Si – Simplicity (簡單性)
選擇滿足當(dāng)前需求的最簡單的系統(tǒng)設(shè)計;抵制復(fù)雜性,例如“以防萬一”而增加的額外層次、服務(wù)或通用性,直到有證據(jù)表明其有益。
示例: 避免對系統(tǒng)進行過早的架構(gòu)優(yōu)化。
Mo – Modularity (模塊化)
將系統(tǒng)劃分為具有最小化接口的高內(nèi)聚單元,以便每個單元都可以被獨立地推理、替換或演進。該原則專注于分解:選擇邊界以促進關(guān)注點的清晰分離,使每個職責(zé)都位于一個模塊內(nèi)。
示例: OSI 模型將通信分解為具有明確邊界的標(biāo)準(zhǔn)化層次,允許獨立開發(fā)和替換。
Co – Composability (可組合性)
設(shè)計可被安全、靈活地重新組合的組件;依賴顯式的合約和類型約束的接口,以使每個合法的組合都保持正確,讓組件能像可互換的積木一樣被組裝。與模塊化不同,該原則專注于重新組合:確保組件可以安全、靈活地結(jié)合。
示例: Unix 程序(如 grep, sort, uniq)從標(biāo)準(zhǔn)輸入讀取并寫入到標(biāo)準(zhǔn)輸出,讓用戶可以組合復(fù)雜的文本處理管道。
Ex – Extensibility (可擴展性)
設(shè)計系統(tǒng)以允許安全的用戶自定義擴展,例如插件,而無需修改系統(tǒng)核心。當(dāng)擴展來自不受信任方時,通過沙箱進行隔離以保護安全。
示例: Unix 也體現(xiàn)了可擴展性:用戶可以添加新程序而無需更改內(nèi)核。
Pm – Policy/Mechanism Separation (策略與機制分離)
通過暴露一個通用接口,將“應(yīng)該做什么”(策略)與“如何執(zhí)行”(機制)分離開來,使得多種策略可以插入到同一個機制中。
示例: Hydra 擁有一個通用機制的內(nèi)核(調(diào)度、分頁、保護),并將資源分配策略移至用戶級模塊。
Gr – Generalized Design (通用化設(shè)計)
設(shè)計一個具有明確變化點(如類型、可調(diào)參數(shù)或插件)的單一核心,使其可以在不產(chǎn)生重復(fù)的情況下服務(wù)于多種用例,但當(dāng)特化能帶來性能、準(zhǔn)確性或清晰度的顯著提升時,則進行特化。
示例: C++ 標(biāo)準(zhǔn)模板庫是一組通過模板參數(shù)化的容器、迭代器和算法的集合。Postgres 允許用戶向核心數(shù)據(jù)庫系統(tǒng)添加類型和操作符。
Group 2: 效率
Sc – Scalability (可伸縮性)
設(shè)計系統(tǒng)以應(yīng)對數(shù)據(jù)、流量或節(jié)點的增長,同時保持成本或延遲的近線性增長。
示例: MapReduce 通過將工作分解為并行任務(wù)并以最小的協(xié)調(diào)來聚合結(jié)果,從而在節(jié)點間進行擴展。
Rc – Reuse of Computation (計算復(fù)用)
通過緩存、物化中間結(jié)果(例如索引),或在重復(fù)或稍作修改的輸入上增量更新輸出來避免冗余工作,從而節(jié)省計算。
示例: B+樹復(fù)用其已排序的鍵順序:查找遵循現(xiàn)有的搜索路徑,而不是每次重新掃描整個數(shù)據(jù)集,從而復(fù)用了計算。
Wv – Work Avoidance (工作規(guī)避)
跳過不會改變外部可觀察結(jié)果的計算。例子包括惰性求值和謂詞短路。
示例: 惰性求值將工作推遲到值被需要時才執(zhí)行,從而消除了無用的計算。
Cc – Common-Case Specialization (普遍情況特化)
檢測主導(dǎo)運行時的執(zhí)行路徑或數(shù)據(jù)項(“熱點”),并專門為它們創(chuàng)建一個精簡的快速路徑,同時用一個較慢的通用路徑來正確處理所有情況。
示例: 在首次調(diào)用時緩存接收者類的目標(biāo)方法,這樣后續(xù)對該普遍接收者的調(diào)用將命中快速路徑;不常見的類則回退到完整的方法查找例程。
Bo – Bottleneck-Oriented Optimisation (瓶頸導(dǎo)向優(yōu)化)
對端到端性能進行剖析,定位最緊張的資源約束,并在此處集中改進,直到另一個階段成為限制因素。
示例: 罕見的第99百分位延遲的長尾請求是延遲瓶頸,而復(fù)制請求有助于削減尾部響應(yīng)時間。
Ha – Hardware-Aware Design (硬件感知設(shè)計)
根據(jù)底層硬件的延遲、帶寬、并行性和持久性特性(例如緩存層次、NUMA、SSD、GPU)來塑造算法和數(shù)據(jù)結(jié)構(gòu)。
示例: BLAS 定義了經(jīng)過緩存和向量優(yōu)化的內(nèi)核,使線性代數(shù)代碼能高效利用硬件。
Op – Optimistic Design (樂觀設(shè)計)
假設(shè)普遍情況會成功并繼續(xù)執(zhí)行,跳過協(xié)調(diào),僅在假設(shè)被證明錯誤時才依賴一個(可能昂貴的)恢復(fù)路徑。
示例: 樂觀并發(fā)控制無鎖地運行事務(wù),然后在提交時進行驗證,僅在檢測到?jīng)_突時才回滾。
La – Learned Approximation (學(xué)習(xí)式近似)
用在數(shù)據(jù)上訓(xùn)練的模型替換手工制作的算法,以犧牲有界的不精確性來換取效率或靈活性。
示例: 感知器分支預(yù)測器在線學(xué)習(xí)權(quán)重以預(yù)測分支結(jié)果,其性能優(yōu)于固定的兩位計數(shù)器,且無需擴大表的大小。
Group 3: 語義
Al – Abstraction Lifting (抽象提升)
將底層操作封裝在一個更高層的接口或領(lǐng)域特定語言之后,該接口表達的是意圖而非步驟。這使得內(nèi)部優(yōu)化成為可能,也允許單一的定義能針對不同的后端。
示例: SQL 查詢聲明要檢索的結(jié)果;DBMS 自動選擇訪問路徑、連接順序和物理操作符。
Lu – Language Homogeneity (語言同質(zhì)性)
在核心組件和擴展中采用單一、良定義的中間表示(或語言),從而使語義對齊、工具可組合,并以最小的努力實現(xiàn)跨層優(yōu)化和復(fù)用。
示例: LLVM 暴露了一個基于類型和SSA的IR,許多前端以此為目標(biāo),許多后端也共享它,從而實現(xiàn)了跨語言優(yōu)化和相同中間端遍的復(fù)用。
Se – Semantically Explicit Interfaces (語義明確的接口)
精確地指定一個接口(涵蓋效果可見性、順序、持久性等),以便用戶可以對調(diào)用的真實外部可觀察狀態(tài)進行推理,而無需猜測隱藏的緩沖或復(fù)制。
示例: SQL 隔離級別指定了精確的異常語義,并明確了可見性保證。
Fs – Formal Specification (形式化規(guī)約)
使用數(shù)學(xué)模型或邏輯來描述系統(tǒng)行為,以支持嚴(yán)格的推理、驗證或綜合。實現(xiàn)此原則的機制包括時序邏輯、狀態(tài)機以及其他使系統(tǒng)屬性可分析的形式化方法。
示例: TLA+展示了如何使用邏輯和集合論來規(guī)約和檢查系統(tǒng),以便在編碼前捕獲設(shè)計錯誤。
Ig – Invariant-Guided Transformation (不變量驅(qū)動轉(zhuǎn)換)
使用形式化聲明的不變量來驅(qū)動安全的重構(gòu)、優(yōu)化或重新配置。
示例: 在編譯器中,SSA 將“每個名稱只有一個定義”視為 IR 不變量;各個遍在重寫代碼時保持語義,然后重新建立 SSA。在查詢優(yōu)化器中,關(guān)系代數(shù)等價(例如,選擇/投影下推)保持結(jié)果的語義。
Group 4: 分布
Lt – Location Transparency (位置透明)
隱藏資源的物理位置,以便客戶端通過統(tǒng)一的名稱或句柄進行交互。
示例: 程序可以像調(diào)用本地過程一樣調(diào)用遠程過程,從而掩蓋了主機的地理位置。
Dc – Decentralised Control (去中心化控制)
將決策權(quán)分散到多個節(jié)點,以避免單點故障或瓶頸。
示例: Dynamo 通過一致性哈希對數(shù)據(jù)進行分區(qū),并使用基于 gossip 的成員關(guān)系,從而避免了任何中央?yún)f(xié)調(diào)器。
Fp – Function Placement (功能放置)
將功能放置在擁有必要上下文和資源的地方,以實現(xiàn)正確性和效率,避免在別處進行冗余工作。
示例: 端到端論證表明,像可靠性檢查這樣的功能只有在端點才能實現(xiàn)其正確性。
Lo – Locality of Reference (引用局部性)
將相關(guān)的數(shù)據(jù)和操作在時間和空間上彼此靠近,以保持訪問模式并最小化計算與狀態(tài)之間的分離。
示例: 工作集模型形式化了時間局部性,以將熱點頁面保留在內(nèi)存中。
Group 5: 規(guī)劃
Ep – Equivalence-based Planning (等價規(guī)劃)
在保持語義等價的通用IR上應(yīng)用代數(shù)/邏輯重寫規(guī)則;將最終選擇推遲到后續(xù)的成本/約束階段。
示例: Starburst 的基于規(guī)則的重寫系統(tǒng)應(yīng)用關(guān)系等價(例如,謂詞下推)來生成邏輯上等價的查詢。
Cm – Cost-based Planning (成本規(guī)劃)
當(dāng)系統(tǒng)必須在備選的設(shè)計、配置或執(zhí)行策略中做出選擇時,使用成本模型來指導(dǎo)搜索,以找到低成本的解決方案(能源、金錢等),而無需枚舉整個空間。
示例: Selinger 查詢優(yōu)化器在一個成本模型下選擇成本最低的計劃。
Cp – Constraint-based Planning (約束規(guī)劃)
將決策和硬性或軟性約束進行編碼,并依賴一個求解器(ILP/SMT等)來找到一個可行或最優(yōu)的分配方案。
示例: Quincy 將集群調(diào)度問題建模為帶有局部性和公平性約束的最小成本流問題,并求解以獲得分配方案。
Gd – Goal-Directed Planning (目標(biāo)導(dǎo)向規(guī)劃)
接受對期望最終狀態(tài)的聲明性描述,并自動合成一個具體的操作序列來達到它,從而將用戶與實現(xiàn)細節(jié)隔離開來。
示例: Cascades 查詢優(yōu)化器通過基于規(guī)則的轉(zhuǎn)換和成本引導(dǎo)的搜索,將一個 SQL 查詢(目標(biāo))轉(zhuǎn)化為一個可執(zhí)行的計劃。
Bb – Black-Box Tuning (黑盒調(diào)優(yōu))
當(dāng)分析性的成本模型不可用時,通過在目標(biāo)系統(tǒng)上測量候選方案來搜索計劃/配置空間,迭代地選擇更好的方案(例如,啟發(fā)式或貝葉斯搜索),并緩存勝出者。
示例: ATLAS 在目標(biāo) CPU 上憑經(jīng)驗對候選的 BLAS 內(nèi)核配置進行計時,并固定性能最佳的參數(shù),而無需分析性的成本模型。
Ah – Advisory Hinting (建議性提示)
提供非強制性的提示,系統(tǒng)可以利用這些提示來提高性能,但不會改變正確性或需要強制執(zhí)行。
示例: Lampson 提倡使用可選的“提示”,這些提示有助于提高性能,但如果被忽略,絕不能影響正確性。
Group 6: 可操作性
Ad – Adaptive Processing (自適應(yīng)處理)
監(jiān)控運行時條件,并自動調(diào)整參數(shù)或策略。
示例: Eddies 根據(jù)反饋在運行時持續(xù)地對查詢操作符進行重新排序,在不停止執(zhí)行的情況下進行適應(yīng)。
Ec – Elasticity (彈性)
根據(jù)不斷變化的需求和成本目標(biāo),自動調(diào)整資源分配。例子包括預(yù)測性自動伸縮和負載整形。
示例: Chase 等人根據(jù)負載和效用動態(tài)地配置服務(wù)器,體現(xiàn)了彈性資源管理。
Wa – Workload-Aware Optimisation (負載感知優(yōu)化)
持續(xù)觀察工作負載的形態(tài)(傾斜、局部性、訪問頻率等),并調(diào)整數(shù)據(jù)布局、算法選擇或資源分配以匹配當(dāng)前模式。
示例: 數(shù)據(jù)庫“cracking”技術(shù)根據(jù)查詢謂詞增量地重組列數(shù)據(jù),從而使數(shù)據(jù)布局持續(xù)地適應(yīng)觀察到的工作負載。
Au – Automation and Autonomy (自動化與自治)
讓系統(tǒng)無需人工干預(yù)即可執(zhí)行常規(guī)或響應(yīng)式任務(wù),通常通過從追蹤或用戶提供的示例中學(xué)習(xí)來實現(xiàn)。
示例: AutoAdmin 從工作負載追蹤中自動推薦索引/物化視圖 [7]。通過示例編程的系統(tǒng)通過從少數(shù)用戶提供的示例中進行泛化來自動化任務(wù)。
Ho – Human Observability (人類可觀測性)
暴露系統(tǒng)的內(nèi)部狀態(tài),如指標(biāo)、追蹤、計劃,以使系統(tǒng)有意地變得透明;這種透明度提高了可觀測性、調(diào)試、內(nèi)省和控制能力。
示例: Paxson 的端到端互聯(lián)網(wǎng)數(shù)據(jù)包動態(tài)分析展示了豐富的測量和追蹤如何實現(xiàn)有根據(jù)的調(diào)試和調(diào)優(yōu)。
Ev – Evolvability (可演進性)
設(shè)計系統(tǒng)使其能在最小化停機時間或重寫成本的情況下進行變更,且不破壞現(xiàn)有客戶端的外部合約或可觀察行為。與讓外部人員通過定義的鉤子點添加新行為而不觸及核心的可擴展性不同,可演進性讓系統(tǒng)內(nèi)部隨時間變化而不會破壞現(xiàn)有的外部合約。
示例: Parnas 展示了模塊化設(shè)計如何使系統(tǒng)更容易在不進行顛覆性重寫的情況下進行擴展。
Group 7: 可靠性
Ft – Fault Tolerance (容錯性)
設(shè)計系統(tǒng)使其在組件故障時仍能繼續(xù)運行,盡管可能以一種降級的形式。
示例: Gray 對計算機為何停止運行的分析表明,復(fù)制和自動重啟讓服務(wù)能夠在硬件和軟件故障中持續(xù)運行。
Is – Isolation for Correctness (隔離以保正確)
防止組件間的意外干擾,從而使局部推理保持有效。
示例: 兩階段行級鎖定阻止一個事務(wù)讀取或覆蓋另一個事務(wù)未提交的數(shù)據(jù),從而保持隔離保證。
At – Atomic Execution (原子執(zhí)行)
將多個操作組合在一起,使其表現(xiàn)為不可分割的,要么全部生效,要么全不生效。
示例: 使用事務(wù)性內(nèi)存,事務(wù)內(nèi)的內(nèi)存操作會進行推測性執(zhí)行,然后原子性地提交;如果發(fā)生任何沖突或故障,整個塊將中止,不留下任何部分狀態(tài)。
Cr – Consistency Relaxation (一致性松弛)
為提高性能、可用性或并發(fā)性,在有文檔記錄的邊界內(nèi),刻意放寬強一致性或順序約束。
示例: Bayou 允許移動客戶端在斷開連接時更新副本,并保證在副本重新連接時最終會趨于一致,這是用嚴(yán)格的一致性換取離線可用性。
Group 8: 安全性
Sy – Security via Isolation (隔離以保安全)
強制執(zhí)行嚴(yán)格的邊界,使故障或惡意代碼無法影響其他組件。
示例: 一個正確的虛擬機監(jiān)視器為每個客戶機呈現(xiàn)一個完整、隔離的機器,并攔截特權(quán)操作,防止一個客戶機危及其他客戶機或宿主機。
Ac – Access Control and Auditing (訪問控制與審計)
定義權(quán)限,并記錄每次訪問以備問責(zé)。
示例: Lampson 對訪問控制列表、能力(capabilities)和審計追蹤的分類法是現(xiàn)代安全機制的基礎(chǔ)。
Lp – Least Privilege (最小權(quán)限)
只授予完成任務(wù)所必需的最小權(quán)限,以縮小爆炸半徑。
示例: 對1988年互聯(lián)網(wǎng)蠕蟲的尸檢報告顯示,過度的權(quán)限讓蠕蟲得以傳播,并促使了最小權(quán)限守護進程的廣泛采用。
Tq – Trust via Quorum (法定人數(shù)信任)
依賴多個獨立參與者的一致同意,而非單一權(quán)威。
示例: Paxos 算法將狀態(tài)復(fù)制到一個多數(shù)法定人數(shù)中,這樣即使少數(shù)節(jié)點崩潰或行為惡意,服務(wù)也能保持正確。
Cf – Conservative Defaults (保守默認值)
發(fā)布時采用限制性的、安全的設(shè)置;讓專家選擇性地進入風(fēng)險更高、速度更快的模式。
示例: 采用“默認無訪問”策略,每個保護機制都應(yīng)只在明確授予時才允許訪問。
Sa – Safety by Construction (構(gòu)造即安全)
通過代碼或數(shù)據(jù)的結(jié)構(gòu)設(shè)計,使整類錯誤變得不可能發(fā)生,而不僅僅是被檢測到。
示例: Rust 的所有權(quán)和借用檢查器在編譯時就防止了數(shù)據(jù)競爭和懸垂指針。
案例研究
為了說明多個設(shè)計原則在實踐中如何交織在一起,我們以關(guān)系數(shù)據(jù)庫系統(tǒng)中從邏輯操作符計劃到物理操作符計劃的映射為例。
- 數(shù)據(jù)庫系統(tǒng)將聲明性意圖轉(zhuǎn)化為可執(zhí)行步驟(策略與機制分離)。
- SQL 表達了“做什么”(抽象提升),并具有精確的語義(語義明確的接口)。
- 優(yōu)化器首先使用代數(shù)等價來重寫查詢(等價規(guī)劃)。
- 然后它使用成本模型來選擇具體的物理操作符(成本規(guī)劃)。
- 物理操作符通常針對底層硬件特性進行優(yōu)化(硬件感知設(shè)計)。
- 謂詞下推體現(xiàn)了工作規(guī)避,而索引則實現(xiàn)了計算復(fù)用。
- 建議性提示可以指導(dǎo)優(yōu)化器,而較新的數(shù)據(jù)庫系統(tǒng)增加了運行時重優(yōu)化(自適應(yīng)處理)、學(xué)習(xí)模型(學(xué)習(xí)式近似)和采樣(Probabilistic Design,注:原文表格未列出此原則,但案例中提及)。
因此,數(shù)據(jù)庫系統(tǒng)中從邏輯到物理操作符的映射,體現(xiàn)了多個設(shè)計原則如何共同作用,以高效處理聲明性的SQL查詢。
局限性
任何試圖組織像計算機系統(tǒng)這樣廣泛的領(lǐng)域的嘗試都涉及到權(quán)衡。此表不是一份檢查清單或一個普適的理論;它是一個共享的詞匯表,旨在突出反復(fù)出現(xiàn)的原則并鼓勵進行結(jié)構(gòu)性反思。話雖如此,仍有幾個局限性:
- 正交性:原則之間可能重疊、相互加強或部分沖突;設(shè)計就是關(guān)于平衡這些張力。
- 主觀性與粒度:推導(dǎo)和映射原則涉及判斷;邊界是模糊的,不同的讀者可能會以不同的方式標(biāo)記同一個系統(tǒng),或以不同的方式解釋同一個原則。
- 非形式化分類法:這不是一個完整或最小的設(shè)計原則集合。沒有嘗試從一個最小的核心推導(dǎo)出這些原則。
最終,此表是一種幫助學(xué)生更清晰地看到反復(fù)出現(xiàn)的設(shè)計原則,協(xié)助系統(tǒng)設(shè)計師更精確地溝通權(quán)衡,并幫助研究人員認識到他們的思想在更廣闊的系統(tǒng)設(shè)計藍圖中所處位置的手段。
結(jié)論
系統(tǒng)設(shè)計橫跨不同的領(lǐng)域和詞匯,這可能使共享討論變得更加困難。我們繼承機制,研究權(quán)衡,并建立直覺,然而用于描述底層思想的簡潔術(shù)語并不總是唾手可得。這里提供的設(shè)計原則“元素周期表”旨在提供一種適度的通用語言,通過命名反復(fù)出現(xiàn)的思想,使其更容易被傳授、比較和在其上進行構(gòu)建。
參考文獻
[1] Ron Avnur and Joseph M. Hellerstein. Eddies: Continuously Adaptive Query Processing. In SIGMOD, 2000. [2] Rudolf Bayer and Edward McCreight. Organization and Maintenance of Large Ordered Indexes. Acta Informatica, 1972.
... (請參考原文中的詳細參考文獻列表) ...
[48] Hubert Zimmermann. OSI Reference Model – The ISO Model of Architecture for Open Systems Interconnection. IEEE Transactions on Communications, 1980.
如何引用
如果您覺得本分析有用,請按如下方式引用:
Joy Arulraj. Elements of System Design arXiv preprint arXiv:TBD, 2025.
論文地址:https://github.com/jarulraj/periodic-table


























