iT邦幫忙

2024 iThome 鐵人賽

DAY 30
0

PART 4 面試技巧:展現最好的自己

鐵人賽-30Days-P4

D31-不同職業的技術面試題-DevOps-SRE工程師(2)

章節目標

快速了解 DevOps-SRE工程師 技術面試問題與核心能力

D31-不同職業的技術面試題-DevOps-SRE工程師(2)

今天的文章專注在DevOps-SRE工程師的第二個問題,來到比較難的 系統設計

Q2.【系統設計】建構從零到百萬人數規模的系統

  • 主考官的目的:設計一個能夠支持從零到百萬人數規模的系統,是每個DevOps或SRE工程師都需要掌握的技能,測試你對雲端服務設計、配置的深度理解,這是一道非常具挑戰性的考題
  • 準備方式:系統設計考題較難準備,建議整理過往工作經驗中複雜系統的實例以及經典的雲端架構,列出當時如何執行的方式作為參考。
  • 參考標準:設計一個能夠支持從零到百萬人數規模的系統,我們應該先切成下列幾個階段來分析,參考下面的答案

1. 單體架構-單一伺服器的架構設計與配置 (RPS, request per second 0-10)

千里之行,始於足下。讓我們先從最簡單的開始。

在這種架構下,所有的元件包括Web伺服器、資料庫和快取,都執行在 同一個虛擬機器 內。這種架構適合在服務剛開發、使用者數量較少的初期階段,以 最低的成本達到最高的效益

單體架構-單一伺服器的架構設計與配置

2. 單體架構-多台伺服器架構圖 (RPS, request per second 10-20)

隨著使用者數量增加,單一伺服器可能無法滿足需求,這時需要 擴展為多台伺服器的架構

首先,我們會將一台伺服器作為Web伺服器,負責處理API流量(Web 層),另一台伺服器則作為資料庫伺服器(資料層)。透過這樣的分層架構,每台伺服器負責不同的功能,後續可以獨立擴展每個層級的伺服器,以應對更高的流量需求。

單體架構-多台伺服器架構圖

3. 高可用架構- Web層水平擴展的架構設計與配置 (RPS, request per second 50+)

隨著使用者增多,我們可以將原先的單體架構升級為 高可用架構(High Available)

首先為了對Web層進行水平擴展,我們會使用負載平衡器(Load Balancer)來分配流量,使多個Web伺服器可以動態擴展以應對不同的流量需求。

關鍵技術

  • 負載平衡器(load balancer):負載平衡器將進入的網路流量分配到多個後端伺服器上,確保每個伺服器承受的流量均衡,避免單一伺服器過載。
  • 水平擴展:web層水平擴展,會動態將web伺服器數目增加,以應付更多負載平衡器的流量請求。

高可用架構- Web層水平擴展的架構設計與配置

4. 高可用架構-資料層的水平擴展的架構設計與配置 (RPS, request per second 200+)

隨著流量增加, 單一資料庫 可能無法滿足Web層的存取需求,因此我們需要對資料層進行 水平擴展

我們採用 資料庫複寫的主從架構 (Master-Slave),寫入和更新操作只寫到主資料庫(Master),然後主資料庫將資料複製到從資料庫(Slave),讀取操作則從從資料庫進行。這樣可以有效地分散讀寫負載,達成資料庫的擴展。

在高流量情況下,可能會有 二十幾個以上的虛擬機器 同時對資料庫進行請求。雖然 資料庫的垂直擴展 可以透過增加CPU和記憶體來提升效能,但這種方式最終會達到硬體的極限。此時,我們需要透過水平擴展來增加資料庫的容量,主從架構是其中一種有效的方案。

關鍵技術

  • 資料庫複寫的主從架構:水平擴展方法,它通過將數據從主資料庫(Master)複製到一個或多個從資料庫(Slave),使資料庫具備讀寫分離的能力。
  • 資料庫的垂直擴展:增加單一伺服器的硬體資源(如增加 CPU、內存、硬碟等)來提高資料庫的效能。

高可用架構-資料層的水平擴展的架構設計與配置

5. 高可用架構-快取與CDN 的架構設計與配置 (RPS, request per second 200+)

快取與CDN 是提升回應速度和用戶體驗的常用手段,這兩部分都需要設置 生命週期(TTL) 來確保資料及時刷新。

在實際應用中,不一定需要按照特定的水平擴展順序導入快取和CDN。根據具體情況,有時可以先引入快取或CDN來降低系統負擔和執行成本。最重要的是根據實際需求靈活應用,沒有標準答案。

關鍵技術

  • 快取(cache):快取是一個臨時的儲存區域,可以暫存高頻存取的資料,減少對資料庫的直接訪問,從而加快後續的處理速度。我們通常使用Redis集群作為快取層,減輕資料庫的讀寫負擔,提升系統效能。
  • 內容傳遞網路(CDN):CDN是一種分布式的網路,可以在全球各地提供靜態資源,如圖片和影片。使用CDN來傳遞不會經常變動的內容,可以降低Web伺服器的負擔,並提高全球用戶的訪問速度

高可用架構-快取與CDN的架構設計與配置

6. 高可用架構-多區域資料中心的架構設計與配置 (RPS, request per second 500+)

這種架構適用於需要服務 全球用戶 的應用。通常,我們會在亞洲、美洲和歐洲建立資料中心,確保三大洲的使用者都能獲得最佳體驗。如果某個資料中心發生重大故障,我們會將流量導向可以正常運作的資料中心,以提供備援。

在設計高可用架構時,關鍵是確保 無狀態的Web伺服器層 ,這樣才能實現水平擴展。 GeoDNS地理路由設計 能有效地將流量導向多個區域中心,而多區域部署則能確保全球用戶獲得最佳的服務體驗。定期檢查各資料中心的健康狀況,並確保有完善的 故障轉移機制 ,是保持高可用性的核心策略。

關鍵技術

  • 無狀態網路層:確保所有Web伺服器都是無狀態的,這樣可以進行水平擴展而不會有狀態的差異。
  • 多區域資料中心:根據不同國家的使用者需求,部署多區域資料中心,確保用戶能夠就近存取資源,降低延遲(latency )。
  • GeoDNS地理路由:利用地理路由技術,將不同國家的使用者導向最近的資料中心,進一步降低延遲,提高效能。

高可用架構-多區域資料中心的架構設計與配置

應用場景 - 高可用架構-多區域資料中心的架構設計與配置

假設你是 麥當勞的DevOps工程師 ,你需要考慮全球各地麥當勞服務的可用性,以及 不同時區尖峰和離峰訂餐需求

高可用性架構需要隨著不同的商業邏輯進行調整,以滿足各地用戶的需求。

7. 高可用架構-訊息序列的架構設計與配置 (RPS, request per second 500+)

隨著流量不斷增加,我們會遇到 大量請求無法即時處理 的情況,需要先將請求寫入一個緩衝區,再由對應的工作程序逐步消化。

這就像在Costco 或商店裡,很多客戶同時結帳,但收銀員無法立即服務每個人,這時客戶會排隊,等待逐一處理。 訊息序列(Message Queue ) 正是扮演這樣的角色,讓請求排隊,然後由工作程序逐漸消化。

關鍵技術:訊息序列的應用

  • 緩衝區:訊息序列作為緩衝區,負責發放各種非同步請求。
  • 生產者-消費者模型:我們使用生產者-消費者模型,生產者將訊息發送到序列中,消費者負責處理這些訊息。這種模型具有解耦的效果,使應用程序更具可擴展性和可靠性。

關鍵技術:複雜系統的監控與日誌記錄

在大型系統中,通常會支援 日誌記錄衡量指標的監控CICD自動化 。這些工具能幫助監控系統效能,提升生產力,並持續整合和確認生產環境的狀況。管理者可以利用各種雲端工具來了解系統的狀態,通常我們會分成兩個層面的監控:

  • 系統層級監控:監控各種資源的使用情況,如CPU和記憶體的使用量是否超過限度。
  • 應用層級監控:監控應用的執行狀況,例如:API的4xx錯誤數量是否過多,以檢測應用問題。

這些設計的最終目標是管理龐大而複雜的系統,維持服務的穩定性與高可用性。

高可用架構-訊息序列的架構設計與配置

應用場景 - 高可用架構-訊息序列的架構設計與配置

假設你管理一個擁有 六億會員的全球應用 ,這些會員的購物車操作和結帳刷卡等行為會產生大量請求。為了應對這些請求,我們需要使用訊息序列來建構各個微服務,確保系統的穩定性和可擴展性。

更多系統設計的思考

在這個系統設計的考題中,我們介紹了由淺入深的7種伺服器架構。隨著應用使用人數的增加與請求量的不同量級,進一步還可以進行 資料庫分片

考題重點在於隨著應用複雜度的提升,必須具備足夠的知識來設計 更高效、更低成本的系統架構 ,同時能夠靈活應用在雲端環境中,以應對現實中的各種商業邏輯。

以下是提供一些關鍵點,幫助大家研究如何在高可用性的擴展中進行設計,從而提高複雜系統的可用度:

  • 思考百萬級使用者:設計能夠支持大量同時使用者的系統架構。
  • 無狀態Web伺服器:保持Web應用無狀態,以便於水平擴展。
  • 冗餘設計:在每一層都保留一定的冗餘資源,以防止單點故障。
  • 快取:儘可能多地快取常用資料,減少對後端系統的壓力。
  • 多資料中心:在多個資料中心區域部署系統,以提高可用性和降低延遲。
  • CDN:使用CDN託管靜態資料,提高全球用戶的訪問速度。
  • 資料分片:利用資料分片技術,擴展資料庫的處理能力。
  • 服務拆分:將各層切分成單獨的微服務,增加靈活性和可維護性。
  • 監控與自動化:監控系統效能,善用自動化工具,以提升效率。

本日總結

謝謝你努力到現在,技術面試的文章真的是很硬,有努力看完請給自己一個讚!

第31天的文章,我們專注於了解 Q2.【系統設計】建構從零到百萬人數規模的系統。 ,這個系統設計題目非常硬喔!目前面試經驗中,沒有遇到幾個面試者能夠融會貫通現有知識並回答得出來,這樣等級的系統設計題目需要深厚的功力。不同類型系統設計問題,可以知道你是否了解如何設計符合企業當下的雲端架構系統,並根據業務邏輯來進行優化。這種問題真的是台上10分鐘,台下10年功!

  • 如果文章的技術面試都能夠回答得非常好,恭喜你!你的功力非常深厚,可以持續邁進!
  • 如果文章的技術面試沒有太過理解,沒事的,現在開始努力都來得及!繼續看下去提升你的實力!

DevOps/SRE工程師的技術面試,需要更多針對雲端技術知識和實踐經驗,並且能夠設計和維運高效的企業系統,如同前面說明的核心能力。最後再藉由工作經驗的提升,逐漸在往雲端架構師或是資安專家等進階工種邁進!

  • 雲端服務知識:熟悉至少一個主要雲端服務平台(如AWS、GCP、Azure)的管理控制台和核心服務(如計算、儲存、網路、資料庫)。除了能夠設置和管理雲端基礎設施,還可以運用更多系統設計概念,確保其高可用性和擴展性。
  • 操作系統管理:熟練操作和管理Linux和Windows作業系統,能夠進行系統安裝、配置、管理和故障排除。能夠在雲端環境中管理和優化虛擬機和容器。
  • 持續交付與自動化:設計和實施持續交付(CI/CD)流水線(pipeline),確保軟體能夠快速且可靠地部署到生產環境。使用自動化工具(如Jenkins、GitLab CI、Terraform、Ansible )進行配置管理和基礎設施自動化。
  • 安全控制與合規:實施並自動化安全控制、治理流程和合規驗證,管理雲端環境中的身分和訪問管理(IAM)策略,確保符合安全合規要求。定期進行安全審計和風險評估,確保系統和資料的安全性。
  • 系統監控與故障排除:定義和部署監控、指標和日誌系統(如Prometheus、Grafana、ELK Stack ),監控系統效能和可用性。能夠快速識別和解決系統故障,確保服務的穩定執行。
  • 高可用性與可擴展性:設計和實施高可用性、可擴展和自我修復的系統架構,使用負載均衡(Load balancing)和自動縮放(Auto Scaling)技術來優化系統效能。確保系統在高負載情況下的穩定性和響應能力。
  • 自動化營運流程:設計、管理和維護自動化營運流程,確保營運效率和系統穩定性。使用自動化工具和腳本(如Python、Bash)來簡化重複性任務和流程。
  • 業務連續性與災難恢復:設計並執行業務連續性和災難恢復計畫,確保資料和服務的持續性和可恢復性。使用快照、備份和多區域部署等技術來保障業務連續性。
  • 網站可靠性工程實踐(SRE) :將網站可靠性工程實踐應用於服務,實施服務監控策略,優化服務效能,並確保系統的可靠性和可用性。定期進行效能測試和容量規劃,確保系統能夠應對未來的需求增長。

參考資料

  1. AWS的領導力原則(AWS Leadership Principles)
  2. 面試必問10大難題懶人包,面試前看這篇就夠!面試官帶你精闢破解
  3. 面試問題詳解!13道常見問題回答技巧及提問,AI面試練習這樣做
  4. 內行人才知道的系統設計面試指南
  5. 給全端工程師的職涯生存筆記:從「履歷×面試×職場」打造無可取代的軟實力
  6. ByteByteGo Newsletter系統架構學習
  7. AWS Architecture Center
  8. GCP Cloud Architecture Center

其他連結

有問題歡迎留言,看到立馬解答


上一篇
D30-不同職業的技術面試題-DevOps-SRE工程師(1)
下一篇
D32-職場之路:職場走過的人生觀
系列文
翻轉職涯!雲端  / DevOps / SRE工程師轉職必殺技:四大步驟帶你找出職能優勢、成功精準轉職的規劃指南32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言