search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

教你如何hold住架構設計

「人們本可以控制自己的命運,如果我們失去了控制,那錯的不在命運,而在於我們自己」 ――莎士比亞

一名優秀的架構師, 應該主動地掌控服務的演進 ,運行的每個邏輯都經過仔細設計,系統每個模塊的運行結果都在預料之內,並時刻準備好應對內部外部各式各樣的異常和變化。想要成為優秀的架構師,需要掌握「一切盡在控制」的理念。

這裡的一切都包含哪些:

  • 核心業務進程的cpu佔用是多少?

  • Qps能夠達到多少?

  • 超時比例是多少?

  • 使用帶寬是多少?

  • 系統瓶頸在什麼地方?

  • cache命中率範圍是多少?

  • …….

在設計階段,架構師就必須對這些問題的答案瞭然於胸。

下面從幾個維度來下詳細分析一下「一切」包含的內容:

從功能到架構

從功能設計開始,明確需求優先順序和問題邊界,確定主要功能模塊與核心業務流程,滿足業務功能需求。然後設計滿足各項工程及運營需求的系統架構,這些需求通常包括:處理能力(QPS、Timeout、容量等)、伸縮性、容錯性、擴展性、安全性等等很多非功能性需求。

這裡的每一項都有很大的挑戰,任何一項的失控都可能導致嚴重的後果。在互聯網服務裡面,對性能不可控的結果是災難性的;不良的伸縮性會導致服務的運營異常艱難;容錯性的失控就像服務的黑洞,黑天鵝事件的產生。

從測試性能到掌控性能

任何系統的性能是設計出來的,不是嘗試出來的。我們在設計、實現一個系統時,在動手之前就應該大概知道系統的性能容量是多少,而不是等壓測。Google資深架構師Jeff. Dean這樣描述過:

Important skill: ability to estimate performance of a system design without actually having to build it!

這一點需要架構師對整個系統各個層面有深刻而精確的認識。對於系統內部或系統所依賴的每個組件、模塊或外部系統,要知其所以然。對於整個系統的認識,不僅是定性而且要定量,應該知道某個函數的操作步驟,性能大概是什麼情況,磁碟的隨機讀寫性能,內存順序讀性能,網路通信帶寬等每個環節。

在架構設計階段,通過軟體和硬體的詳細參數,在系統設計時就已經可以確定如何實現,需要什麼樣的硬體支撐,大概能夠服務多少用戶等。不需要實現,架構師就可以模擬出運行時的場景,比如:負載均衡需要8台機器,每台機器cpu佔用大約50%,內存使用約80%,包量40K/s,流量300Mbps等等。

從正常到異常

在異常情況下,是很容易出現失控的地方,比如雪崩問題,1230購票系統,當用戶刷新沒有票的時候會不停的刷新,導致後台的服務突然增加,當負載超過正常的系統性能容量時,雪崩效應產生了,整個系統的可用性就崩潰了。

當系統在「非正常狀況下」運行時,架構師應當讓整個系統還是在控制下運行,而不是隨機的、無序的。比如我們可以有目的的優先保證忠實用戶的使用情況,做到逐步有損服務。

容錯的設計是必備的,對於一個服務系統來說,絕大部分的異常都應是常態。在做系統設計時,首先要能考慮到所有的非正常情況,進而分析后確定架構方案應該cover的範圍和程度。

具體如何實現容災我們這裡不做詳細分析,簡單的比如:機房容災、用戶優先順序、有損服務等。

從單機到集群

海量互聯網服務系統是分散式系統技術的一類典型應用。

在集群環境下,很多資源訪問都變成遠程訪問,丟包、延時等問題造成訪問不可靠因素大大增加,同步訪問也更多地替換為非同步處理,數據需要分割到多台的機器分散式存儲和訪問,這些都增加了系統的複雜性,要求架構師不能只以傳統的軟體設計模式思考,更多地要考慮box之間的交互與關係。

從系統到服務

提供的是服務而不是軟體或系統,這一點是每個架構師應該牢記於心的。決定系統優劣的永遠是它能最終提供給用戶什麼質量的服務。

優質的服務包括兩個方面:

有效的功能,良好的體驗;很高可用性、高性能等。

這兩個方面都是優質服務的組成部分,猶如一個人的左右手,他們是不應該產生PK的。當系統出現問題時,我們第一時間應該保證服務的正常運行,比如回滾系統等,而不是糾結於具體的問題和錯誤。

那麼如何才能真正做到「可控」呢?這裡談幾點核心要素:

盡量簡單

之前的文章裡面也提到過,系統盡量簡單,簡單是對系統控制能力的保證。一個系統越是複雜意味著越難以控制。Keep It Simple and Stupid,是無數系統設計哲學中都反覆提到的一條經典原則。

對於那些難以避免的複雜性,通過一些方法也可以降低系統複雜度。複雜的系統可以通過分層、分模塊的方式將其分解成關係清晰、松耦合的子系統,使得每個子系統的相對簡單可控,這樣整體的複雜性就大大降低了。還有複雜性隔離,將複雜的邏輯隔離在一個儘可能小的範圍內,提供簡單的介面以與外部解耦,從而防止複雜性擴散等等。

精確地把控

架構師對系統的控制能力很大程度上依賴於其對系統從上層到底層的深刻認識,並且這種認識不是定性的、模糊的,而是定量的、精確的。前面也有提到過。

完備地設計

可控的另一個重要因素,在於架構師考慮問題的完備性和嚴謹性。在設計一個問題解決方案時,如何保證能應對問題的各種情況,任何的疏漏都有可能導致最後服務的失控。前面提到的雪崩問題就是典型的設計完備性上的缺陷。

互聯網不缺人,缺的是人才,高端java架構工程師!

做IT人的之路明燈,職場生涯的精神倒是。這樣一個平台猶如海上的燈塔,讓迷茫和無助的你找到努力的方向和提高自己的平台

1、具有1-5工作經驗的,面對目前流行的技術不知從何下手,需要突破技術瓶頸的可以加群。

2、在公司待久了,過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的可以加群。

3、如果沒有工作經驗,但基礎非常紮實,對java工作機制,常用設計思想,常用java開發框架掌握熟練的,可以加群。

4、覺得自己很牛B,一般需求都能搞定。但是所學的知識點沒有系統化,很難在技術領域繼續突破的可以加群。

5. 群號:高級架構群 283943715 備註好信息!做IT人的之路明燈,職場生涯的精神導師。

6.阿里Java高級大牛直播講解知識點,分享知識,多年工作經驗的梳理和總結,帶著大家全面、科學地建立自己的技術體系和技術認知!



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦