系統設計五步指南

系統設計對話可能非常具有挑戰性。可能有很多模棱兩可的地方、選項和想法——加上有限的時間和難以解決的問題。根據經驗,我發現了一種通用方法,可以幫助使這些對話更有條理、更有趣、更有成效。

  1. 要求和目標
    系統設計討論通常從要解決的開放式問題開始。
    假設需求是:“讓我們設計 Twitter”。
    從一開始,每個人都需要保持在同一頁面上。你可以通過澄清問題然後制定討論議程來實現這一點。
    該議程的第一步將討論需求和目標,它們基本上可以分爲兩部分:功能性需求和非功能性需求。

功能需求:
功能需求是關於全局的,例如:

非功能性需求是關於技術細節的:

知道根據討論的性質,有時在這一點上討論非功能性需求並不是優先事項,這很有幫助。無論如何,討論功能需求是必不可少的。
一旦您就需求和目標達成共識,現在是概述用戶流程並深入研究系統 API 的好時機。

  1. 用戶流程和系統 API
    這是您考慮用戶使用產品的所有方式的部分,以及您希望用戶最終採取的路徑。
    這是一個用戶流程示例:用戶登錄、進入搜索、獲取結果頁面、可以聯繫業務、填寫表單、發送消息、在消息框中查看消息……
    通過這個用戶流程大綱,您可以開始想象需要在幕後發生的不同請求。這直接導致概述 API 調用。
    API 調用具有以下元素:

您可以開始編寫 API 調用來涵蓋流程中的每個步驟,這些調用如下所示:

我們有用戶流程和系統 API 來幫助指導我們的系統設計。現在我們可以開始思考一個圖表,瞭解一切在幕後是如何運作的。

  1. 高級系統設計
    以下是一些典型的設計注意事項:

當擁有多個數據庫時,有幾種方法可以處理規模。以下是垂直拆分的方法:

水平拆分

這是一個簡單的圖表示例:


這是一個更復雜的圖表示例,與上面的項目符號更加一致:


有了一個漂亮的圖表,您現在可以更深入地瞭解數據庫方面並寫出數據庫模式。

  1. 數據庫模式
    要編寫表結構模式,您應該考慮數據庫表,然後考慮每個表中的內容。例如,對於 Twitter,我們可能需要 Tweet、User 等表,每個表都有自己的主鍵(粗體)和具有自己數據類型的列:

系統設計對話可以以多種方式進行,不僅在最後,而且在整個過程中。這就是高級主題可以發揮作用的地方。

  1. 進階話題
    您最終可能會更深入地研究分片、緩存、隊列、安全等。以下是一些可能進入討論的示例:

總的來說,我希望這是一個對系統設計討論有用的指南!這無論如何都不全面,因爲系統設計可能會變得非常複雜和具體。相反,這涉及關鍵對話點和基本設計概念。

出處:https://www.jdon.com/61714

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/foXquClmYNJCrkUNu6SoXQ