怎樣學習才能擁有所謂「高並發」的經驗?
01-26
請不要評頭論足, 給出實際的建議好嗎?
這個問題完全可以重定向到如何處理高並發業務場景.
以下只是我工作一年多接觸到的一些基礎,也許有偏差,要具備高並發的經驗確實需要有實際項目,因為業務邏輯其實很容易理清,但是要在高並發的情況下如何找到業務繁忙的熱點並進行優化,完全只能憑經驗.假如沒有靠譜的公司,接觸不到高並發的業務場景怎麼辦?
從處理技巧上,可以通過大牛學習高並發的架構,比如張宴:張宴的博客 - Web系統架構與底層研發.至少你可以知道處理高並發的業務邏輯是:- 前端:非同步請求+資源靜態化+cdn
- 後端:請求隊列+輪詢分發+負載均衡+共享緩存
- 數據層:redis緩存+數據分表+寫隊列
- 存儲:raid陣列+熱備
- 網路:dns輪詢+DDOS攻擊防護
對於高並發並沒有什麼通用解決方案,必須根據業務場景進行分析,不同的業務場景對於架構的取捨是不一樣的.但萬變不離其宗,掌握這些處理高並發的分析方法還是很有必要的.
如何學習高並發的工具?
處理高並發的開源輪子其實很多.很多高並發的架構分享都會提及使用的工具,自己多留心,再看看手冊,有條件自己搭起來跑一跑.redis,nginx/Tengine,keeplive,DRBD,heartbeat這些小工具還是可以在虛擬機上面多開幾台跑起來的.至於大業務場景,除了進大公司沒有別的辦法,因為有些工具運行的配置要求太高,必須多台伺服器配合才能完成.如何模擬高並發場景?
並不是只有實際生產環境才能測試高並發,其實模擬高並發的輪子也很多,最常用的apache benchmark,winrunner,loadrunner,這些教程很多,用來模擬基本的高並發業務綽綽有餘,自己安裝試用版,學學如何用,模擬些常用的業務.如果有精力,業內很喜歡用perl,python,C來寫一些針對熱點業務的負載腳本.這需要有http協議等網路封包的理論基礎.
一些建議處理高並發要學習的東西實在太多.要在沒有實際工作經驗的情況下逐一了解太難,也很難深入.對於高並發的學習,我建議除了多閱讀高並發架構的文檔學習基本的方法論以外,自己要去深入學習網路基礎,數據結構和演算法.這些都是處理高並發熱點的理論基礎.沒有經驗就沒有靠譜的公司收,沒有靠譜的公司也就沒有經驗,我看了無數的書,自己做了無數的實驗拚命想找個靠譜公司去深入,但是感覺好難,簡直是個死循環
學歷的重要性就體現出來了,
PHP的重頭是解決實際問題,
但是如果你進不了靠譜的公司,你永遠解決的是小問題,工作10年技術也未必提升多少。如果實在學歷問題沒有靠譜公司收,初期只能押寶,找一個創業公司或者小公司,那種很小的,看準公司可以一兩年內有一定流量(日均百萬左右PV,峰值QPS還不一定高),然後這種規模你會接觸擴容這個問題,從單點到擴容不管是存儲還是計算其實都會產生很多問題出來。從2到100遠沒有從1到2所要做的事情多。關鍵還是意識,我身邊有資深互聯網公司核心團隊工程師從來不關心性能問題的,有BAT從來不考慮SLA的,也有5個工程師的公司天天面臨性能和安全問題的。有的公司從0流量的時候資料庫就是一主一從。
現在只要還是面向C端的互聯網公司(哪怕很小),都會有流量的,老闆比你更著急這個事情。
gearman,workerman,rabbitmq最近對這個3個東西感興趣,但是對於他們的使用還是有點混亂,搞不清楚清楚何時啟用比較合適,所以想問一下,這3個工具分別對應以下的哪個節點來使用?
- 後端:請求隊列+輪詢分發+負載均衡+共享緩存
- 數據層:redis緩存+數據分表+寫隊列
感覺這東西沒那麼玄乎 1台不夠 加10台夠不夠 10台不夠 50台 還不夠也沒事 這個時候團隊里應該有能人了 跟著學
推薦閱讀:
※PHP 浮點型與整型比較的小坑
※檢測 PHP 應用的代碼複雜度
※手把手編寫自己的 PHP MVC 框架實例教程
※如何在Mac上優雅的開發PHP項目?
※如何看待Facebook 的 HHVM 引擎將轉用 Hack 語言?