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