現代系統設計介紹 – 系統設計 01

system-design-系統設計-系統設計介紹-hogantech-hoganblab

前言

系統設計一直是我很想要熟讀的知識,也是我之前準備面試時,花了不少時間準備的部分。因此也決定在 2024 年,花一些時間來去做學習以及紀錄,也希望產生一系列淺顯易懂的文章,讓任何對系統設計有興趣的讀者,有一些幫助。

什麼是系統設計(System Design)?

系統設計是一個定義各種系統元件、API、資料模型以及整合系統的過程,用來完成一定功能要求的大規模系統。以設計一個像Youtube這樣的視頻播放平台為例,我們不僅需要考慮如何高效地儲存和傳輸大量視頻數據,還要考慮如何支持高並發(High Concurrency)的使用者需求,以及如何保證系統的穩定性和可擴展性。

系統設計的挑戰在於它需要涉獵廣泛的知識領域,包括但不限於網際網路技術、平行處理技術、分散式系統原理、資料庫管理、軟體開發流程等。這些知識的結合使用,使得設計者能夠創建出既大型又穩定,且具有良好擴充性和容錯能力的系統。分散式系統的複雜性特別高,但透過系統設計的相關規範和知識,我們可以更好地管理這種複雜性,從而有效地實現系統目標。

系統設計通常會圍繞在以下特性,分別是可靠性、有效性、可維護性:

可靠性(Reliable)

一個可靠的系統能夠在面對錯誤、故障或崩潰時,依然保持正常運行。

有效性(Effective)

有效性意味著系統能夠滿足所有商業需求和用戶期望。

可維護性(Maintainable)

可維護性則確保系統易於管理,且能靈活地擴展或縮小,便於添加新功能。

系統元件(Building Block)

我們通常會不同的系統設計元件抽離出來,並針對不同功能的元件組合,最終建構一個軟體系統。例如:負載平衡器(Load Balancer)、資料庫(Database)。這樣分離元件的好處是,我們可以單純針對問題去思考究竟要哪些元件,才能建構出符合需求的軟體系統。再者,如果需要針對系統流量以及規模去進行擴充,我們也可以針對每一個元件去做細部的探討。

誰適合這個系列的文章?

這個系列希望給以下的讀者做閱讀,如果是完全沒有接觸程式以及軟體的讀者,比較會建議追蹤 Instagram ,上面有更基礎的圖文知識。

軟體開發者

系統設計通常資深工程師、架構師、首席工程師的面試題目。系統設計的題目牽扯的範圍是非常廣泛的,不管是前端工程師、後端工程師、全端工程師、維運工程師,都是在一個軟體系統裡面,負責特定的區塊。因此如果想要更全面了解軟體系統,則必需要了解系統設計。

系統設計學習者

系統設計是一個有趣的主題,大家都可以在系統設計的學習過程中,更深入了解軟體技術領域。並且也可以透過一些實際的例子,來了解大公司都是如何從零開始設計並架構起一個軟體系統,並且隨著時間的演進,擴充軟體系統的規模。

面試準備者

前面已有提到,系統設計是很多科技公司針對常資深工程師、架構師、首席工程師的面試題目,因此對於那些準備參加科技公司面試的軟體工程師來說,系統設計往往是面試中的一個重要環節。通過學習系統設計,可以更好地準備面試,提高通過面試的機會。

系列文章預計講解

此系列我會分成幾個不同的部分做講解,分別是系統設計概念、系統設計元件、系統設計問題:

設計概念

在實際講解系統設計之前,我們必須要講解系統設計的概念以及理論,包含常見的 CAP 理論、計算系統流量的方法、系統設計抽象的概念。當有這些前置概念,才會讓讀者更清楚為何會有系統設計的誕生。

系統設計元件(Building Block)

在系統設計元件篇章中,我將根據常見的系統設計元件,去做講解。包括系統設計中的基本元件,每個元件都將是幾個獨立文章中進行詳細解釋。這一部分不僅可以幫助我們了解更多不同的系統設計元件,也會幫助我們了解更多軟體應用。

系統設計問題

這部分是系列文章核心,專注於解決實際的系統設計問題。這邊會提供並且講解一些不同的軟體設計問題,每一種系統設計問題,都會涵蓋從資料處理到用戶界面設計的廣泛主題。透過這些問題,讀者將有機會將理論知識應用於實際情境中,並學習如何設計可擴展、高效能和可靠的系統。

其他文章參考

2023 Yahoo! Software Engineer 軟體工程師面試心得

Web Beacon 網路信標是什麼?除了 Cookie 以外,你需要了解的工具

為何大公司都使用Nx ? Monorepo工具 5 分鐘快速建置

你真的懂Monorepo? 5 分鐘帶你認識前端大型架構

Zustand 是什麼? React 前端狀態管理

zh_TW繁體中文