開篇詞 | 爲什麼你要學習高併發系統設計?

爲什麼要學習高併發系統設計?

在解答“爲什麼要學習高併發系統設計”之前,我想讓你思考幾個問題:
在微博中,明星動輒擁有幾千萬甚至上億的粉絲,你要怎麼保證明星發佈的內容讓粉絲實時地看到呢?
淘寶雙十一,當你和上萬人一起搶購一件性價比超高的衣服時,怎麼保證衣服不會超賣?
春運時我們都會去 12306 訂購火車票,以前在搶票時經常遇到頁面打不開的情況,那麼如果你來設計 12306 系統,要如何保證在千萬人訪問的同時也能支持正常搶票呢?

這些問題是你在設計和實現高併發系統時經常會遇到的痛點問題,都涉及如何在高併發場景下做到高性能和高可用,掌握這些內容,你開發的產品可以爲用戶提供更好的使用體驗,你的技術能力也能有一個質的變化。

高併發系統設計知識,是你獲取大廠 Offer 必不可少的利器
不可否認的是,目前的經濟形勢不好,很多公司(比如阿里、騰訊、今日頭條)一方面在減少招聘的人員數量,另一方面也期望花費了人力成本之後可以給公司帶來更大的價值。那麼對於公司來說,僅僅懂得 CRUD 的程序員就不如有高併發系統設計經驗的程序員有吸引力了。

所以當你去面試時,面試官會要求你有高併發設計經驗,有的面試官會詢問你的系統在遭遇百萬併發時可能有哪些瓶頸點,以及有什麼優化思路等問題,爲的就是檢驗你是否真的瞭解這方面的內容。

那麼進不了大廠,沒有高併發的場景,這些設計的經驗又要從何處來呢?這就是雞生蛋蛋生雞的問題了。我能肯定的是,當你學習這門課程,掌握了這方面的技術之後,大廠的 Offer 將不再遙不可及。

不要囿於公司現有的業務場景,你的能力,絕不止於此

那你可能會說:“我在小公司工作,小公司的系統併發不高,流量也不大,學習高併發系統設計似乎有些多此一舉。”但我想說的是,公司業務流量平穩,並不表示不會遇到一些高併發的需求場景。
就拿電商系統中的下單流程設計技術方案爲例。在每秒只有一次調用的系統中,你只需要關注業務邏輯本身就好了:查詢庫存是否充足,如果充足,就可以到數據庫中生成訂單,成功後鎖定庫存,然後進入支付流程。

這個流程非常清晰,實現也簡單,但如果要做一次秒殺的活動,配合一些運營的推廣,你會發現下單操作的調用量可能達到每秒 10000 次!
0000 次請求同時查詢庫存,是否會把庫存系統拖垮?如果請求全部通過,那麼就要同時生成 10000 次訂單,數據庫能否抗住?如果抗不住,我們要如何做?這些問題都可能出現,並讓之前的方案不再適用,此時你就需要設計新的方案。
除此之外,同樣是緩存的使用,在低併發下你只需要瞭解基本的使用方式,但在高併發場景下你需要關注緩存命中率,如何應對緩存穿透,如何避免雪崩,如何解決緩存一致性等問題,這就增加了設計方案的複雜度,對設計者能力的要求也會更高。所以,爲了避免遇到問題時手忙腳亂,你有必要提前儲備足夠多的高併發知識,從而具備隨時應對可能出現的高併發需求場景的能力。

我身邊有很多在小公司打拼闖蕩,小有建樹的朋友,他們無一不經歷過低谷期,又一一開拓了一片天地,究其原因,是因爲他們沒有將目光放在現有的業務場景中,而是保持着對於新技術的好奇心,時刻關注業界新技術的實現原理,思考如何使用技術來解決業務上的問題。

他們雖然性格很不同,但不甘於現狀,突破自己的信念卻是一致的。我相信,你也一定如此。所以完成業務需求,解決產品問題不應該是你最終的目標,提升技術能力和技術視野才應是你始終不變的追求。

計算機領域裏雖然知識點龐雜,但很多核心思想都是相通的

舉個例子,消息隊列是高併發系統中常見的一種組件,它可以將消息生產方和消費方解耦,減少突發流量對於系統的衝擊。但如果你的系統沒有那麼高的流量,你就永遠不會使用消息隊列了嗎?當然不是。
系統模塊要做到高內聚、低耦合,這是系統的基本設計思想,和是否高併發無關,而消息隊列作爲主要的系統解耦方式,應該是你技術百寶囊中一件不可或缺的制勝法寶。
又比如,緩存技術蘊含的是空間換時間的思想;壓縮體現的是時間換空間的思想;分佈式思想也最初體現在 CPU 的設計和實現上……這些內容,都是高併發系統設計中的內容,而我希望在這個課程中,幫你把握這些核心思想,讓你觸類旁通,舉一反三。
所以,高併發系統設計無論是對於初入職場的工程師瞭解基本系統設計思想,還是對於有一定工作經驗的同學完善自身技能樹,爲未來可能遇見的系統問題做好技術儲備,都有很大的幫助。
也許你會擔心知識點不成體系;擔心只講理論,沒有實際的場景;擔心只有空洞的介紹,沒有乾貨。放心!我同樣考慮了這些問題並在反覆思考之後,決定以一個虛擬的系統爲主線,講解在流量和併發不斷提升的情況下如何一步步地優化它,並在這個過程中穿插着講解知識點,這樣通過場景、原理、實踐相結合的方式,來幫助你更快、更深入地理解和消化。
總體來說,學完這次課程,你會有三個收穫:

掌握高併發系統設計的“套路”;
理解基本的系統設計思想,對新的知識觸類旁通,舉一反三;
突破技術的瓶頸,突破所處平臺的限制,具備一個優秀架構師的資質。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章