高并發(fā)和大流量的解決方案

生成唯一ID-雪花算法:https://github.com/godruoyi/php-snowflake](https://github.com/godruoyi/php-snowflake)

一、高并發(fā)的問題,我們該關(guān)心什么

1戒职、QPS :每秒鐘請求或查詢的數(shù)量(QPS 不等于并發(fā)連接數(shù)  并發(fā)連接數(shù)是系統(tǒng)同時處理請求的數(shù)量)
2、吞吐量:單位時間內(nèi)處理的請求數(shù)量(通常由QPS和并發(fā)數(shù)決定)
3森篷、響應(yīng)時間
4统舀、PV:綜合瀏覽量(Page View),即頁面瀏覽量或者點(diǎn)擊量胶背,一個訪客24小時內(nèi)訪問的頁面數(shù)量骡苞,
       同一個人瀏覽網(wǎng)站的同個頁面多次刷新垂蜗,只記做一個PV
5、UV:獨(dú)立訪客(Unique Visitor),即一定時間范圍內(nèi)相同的訪客多次訪問網(wǎng)站解幽,只計算為1個UV
6贴见、帶寬:日網(wǎng)站帶寬 = PV/統(tǒng)計時間(換算成秒)* 平均頁面大小(單位KB)* 8
7躲株、峰值的QPS := (總PV數(shù) * 80%)/(6小時秒數(shù) * 20%)
8片部、壓力測試:ab、wrk徘溢、http_load吞琐、Apache JMeter

二、 不同QPS下的優(yōu)化

1然爆、QPS達(dá)到100站粟,數(shù)據(jù)庫緩存、數(shù)據(jù)庫負(fù)載均衡
2曾雕、QPS達(dá)到800奴烙,如果網(wǎng)站帶寬為100M,那么帶寬就會吃完剖张。CDN加速切诀、負(fù)載均衡
3、QPS達(dá)到1000搔弄, 如果使用Memcache緩存幅虑,Memcache的悲觀鎖并發(fā)2W左右,那么內(nèi)網(wǎng)的帶寬可能以及吃完顾犹。靜態(tài)HTML緩存
4倒庵、QPS達(dá)到2000褒墨,文件系統(tǒng)訪問鎖成為了災(zāi)難,做業(yè)務(wù)分離擎宝、分布式存儲

三郁妈、優(yōu)化方案

1、流量優(yōu)化绍申。防盜鏈
2噩咪、前端優(yōu)化。減少http請求极阅、添加異步請求胃碾、開啟瀏覽器緩存和文件壓縮、CND加速涂屁、建立獨(dú)立圖片服務(wù)器书在、
3、服務(wù)端優(yōu)化拆又。頁面靜態(tài)化、并發(fā)處理(隊列栏账、異步)
4帖族、數(shù)據(jù)庫優(yōu)化。數(shù)據(jù)庫緩存挡爵、分庫分表分區(qū)竖般、讀寫分離、負(fù)載均衡
5茶鹃、web服務(wù)器優(yōu)化涣雕。負(fù)載均衡、

四闭翩、具體的優(yōu)化方案

1挣郭、防盜鏈:使用Referer請求地址判斷或者簽名
Referer nginx配置

location ~.*\.(gif|jpg|png|flv|swf|rar|zip)$
{
 valid_referers none blocked test.com *.test.com;
if($invalid_referer){
   #return 403;
   rewrite ^/ http://www.test.com/403.jpg;
   }

}

加密簽名:使用第三方模塊HttpAccessKeyModule實(shí)現(xiàn)Nginx防盜鏈

location ~.*\.(gif|jpg|png|flv|swf|rar|zip)$
{
    accesskey on; 
  accesskey_hashmethod md5; #加密算法,和php的加密算法保持一直
  accesskey_arg "sign"; #url請求簽名的參數(shù)名
  accesskey_signatrue "mypass$remote_addr"; #加密規(guī)則  md5( 'mypass'+客服端的ip地址)疗韵;
}

2兑障、數(shù)據(jù)庫優(yōu)化

  • 數(shù)據(jù)庫類型的正確選擇
  • 數(shù)據(jù)表引擎的不同
InnoDB:默認(rèn)事務(wù)型引擎,性能優(yōu)秀蕉汪。
        數(shù)據(jù)存儲共享表空間(索引等),可通過配置分開
        主鍵查詢性能高于其他類型的引擎
        通過一些機(jī)制和工具支持真正的熱備份
        支持崩潰后 的安全恢復(fù)
        支持行級鎖  
       支持外鍵
MyISAM
       支持全文索引
       不支持事務(wù)和行級鎖流译,表鎖
       不支持崩潰后 的安全恢復(fù)
       表存儲在2個文件,MYD和MYI
       查詢效果比較高
       統(tǒng)計效率比較高(count)
  • MySQL索引者疤,主鍵福澡、唯一索引、聯(lián)合索引 的區(qū)別驹马,以及對數(shù)據(jù)庫性能的影響
 1革砸、索引對性能的影響
        大大減少服務(wù)器需要掃描的數(shù)據(jù)量‘
        幫助服務(wù)器避免排序和臨時表
        將隨機(jī)I/O 變成順序的I/O
        大大提高查詢速度
     缺點(diǎn):降低寫的速度眯搭,占用磁盤

 2、索引的使用場景
        對于小的表业岁,全表掃描效率更高 
        中大型的表鳞仙,索引非常有效
        特大型的表,建立索引和使用索引代價也會提高笔时,可使用分區(qū)技術(shù)解決

3棍好、主鍵索引和唯一索引的區(qū)別
       一個表只能有一個主鍵,可以有多個唯一索引
      主鍵索引一定是唯一索引允耿,唯一索引不是主鍵索引
      主鍵可以和外鍵構(gòu)成參照完整性約束借笙,防止數(shù)據(jù)不一致

4、索引的創(chuàng)建原則
       where中的列较锡,或者連接子句中的列
       索引列基數(shù)越大业稼,索引效果越好
       對字符串進(jìn)行索引,應(yīng)該制定一個前綴長度蚂蕴,可以節(jié)省大量空間
       根據(jù)情況創(chuàng)建復(fù)合索引低散,復(fù)合索引可以提高查詢效率
       避免創(chuàng)建過多的索引,索引或占用磁盤空間骡楼,降低寫的效率
       主鍵盡可能使用較短的類型熔号,比比如整型

5、索引生效
    . 復(fù)合聯(lián)合索引的原則(前綴原則 ) key(a,b,c)
    . 索引生效:where a=1 and b =2 and c=3
                        where a=1 and b=2   
                        where a=1 其他都不生效
    . ike 查詢鸟整,%不能在前引镊,可以使用全文索引
    . is not null 和 is null 不走索引
    . order by 加上索引
    . != 索引失效
    . 如果MySQL估計使用索引比全表掃描慢,會放棄使用索引
    . or 前面會使用索引篮条,后面不會弟头,可以使用UNION ALL來代替
        select * from temp where age=20 or age=30;不走索引,可以使用下面的代替
        select * from temp where age=20
         UNION ALL
        select * from temp where age=30
    . 列類型是字符串涉茧,查詢時一定要給值加引號赴恨,否則索引失效
    .

6、SQL優(yōu)化

 . 不要select * 

 . 謹(jǐn)慎使用模糊查詢降瞳。只有 s% (%在后面)才走索引

 . 對order by 加索引

 . 少用IS NULL和IS NOT NULL 不走索引 可以使用>或者<代替

 . 少用!=運(yùn)算符 可以使用>和< 代替

 . 少用OR嘱支; OR前面會使用索引,后面不會挣饥,可以使用UNION ALL來代替
        select * from temp where age=20 or age=30;不走索引除师,可以使用下面的代替
        select * from temp where age=20
         UNION ALL
        select * from temp where age=30

. 少用 IN 和NOT IN
    select * from user where age in(20,30); 可以使用下面的代替
    select * from user where age= 20
    UNION ALL
    select * from user where age=20

. 避免條件語句中的數(shù)據(jù)類型轉(zhuǎn)換
  如果數(shù)據(jù)類型是整型,不要加引號

. 在表達(dá)式左側(cè)使用運(yùn)算符和函數(shù)會是索引失效

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扔枫,一起剝皮案震驚了整個濱河市汛聚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌短荐,老刑警劉巖倚舀,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叹哭,死亡現(xiàn)場離奇詭異,居然都是意外死亡痕貌,警方通過查閱死者的電腦和手機(jī)风罩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舵稠,“玉大人超升,你說我怎么就攤上這事〔富玻” “怎么了室琢?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長落追。 經(jīng)常有香客問我盈滴,道長,這世上最難降的妖魔是什么轿钠? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任巢钓,我火速辦了婚禮,結(jié)果婚禮上谣膳,老公的妹妹穿的比我還像新娘竿报。我一直安慰自己,他們只是感情好继谚,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阵幸,像睡著了一般花履。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挚赊,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天诡壁,我揣著相機(jī)與錄音,去河邊找鬼荠割。 笑死妹卿,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蔑鹦。 我是一名探鬼主播夺克,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嚎朽!你這毒婦竟也來了铺纽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤哟忍,失蹤者是張志新(化名)和其女友劉穎狡门,沒想到半個月后陷寝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡其馏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年凤跑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叛复。...
    茶點(diǎn)故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡仔引,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出致扯,到底是詐尸還是另有隱情肤寝,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布抖僵,位于F島的核電站鲤看,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏耍群。R本人自食惡果不足惜义桂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蹈垢。 院中可真熱鬧慷吊,春花似錦、人聲如沸曹抬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谤民。三九已至堰酿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間张足,已是汗流浹背触创。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留为牍,地道東北人哼绑。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像碉咆,于是被迫代替她去往敵國和親抖韩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 本文將從宏觀的角度上全方位剖析高并發(fā)和大流量解決方案 從一個面試題開始講解:PHP如何解決網(wǎng)站大流量與高并發(fā)的問...
    meng_philip123閱讀 2,102評論 2 86
  • 高并發(fā)架構(gòu)相關(guān)概念 并發(fā) 并發(fā)吟逝,在操作系統(tǒng)中帽蝶,是指一個時間段中有幾個程序都處于已啟動運(yùn)行到運(yùn)行完畢之間,并且這幾個...
    AGEGG閱讀 13,000評論 0 6
  • 高并發(fā)和大流量解決方案高并發(fā)架構(gòu)相關(guān)概念并發(fā)并發(fā),在操作系統(tǒng)中励稳,是指一個時間段中有幾個程序都處于已啟動運(yùn)行到運(yùn)行完...
    __bomb__閱讀 349評論 0 0
  • 高并發(fā) QPS 每秒處理請求數(shù) QPS 達(dá)到50一般服務(wù)器就能應(yīng)付佃乘,不需要優(yōu)化 QPS 達(dá)到100假設(shè)關(guān)系型數(shù)據(jù)庫...
    code_nerd閱讀 1,898評論 0 4
  • 名詞解釋:并發(fā) 在操作系統(tǒng)中,是指一個時間段中有幾個程序都處于已啟動運(yùn)行到運(yùn)行完畢之間驹尼,且這幾個程序都是在同一個處...
    這真的是一個帥氣的名字閱讀 3,595評論 0 9