請不要評頭論足, 給出實際的建議好嗎?
回複內容:
這個問題完全可以重新導向到如何處理高並發業務情境.
以下只是我工作一年多接觸到的一些基礎,也許有偏差,要具備高並發的經驗確實需要有實際項目,因為商務邏輯其實很容易理清,但是要在高並發的情況下如何找到業務繁忙的熱點並進行最佳化,完全只能憑經驗.
假如沒有靠譜的公司,接觸不到高並發的業務情境怎麼辦?
從處理技巧上,可以通過大牛學習高並發的架構,比如張宴:張宴的部落格 - Web系統架構與底層研發
.至少你可以知道處理高並發的商務邏輯是:
- 前端:非同步請求+資源靜態化+cdn
- 後端:請求隊列+輪詢分發+負載平衡+共用快取
- 資料層:redis緩衝+資料分表+寫隊列
- 儲存:raid陣列+熱備
- 網路:dns輪詢+DDOS攻擊防護
對於高並發並沒有什麼通用解決方案,必鬚根據業務情境進行分析,不同的業務情境對於架構的取捨是不一樣的.但萬變不離其宗,掌握這些處理高並發的分析方法還是很有必要的.
如何學習高並發的工具?
處理高並發的開源輪子其實很多.很多高並發的架構分享都會提及使用的工具,自己多留心,再看看手冊,有條件自己搭起來跑一跑.
redis,nginx/Tengine,keeplive,DRBD,heartbeat這些小工具還是可以在虛擬機器上面多開幾台跑起來的.至於大業務情境,除了進大公司沒有別的辦法,因為有些工具啟動並執行配置要求太高,必須多台伺服器配合才能完成.
如何類比高並發情境?
並不是只有實際生產環境才能測試高並發,其實類比高並發的輪子也很多,最常用的apache benchmark,winrunner,loadrunner,這些教程很多,用來類比基本的高並發業務綽綽有餘,自己安裝試用版,學學如何用,類比些常用的業務.
如果有精力,業內很喜歡用perl,python,C來寫一些針對熱點業務的負載指令碼.這需要有http協議等網路封包的理論基礎.
一些建議
處理高並發要學習的東西實在太多.要在沒有實際工作經驗的情況下逐一瞭解太難,也很難深入.對於高並發的學習,我建議除了多閱讀高並發架構的文檔學習基本的方法論以外,自己要去深入學習網路基礎,資料結構和演算法.這些都是處理高並發熱點的理論基礎.學曆的重要性就體現出來了,
PHP的重頭是解決實際問題,
但是如果你進不了靠譜的公司,你永遠解決的是小問題,工作10年技術也未必提升多少。沒有實戰環境,只能空談理論、應付面試。
接觸不到實際項目和環境,你永遠沒有這方面的"經驗"。沒有經驗就沒有靠譜的公司收,沒有靠譜的公司也就沒有經驗,我看了無數的書,自己做了無數的實驗拚命想找個靠譜公司去深入,但是感覺好難,簡直是個死迴圈