私房菜 第三講 雜記高負載

2021-05-11 13:30:37 字數 2725 閱讀 7337

私房菜 第三講 雜記高負載

最近很多人在提高併發,高負載,這個問題好像一下子,變得萬分神秘,而且成為了,很多大公司的必須問你的問題,

如果你告訴他,我沒做過高併發的,他立馬問你,那你說說你做過多少pv的專案吧,或者直接問你這個。

當你聽到這個問題的時候,萬分汗顏,我做過最多的是 100w pv這個量級,那些大公司的員工,脫口而且,幾千萬吧,

這個問題多嚴峻,乙個小公司的員工從此比那個大公司的員工,差了乙個級別。

可以,問的人是否想過,乙個人對於pv與高併發的判斷,是要看後面的硬體平台而論的,如果幾千臺機器,

你做了那麼些pv是否值得驕傲呢,那樣的硬體平台你是否可以順利的搭建起來,各種技術細節是否可以掌控呢?

這個要看個人的能力了,如果小公司的員工,給他環境,他也會上進的弄明白這個乙個系列的問題,其實這個問題

很極端,做系統架構的人,一定會把系統做的很靈活,讓使用的人,最少的操作得到最大的效能,而程式架構的人

一定想辦法,在程式架構上面,就去規避掉各種情況,最後通過配置檔案的修改,來實現各種部署,而最終的程式設計師

根本沒機會,知道這些的不同,所以無論你在什麼樣的公司上班,記本上很難知道哪些煩亂的硬體知識,除非用心的挖掘。

我現在來做乙個硬體的架構圖,首先宣告,我沒做過 千萬級別的pv。

高併發如何處理?

這個問題,問的太精妙了,不提任何的需求,直接把這個東西扔給你,如果你不去圈定詳細的使用範圍,無論你怎麼回答都是錯誤的,呵呵。

其實大家去做面試也會扔出這樣的問題,你的目的不是讓他給你滿意的答案,而且另有想法。

首頁,單台機器的效能無論多優秀,都不能抗住所有的pv,而web開發,併發一定來自於,高pv,或者詳細的說是單台機器的pv高,造就了高併發,

這樣的情況,你無論在單台機器上怎麼優化都不可能,解決問題,因為高併發,並沒有告訴你,是什麼瓶頸,而且沒說到了什麼程度,所以,我們能做的就是

增加伺服器,然後呢,就是負載均衡。這個是第乙個點,採用負載均衡,只有2種情況,一種硬體,一種軟體,硬體裝置我們不提了常用的就是f5.

軟體解決,採用nginx,或者dns輪播,或者其他。這個完全看側重點。

現在除了問題,比如session怎麼辦,快取怎麼辦?

是啊,太可怕了,那樣我們加上一台cache伺服器,來解決這個問題,共用的資訊,我們儲存到cache伺服器上。

我們現在看著比較完美了,這樣的結構,我們可以無限的擴充套件了,關於檔案同步的問題,我們可以採用很多開源的軟體來解決。或者自己寫個socket服務,用於檔案傳輸,這都不是問題了。

現在我們還要進一步的優化,因為,如果我們發現,我們這樣的平台,並不能無限的擴充套件,因為cache伺服器,負載均衡伺服器,以後會成為瓶頸那怎麼辦?

這個時候,我們就引出了,網域名稱規劃的問題,也就是乙個網域名稱下面有這樣的一組伺服器支撐,構成了,乙個網路體系,我們就進一步緩解了壓力。

現在出問題,幾個網域名稱下面的通用資料怎麼辦?如果使用者名稱,使用者id啥的,其實大部分公司均採用cookie加密來解決這個問題。那我們的資料庫怎麼辦?

有些資料共享怎麼辦?

我們採用同樣的情況,做到資料庫讀寫分離,在資料庫連線上,也採用資料集群

關於資料如何同步的問題,mysql本身帶有這個功能,如何配置,以及怎麼互補的問題,baidu下,解決方案,很多。

關於讀寫分離,我們可以在程式裡面直接分離,關於分離的方案,請看我資料庫封裝類 。

另外,我們可以採用mysql的**,使用的語言室lua,來實現這個功能。

我們這些都做了,還有什麼問題呢?

其實我們系統大量的訪問了,,js檔案,css檔案,而這些檔案,我們修改的並不頻繁,所以我們要加上乙個檔案伺服器,同時,採用反向**的方式,來解決使用者頻繁請求同乙個公用檔案的問題。

很多人問我了,你說了這麼多乙個最根本的問題你沒說,就是靜態化,這個靜態化,可以大幅提高伺服器的負載效能,但是並非所有的伺服器,均可以採用,小頁面,我們讀取數量等等,我們採用靜態化

,一些其他的資料,我們通過ajax來動態提取這個不是問題。其實靜態化,這個問題很嚴重,因為方案很多,一種是直接生成,還有一種是利用404錯誤,也就是使用者請求的檔案不存在了,在建立,這些

真的要根據具體的使用,才可以談論的。

另外還有一些更特殊的問題,現在web遊戲特別的多,這些裡面有很多頻繁的互動怎麼處理?

當前大部分解決多是,採用flash長連線,以及ajax輪詢來解決,也就是還是轉換到了,pv跟併發上面。所以牽扯到了http伺服器的選型問題。這些就更具體了。

優化還有乙個地方就是,首先您的程式是否做到了最優,程式的設計結構是否最優,使用者請求是否可以增加快取,使用者對資料的變化,可以容忍多大的問題,等等。

所以說,使用者需求,是一切的根本,pv這個東西,其實並不可怕,有效的解決方案,就這麼多。

總結下:

1,需求分析的嚴謹

2,使用者體驗度的把握

3,網域名稱規劃

4,程式設計的合理性

5,快取的使用

6,pv壓力的化解

7,硬體平台的擴充套件效能

其實這些根本沒有提到很多細節,因為有錢的公司可以使用cdn,做多線伺服器,等等,有錢的做法。

關於伺服器備份,監控,也有很多的解決方案,開源,付費的就更多了。

關於日誌伺服器的建立,等等,等等,細節上面的東西。

第三講 前置知識

啥是前置的知識?應該是一種粗略的大概的,對其進行解。就像平時玩戲,要知道這個遊戲有啥子背景,講的是啥事兒,如何去玩它。包括遊戲中各類的圖示代表什麼個意思,初期對其進行初步的了解。說的好像你很屌的樣子,再屌又咋滴,還不是屌絲乙個,光棍一條,哈哈!你說我,老大咱都要各自照照鏡先吧。我已經夠青出於蘭了,你...

Java基礎第三講

一.運算子 1.邏輯運算子 一般用於連線boolean型別的表示式或值 並且 有false則false 或者 有true則true 非 非false則true,非true則false 偶數個不會改變本身 異或 結果相同為false,結果不同則為true 短路與 與 的區別 結果一樣,具有短路效果,如...

第三講 Docker 安裝

我們將在centos linux上安裝docker。如果沒有centos系統,你可以使用虛擬機器virtual box來安裝centos,可參考下面的文章 docker的版本 通常安裝社群版本。系統要求 要安裝docker ce,需要使用centos 7的穩定版本 核心版本必須3.8或之後 注意 必...