成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

PHP面試之二:高并發(fā)與大數(shù)據(jù)

Ashin / 1669人閱讀

摘要:三態(tài)分別是就緒運(yùn)行阻塞進(jìn)程的五態(tài)模型在三態(tài)的基礎(chǔ)上發(fā)展而來(lái)新建態(tài)運(yùn)行態(tài)終止態(tài)就緒態(tài)等待態(tài)線(xiàn)程稱(chēng)之為輕量級(jí)的進(jìn)程,程序執(zhí)行流的最小單元。一個(gè)進(jìn)程下有多個(gè)線(xiàn)程來(lái)完成不同的工作稱(chēng)之為多線(xiàn)程。

web資源防盜鏈

盜鏈?zhǔn)鞘裁矗?為什么要防?

在自己頁(yè)面上顯示一些不是自己服務(wù)器的資源圖片、音頻視頻、css、js等)
由于別人盜鏈你的資源會(huì)加重你的服務(wù)器負(fù)擔(dān),所以我們需要防止
可能會(huì)影響統(tǒng)計(jì)

防盜鏈?zhǔn)鞘裁矗?有哪幾種方式?

防止別人通過(guò)一些技術(shù)手段繞過(guò)本站的資源展示頁(yè),盜用本站資源,讓繞開(kāi)本站資源展示頁(yè)面的資源鏈接失效
大大減輕服務(wù)器壓力

1、Referer (易偽造referer,安全性低)
2、加密簽名 (安全性高)

防盜鏈的工作原理

通過(guò)Referer,服務(wù)器可以檢測(cè)到訪(fǎng)問(wèn)目標(biāo)資源的來(lái)源網(wǎng)站,如果是資源文件,則可以跟蹤到顯示它的網(wǎng)頁(yè)地址。一旦檢測(cè)到來(lái)源網(wǎng)站不是本站進(jìn)行阻止

通過(guò)簽名,根據(jù)計(jì)算簽名的方式,判斷請(qǐng)求是否合法,如果合法則顯示,否則返回錯(cuò)誤信息

Referer實(shí)現(xiàn)

Nginx為例,前提加載ngx_http_referer_module模塊

//指令valid_referers  全局invalid_referer
location ~* .(gif|jpg|png|webp)$ {
   valid_referers none blocked domain.com *.domain.com ;
   if ($invalid_referer) {
        return 403;
        #rewrite ^/ http://www.domain.com/403.jpg;
   }
}

注意:為什么要none呢?因?yàn)槿绻ㄟ^(guò)瀏覽器直接訪(fǎng)問(wèn)資源,referer就是為空,所以這種方式不能徹底阻擋住盜鏈。

加密簽名

Nginx為例,前提加載第三方模塊HttpAccessKeyModule實(shí)現(xiàn)防盜鏈

location ~* .(gif|jpg|png|webp)$ {
    accesskey on;
    accesskey_hashmethod md5;
    accesskey_arg key;
    accesskey_signature "mysrc$remote_addr";
}
減少HTTP請(qǐng)求次數(shù)

發(fā)現(xiàn)問(wèn)題

80~90%是花費(fèi)在頁(yè)面引用控件的加載上,只有10~20%是花費(fèi)在文檔的加載上
HTTP/1.1協(xié)議規(guī)定請(qǐng)求只能串行發(fā)送,換句話(huà)就是100個(gè)請(qǐng)求,只能一個(gè)一個(gè)發(fā)送,上一個(gè)請(qǐng)求完成才能進(jìn)行下一個(gè)請(qǐng)求

如何改善?

減少引用控件數(shù)量,從而達(dá)到減少HTTP請(qǐng)求次數(shù)

如何實(shí)現(xiàn)減少請(qǐng)求?

1、圖片地圖

原理把多張圖片合成一張,再使用標(biāo)簽來(lái)實(shí)現(xiàn)對(duì)圖片上不同區(qū)域的鏈接

Planets

  Sun
  Mercury
  Venus

圖片地圖

2、CSS Sprites(雪碧圖)

原理合拼圖片,再使用css的background-image和background-position來(lái)指定顯示元素

CSS Sprites與圖片地圖性能差不多,但CSS Sprites更加簡(jiǎn)單靈活

CSS Sprites

3、合并JS與CSS文件

加載一個(gè)JS文件比加載多個(gè)JS文件要快

一般會(huì)使用前端自動(dòng)構(gòu)建工具打包合并

4、圖片使用base64編碼

注意:圖片base64除了可以使用在中,還可以使用在css的background-image中

CDN加速

什么是CDN加速?

CDN 就是內(nèi)容分發(fā)網(wǎng)絡(luò),在各處放置服務(wù)器來(lái)構(gòu)成一層智能虛擬網(wǎng)絡(luò),此處服務(wù)器稱(chēng)之為節(jié)點(diǎn)服務(wù)器。所謂智能就是會(huì)自動(dòng)根據(jù)用戶(hù)請(qǐng)求信息把請(qǐng)求重新分配到離客戶(hù)端最近的服務(wù)器。

CDN的作用: 解決由于服務(wù)端與客戶(hù)端所在區(qū)域的不同,導(dǎo)致影響數(shù)據(jù)傳輸速度和穩(wěn)定性問(wèn)題,一句話(huà)總結(jié)就是讓數(shù)據(jù)傳輸更快更穩(wěn)定。

CDN有什么優(yōu)勢(shì)?

1、智能Cache加速,提高企業(yè)站點(diǎn)的訪(fǎng)問(wèn)速度(含大量圖片或靜態(tài)頁(yè)面最適合,因?yàn)镃DN相當(dāng)于是服務(wù)器的一個(gè)鏡像)
2、跨運(yùn)營(yíng)商的網(wǎng)絡(luò)加速,保證不同網(wǎng)絡(luò)的用戶(hù)都能得到很好的訪(fǎng)問(wèn)速度
3、加速用戶(hù)遠(yuǎn)程訪(fǎng)問(wèn)服務(wù)器,根據(jù)DNS負(fù)載均衡技術(shù)自動(dòng)智能選擇Catch服務(wù)器
4、自動(dòng)生成遠(yuǎn)程服務(wù)器的鏡像(Catch服務(wù)器),加速訪(fǎng)問(wèn)速度,減輕Web服務(wù)器的負(fù)擔(dān),分擔(dān)流量

CDN的工作原理是什么?


CDN適用場(chǎng)景有哪些?

1、網(wǎng)站或應(yīng)用中大量靜態(tài)資源的加速分發(fā) (例如:css/js/圖片等)
2、大文件下載
3、直播網(wǎng)站

CDN如何實(shí)現(xiàn)?

瀏覽器緩存

高并發(fā)下只能通過(guò)提高服務(wù)器負(fù)載來(lái)解決? NO,流量、前端、服務(wù)器、數(shù)據(jù)庫(kù)
緩存只能是數(shù)據(jù)庫(kù)緩存嗎? NO,還有瀏覽器緩存

HTTP緩存分類(lèi)(2種)

1.200 OK (from memory cache) 直接從本地緩存中獲取響應(yīng),最快速、最省流量,因?yàn)闆](méi)有向服務(wù)器發(fā)送請(qǐng)求


2.304 Not Modified 協(xié)商緩存,瀏覽器在本地沒(méi)有命中的情況下,請(qǐng)求頭中會(huì)發(fā)送一定的校驗(yàn)數(shù)據(jù)到服務(wù)器。如果服務(wù)端數(shù)據(jù)沒(méi)有改變,服務(wù)端直接響應(yīng)(通知瀏覽器從本地緩存獲?。祷?04(快速、發(fā)送數(shù)據(jù)很少,只返回最基本的響應(yīng)頭,不發(fā)送響應(yīng)體)


PS: 以上兩種緩存全部失敗,服務(wù)器返回完整響應(yīng)體(200 OK),沒(méi)有用到緩存,速度最慢

瀏覽器本地緩存相關(guān)的header

Pragma


Cache-Control


Expires

前端代碼和資源壓縮優(yōu)化

讓資源文件更小,加快文件在網(wǎng)絡(luò)中傳輸,讓網(wǎng)頁(yè)更快的展示,降低流量和寬帶開(kāi)銷(xiāo)

壓縮方式

JS、CSS、HTML、圖片壓縮和Gzip壓縮

JS代碼壓縮

去除一些多余的空格和回車(chē),替換長(zhǎng)變量名,簡(jiǎn)化一些代碼寫(xiě)法
壓縮工具:在線(xiàn)版和安裝版

在線(xiàn)壓縮工具

CSS代碼壓縮

與JS壓縮原理一樣,去除空白符、注釋和優(yōu)化一下語(yǔ)義化

在線(xiàn)壓縮工具

HTML代碼壓縮(不推薦,鎮(zhèn)用)

不推薦使用,因?yàn)闀?huì)破壞代碼結(jié)構(gòu)。

圖片(JPG、PNG)壓縮

壓縮工具:tinypng/JpegMini/ImageOptim

Gzip壓縮

Gzip壓縮是Web服務(wù)器對(duì)純文本文件(JS/CSS/XML/HTML)進(jìn)行壓縮
注意:千萬(wàn)不要對(duì)圖片進(jìn)行Gzip壓縮

//以Nginx為例

# 開(kāi)啟gzip
gzip on;
# 啟用gzip壓縮的最小文件,小于設(shè)置值的文件將不會(huì)壓縮
gzip_min_length 1k;
# gzip 壓縮級(jí)別,1-10,數(shù)字越大壓縮的越好,也越占用CPU時(shí)間,后面會(huì)有詳細(xì)說(shuō)明,推薦6
gzip_comp_level 6;
# 進(jìn)行壓縮的文件類(lèi)型。javascript有多種形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php;
# 是否在http header中添加Vary: Accept-Encoding,建議開(kāi)啟
gzip_vary on;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6].";
# 壓縮存儲(chǔ)的緩沖
gzip_buffers 16 64k;
# 開(kāi)啟壓縮的http版本
gzip_http_version 1.1;
動(dòng)態(tài)語(yǔ)言靜態(tài)化

將現(xiàn)代動(dòng)態(tài)語(yǔ)言的邏輯代碼生成為靜態(tài)HTML文件(靜態(tài)化實(shí)際作用:緩存成一個(gè)html文件),再次訪(fǎng)問(wèn)時(shí)就會(huì)重定向到靜態(tài)文件

適用場(chǎng)景

對(duì)實(shí)時(shí)性要求不高的頁(yè)面

為什么要使用靜態(tài)化?

解決高并發(fā),減輕Web服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器壓力

靜態(tài)化實(shí)現(xiàn)方式有幾種?

1、使用Smarty模板引擎
2、使用ob系列函數(shù)

使用Smarty模板引擎

//緩存存放目錄
$smarty->cache_dir=$ROOT."/cache"; 
//開(kāi)啟緩存
$smarty->caching=true; 
//緩存過(guò)期時(shí)間
$smarty->cache_lifetime=3600;
//加載模板
$smarty->display();
//清除所有緩存文件
$smarty->clearAllCache();
//清除特定模板的緩存
$smarty->clearCache("index.tpl");

使用ob系列函數(shù)(重點(diǎn),實(shí)現(xiàn)靜態(tài)化基礎(chǔ))

//開(kāi)啟輸出緩沖區(qū)
ob_start(); 
//獲取輸出緩沖區(qū)內(nèi)容
ob_get_contents();
//清空(擦掉)輸出緩沖區(qū)
ob_clean();
//送出輸出緩沖區(qū)內(nèi)容并關(guān)閉緩沖
ob_end_flush();
//得到當(dāng)前緩沖區(qū)的內(nèi)容并刪除輸出緩沖區(qū)
ob_get_clean();
動(dòng)態(tài)語(yǔ)言的并發(fā)處理

什么是進(jìn)程?什么是線(xiàn)程?什么是協(xié)程?

進(jìn)程:是一個(gè)“執(zhí)行中的程序”,程序不執(zhí)行就不會(huì)產(chǎn)生進(jìn)程。一個(gè)執(zhí)行中的程序至少會(huì)產(chǎn)生一個(gè)進(jìn)程,當(dāng)進(jìn)程獲得了處理機(jī)時(shí)才會(huì)從就緒狀態(tài)變?yōu)檫\(yùn)行狀態(tài),處理機(jī)不斷切換地分配到每個(gè)進(jìn)程中。決定同時(shí)有多少個(gè)進(jìn)程處于運(yùn)行狀態(tài)的是處理器數(shù)量(CPU核數(shù))

進(jìn)程的三態(tài)模型:多個(gè)程序在系統(tǒng)中運(yùn)行時(shí),進(jìn)程在處理機(jī)中交替運(yùn)行,狀態(tài)在不斷切換。
三態(tài)分別是:就緒、運(yùn)行、阻塞

進(jìn)程的五態(tài)模型(在三態(tài)的基礎(chǔ)上發(fā)展而來(lái)):新建態(tài)、運(yùn)行態(tài)、終止態(tài)、就緒態(tài)、等待態(tài)

線(xiàn)程:稱(chēng)之為輕量級(jí)的進(jìn)程,程序執(zhí)行流的最小單元。線(xiàn)程依賴(lài)于進(jìn)程(一個(gè)進(jìn)程可以有多個(gè)線(xiàn)程),線(xiàn)程不擁有系統(tǒng)資源。與同屬一個(gè)進(jìn)程的其他線(xiàn)程共享進(jìn)程擁有的全部資源一個(gè)線(xiàn)程可以創(chuàng)建和撤銷(xiāo)另一個(gè)線(xiàn)程,同一個(gè)進(jìn)程中的多個(gè)線(xiàn)程可以并發(fā)執(zhí)行。一個(gè)進(jìn)程下有多個(gè)線(xiàn)程來(lái)完成不同的工作稱(chēng)之為多線(xiàn)程。(一個(gè)進(jìn)程下至少會(huì)有一個(gè)線(xiàn)程)

線(xiàn)程由來(lái):由于用戶(hù)并發(fā)請(qǐng)求,為每個(gè)請(qǐng)求都創(chuàng)建一個(gè)進(jìn)程顯然太浪費(fèi)系統(tǒng)資源和影響響應(yīng)用戶(hù)請(qǐng)求的效率,所以引進(jìn)線(xiàn)程的概念。

協(xié)程:是一種用戶(hù)態(tài)輕量級(jí)的線(xiàn)程。

//協(xié)程與線(xiàn)程的區(qū)別
1、協(xié)程是由用戶(hù)自己調(diào)度,而線(xiàn)程是用系統(tǒng)調(diào)度
2、協(xié)程是異步的,而進(jìn)程線(xiàn)程是同步的
3、一個(gè)線(xiàn)程可以有多個(gè)協(xié)程,一個(gè)進(jìn)程也可以多帶帶擁有多個(gè)協(xié)程
4、協(xié)程會(huì)保留上一次調(diào)用的狀態(tài)

什么是多線(xiàn)程?什么是多進(jìn)程?

多進(jìn)程:2個(gè)或2個(gè)以上的進(jìn)程處于運(yùn)行狀態(tài),進(jìn)程間通信不方便


多線(xiàn)程:把一個(gè)進(jìn)程分為很多片,每一片都是一個(gè)獨(dú)立的流程,線(xiàn)程間可以互相通訊

同步阻塞模型

異步非阻塞模型

PHP并發(fā)編程實(shí)戰(zhàn)

1.使用swoole擴(kuò)展


2.使用消息隊(duì)列


3.接口的并發(fā)請(qǐng)求

curl_multi_init()
數(shù)據(jù)緩存

什么是數(shù)據(jù)緩存?

傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)都是把數(shù)據(jù)存儲(chǔ)到硬盤(pán)中,在高并發(fā)情況下,對(duì)數(shù)據(jù)庫(kù)服務(wù)器會(huì)造成巨大壓力(巨大IO操作),為了解決此問(wèn)題,數(shù)據(jù)緩存由此而生!

作用:
1、極大地緩解數(shù)據(jù)庫(kù)服務(wù)器的壓力
2、提高數(shù)據(jù)的響應(yīng)速度


緩存形式有:內(nèi)存緩存、文件緩存
推薦使用內(nèi)存緩存

為什么要使用數(shù)據(jù)緩存?(答案如上)

第一次訪(fǎng)問(wèn):

再次訪(fǎng)問(wèn):

如何使用Mysql查詢(xún)緩存?

如何使用Memcache緩存?

如何使用redis緩存?

Web服務(wù)器負(fù)載均衡

實(shí)現(xiàn)方式

1、七層負(fù)載均衡(Nginx)
2、四層負(fù)載均衡(LVS/硬件設(shè)備)

七層負(fù)載均衡

基于URL等應(yīng)用層信息實(shí)現(xiàn)負(fù)載均衡

// 一般使用Nginx來(lái)實(shí)現(xiàn)
功能強(qiáng)大、性能卓越、運(yùn)行穩(wěn)定
配置簡(jiǎn)單靈活
上傳文件使用異步模式
多種分發(fā)策略
自動(dòng)剔除不正常工作設(shè)備

Nginx負(fù)載均衡策略

內(nèi)置

加權(quán)輪詢(xún)、IP Hash

外置

fair策略、通用Hash、一致性Hash

Nginx配置負(fù)載均衡

http{
    upstream cluster{
        server srv1;
        server srv2;
        server srv3;
    }
    server{
        listen 80;
        location / {
            proxy_pass http://cluster;
        }
    }
}

四層負(fù)載均衡

有2種方式實(shí)現(xiàn):
1、LVS
2、硬件設(shè)備

LVS負(fù)載均衡的三種方式:NAT、DR和TUN

硬件設(shè)備:通過(guò)報(bào)文中的目標(biāo)地址和端口,再加上負(fù)載均衡設(shè)備的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器
MySQL數(shù)據(jù)庫(kù)優(yōu)化

優(yōu)化方向

字段數(shù)據(jù)類(lèi)型優(yōu)化

tinyint/smallint/int/bigint的選擇
char/varchar
enum 固定分類(lèi)
IP地址數(shù)據(jù)如何存?
答案:把IP地址轉(zhuǎn)整型類(lèi)型存儲(chǔ)

索引


SQL語(yǔ)句優(yōu)化


存儲(chǔ)引擎優(yōu)化


表結(jié)構(gòu)設(shè)計(jì)優(yōu)化


數(shù)據(jù)庫(kù)服務(wù)器架構(gòu)優(yōu)化

列表項(xiàng)目

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30631.html

相關(guān)文章

  • 我的PHP面試

    摘要:因?yàn)楣灸壳皵U(kuò)招個(gè)人書(shū)寫(xiě)的自己比較看重的個(gè)人技能點(diǎn),因?yàn)楸竟緲I(yè)務(wù)發(fā)展小說(shuō)站,在線(xiàn)閱讀,而且并發(fā)量和數(shù)據(jù)量是比較大的,所以會(huì)提出一些并發(fā)的東西。和的原理,以及在分布式應(yīng)用中出現(xiàn)的問(wèn)題和解決方案我們就做了分布式和的區(qū)別,各自的優(yōu)點(diǎn)和缺點(diǎn)。 因?yàn)楣灸壳皵U(kuò)招PHP,個(gè)人書(shū)寫(xiě)的自己比較看重的個(gè)人技能點(diǎn),因?yàn)楸竟緲I(yè)務(wù)發(fā)展小說(shuō)站,在線(xiàn)閱讀,而且并發(fā)量和數(shù)據(jù)量是比較大的,所以會(huì)提出一些并發(fā)的東西...

    renweihub 評(píng)論0 收藏0
  • PHP 設(shè)計(jì)模式之二——工廠(chǎng)模式

    摘要:連接郵件服務(wù)器的類(lèi)可以連接郵件服務(wù)器的方法有,此時(shí)可以寫(xiě)一個(gè)工廠(chǎng)類(lèi)負(fù)責(zé)實(shí)例化這幾種連接方法,如果某一天對(duì)方增加了連接方法,那么直接在工廠(chǎng)類(lèi)里做相應(yīng)的修改即可。擴(kuò)展性高,如果想增加一個(gè)產(chǎn)品,只要擴(kuò)展一個(gè)工廠(chǎng)類(lèi)或者是修改工廠(chǎng)的生產(chǎn)過(guò)程即可。 定義 工廠(chǎng)模式的使用頻率比較高。它的定義為:定義一個(gè)類(lèi),該類(lèi)主要負(fù)責(zé)系統(tǒng)的去實(shí)例化一些其它的類(lèi)。通俗點(diǎn)說(shuō)就是,你告訴我你需要哪個(gè)類(lèi)的實(shí)例即可,其它的你...

    cc17 評(píng)論0 收藏0
  • 從小白程序員一路晉升為大廠(chǎng)級(jí)技術(shù)專(zhuān)家我看過(guò)哪些書(shū)籍?(建議收藏)

    摘要:大家好,我是冰河有句話(huà)叫做投資啥都不如投資自己的回報(bào)率高。馬上就十一國(guó)慶假期了,給小伙伴們分享下,從小白程序員到大廠(chǎng)高級(jí)技術(shù)專(zhuān)家我看過(guò)哪些技術(shù)類(lèi)書(shū)籍。 大家好,我是...

    sf_wangchong 評(píng)論0 收藏0
  • PHP 基于laravel框架獲取微博數(shù)據(jù)之二 用戶(hù)數(shù)據(jù)的使用

    摘要:以大量微博用戶(hù)數(shù)據(jù)為基礎(chǔ)可建立數(shù)據(jù)模型。當(dāng)前微博除了用戶(hù)自己,其他人是不能查看該用戶(hù)所有粉絲數(shù)據(jù)的。 項(xiàng)目地址:https://github.com/daweilang/... 開(kāi)始抓取微博數(shù)據(jù)的時(shí)候,只是想獲得一條熱門(mén)微博下的所有評(píng)論,因?yàn)槔锩嬗胁簧賵D片廣告,所以想試試能不能分析出熱門(mén)微博評(píng)論里的異常用戶(hù)。 使用PHP的Laravel框架后,通過(guò)隊(duì)列、命令等各種功能,最后構(gòu)架了一套完...

    Sleepy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<