什么是高層設計 - 學習系統設計
高層設計或HLD指的是整體系統設計,包括系統架構和設計的描述,是一種通用的系統設計,包括:
- 系統架構
- 數據庫設計
- 對系統、服務、平臺和模塊之間關系的簡要描述。
高層設計或HLD也被稱為宏觀級別設計。
什么是高層設計文檔?
HLD文檔包括數據流、流程圖和數據結構,以幫助開發人員了解和實現當前系統的設計意圖。 此文檔負責:
- 解釋系統組件和操作之間的連接,描述邏輯以及
- 為系統的每個模塊所需的體系結構設計(用于系統的功能和流程)
根據功能需求。這是因為客戶業務需求被轉化為我們作為咨詢工作或架構設計、安全性和網絡的一部分所說的解決方案,我們將其稱為高層設計。
HLD 不包括物理要求、端口詳細信息、VLAN等許多細節。
高層設計文檔的范圍
高層設計文檔呈現系統的結構,如應用/數據庫架構、應用流程和技術架構。與低層設計不同,高層設計文檔可能使用一些非技術術語,低層設計應該是嚴格的技術術語。
注意:制定HLD是解決方案架構師的責任。在創建HLD之后,有經驗的專業設計人員根據HLD的標準轉向LLD。LLD將提供關于軟件實體如何工作的詳細信息,而HLD只關注在組織中放置哪些軟件實體以進行高效操作。 以下是在設計HLD時從解決方案架構師那里預期的約束:
- 收集功能和非功能需求
- 成本限制(一旦組織規模擴大,這變得非常重要)
- 對系統的一致性、可用性、可擴展性和性能的程度有強烈的約束。
高層設計的組成部分
為了提供對整個解決方案的總體概覽,HLD應包含以下兩個元素:
- 軟件實體的屬性和特性。
- 不同軟件實體(組件、模塊、類等)之間的關系。
圖解: 讓我們通過下面的視覺輔助來描繪高層設計,以可視化組件及其關系,如下所示:
高層設計的組件
高層設計的目的
這個高層設計(HLD)的目的是:為合適的模型添加必要的詳細描述。這旨在幫助滿足運營需求,并可用作模塊之間交互的參考手冊。
基本上,HLD是功能需求和信息流跨資產或組件的技術表示。
高層設計的特點
- 包含每個設計方面的圖表在所有設計HLD中(基于業務需求和預期結果)。
- 包含硬件、軟件接口以及用戶界面的描述。
- 用戶典型過程的工作流程詳細說明,以及性能規格。
- 項目的架構和設計包含在用戶HLD中。
如何設計可擴展的高層設計(HLD)系統
為了設計任何高層次系統,需要按照順序列出某些術語,以便連接各個方面以了解:
如何設計可擴展的高層設計(HLD)系統
1. 容量估算
在本文中,我們將研究我們需要在高層次設計中掌握的概念,因此我們將提出一條路線圖。對于專業人士來說,路線圖尤為重要,因為這些圖表幫助我們完全理解實時服務在高層次上如何擴展。
我們還展示了服務器的特征行為,通過吞吐量和延遲在系統內進行測量,如下所示:
通過并發比較吞吐量和延遲:服務器的行為
2. HTTP和HTTPS及其方法:
- GET
- PUT
- POST
提示:從服務器發送數據給客戶端有兩種方式:
- 使用 Websockets
- 使用輪詢
3. Websockets:
在客戶端-服務器架構中,我們向服務器發送請求,服務器將其發送回來,這樣通信就發生了。但是,在設計系統時,我們面臨的最大問題是我們是否能夠實現客戶端-服務器模型,因為我們不能等待服務器響應。在這種情況下,Websockets扮演了至關重要的角色,解決了這些問題,使我們能夠進行實時通信。它們在幾乎每個需要設計的系統中被廣泛使用,因為我們不能讓我們的系統等待響應。考慮一個實時文本消息服務的例子,例如 Slack 和 Whatsapp,這些服務需要保持連接。
另外,在返回動態值的系統中也會使用,例如股票價格系統、食品和雜貨送貨系統,在這些系統中我們返回的是從賣家到消費者的實時產品信息。
4. 輪詢:
輪詢是一種從服務器發送和接收數據的技術,就像我們在 Websockets 中所做的一樣。輪詢有兩種類型,分別是長輪詢和短輪詢。在短輪詢中,客戶端發送請求。
短輪詢與長輪詢
在短輪詢中,客戶端發送請求,服務器會立即按固定間隔發送數據,無論數據是否更新。在長輪詢中,服務器等待客戶端請求以響應,并且僅在有新數據可用或數據更新時才會響應。在長輪詢中,客戶端發送請求,如果沒有新信息可用或數據未更新,服務器將等待而不會響應。
提示:長輪詢優于短輪詢,因為系統發送的請求更少。 在設計系統時,請考慮如果沒有客戶端發出請求,服務器會發生什么。
5. 服務器發送事件(SSE):
它是專門從服務器向客戶端進行單向通信的設計系統中的一種方式。
例子:實時流媒體
服務器發送事件(SSE)
6. 過濾
控制室 API 支持對返回數組資源的端點進行過濾、分頁和排序。
過濾機制可以過濾所需的資源,排序機制將資源排序,并且分頁機制然后返回這些排序過的資源的特定范圍。此主題為您提供有關過濾和排序 API 請求結果以及處理從 API 請求返回的大型結果集的分頁的詳細信息。
注意:排序和過濾支持子字符串。例如,如果要搜索名稱中具有 "fin" 的機器人或文件,則輸入 "fin" 作為搜索條件。將顯示所有名稱中包含 "fin" 的機器人和文件,例如 Finance、Finder、DeltaFinance 和 Dolfin。
通配符不支持搜索和過濾機器人或文件。 過濾允許您對返回的資源集合應用布爾條件,以便將集合子集化為僅對條件為真的那些資源。在控制室 API 過濾中,最基本的操作是將字段與給定值進行比較。可以使用相等比較、范圍比較或邏輯。使用以下運算符將字段與常量值進行比較。
7. 速率限制:
速率限制器限制發送者在一段時間內可以完成的事件數量,限制發送者在一定時間內發送請求的數量。一旦達到閾值限制,進一步的請求將被阻止,如下圖所示:
速率限制
8. 容錯性:
無論我們設計的系統有多好,總是存在硬件問題、軟件問題(例如內存不足)或人為錯誤導致的故障和故障容忍。在這種情況下,我們需要通過以下方式提供韌性:
- 復制
- 冗余
- 可用性
9. 分頁:
在HLD階段,我們不關心代碼,但非常關注數據庫設計,因此我們追蹤數據如何進行。現
在,在設計高層次系統時,分頁的概念進入了角色,我們需要從數據庫中過濾出特定的數據,基于要求,例如地理因素。例如:蘋果公司,它根據地理位置分頁出特定產品。
分頁
分頁是通過 GET 請求實現的,在分頁中有兩個邊界。
10. 日志記錄:
日志文件記錄軟件應用程序中發生的事件的詳細信息。這些詳細信息可能包括微服務、交易、服務操作或對調試事件流有幫助的任何內容。日志記錄對于監視應用程序的流程非常重要。