導航:首頁 > 配伺服器 > tp框架如何減少伺服器壓力

tp框架如何減少伺服器壓力

發布時間:2024-04-11 05:45:34

㈠ 用thinkphp 開發萬人在線的聊天室性能跟得上么

首先聊天室主要的瓶頸並不在於用什麼語言做後端,而在於整體處理架構。


當你打算做聊天室的時候你可以自己看看如何解決以下問題:

  1. 數據的傳輸(如何及時把收到的數據傳輸給別人)

  2. 資料庫的處理(對於數據的操作,萬人在線的聊天室數據量產生肯定很大,那麼怎麼保證資料庫能扛得下去)

  3. web伺服器是否有能力對抗那麼大的並發數量

  4. 伺服器的帶寬是否能支撐下去



以上四點是基於B/S架構必有的問題,如果並非B/S架構那麼後端也沒必要使用PHP吧?

第一點、可以使用websocket進行解決,但缺點是不能支持舊版本的瀏覽器

(如果需要支持可以使用AJAX輪詢進行處理,但會加大伺服器壓力)

第二點、可以增加緩存層,所有數據先進緩存,然後一定時間把緩存寫入資料庫。前提是需要內存足夠大

(或者可以使用資料庫中間件進行讀寫分離,或者直接分表處理)

第三點、再對WEB伺服器優化後你能做的只有創建集群,用幾台機去緩解壓

第四點、買帶寬


說白了,沒有一定的金錢做為支持的背景下thinkphp和c做出來的性能相差不大,因為瓶頸並不在它那

㈡ 緩存策略的選擇

適合緩存的內容

1. 不變的圖像襲啟,如logo,圖標等

2. js、css靜態文件

3. 可下載的內容,媒體文件

適合協商緩存

1. HTML文件

2. 經常替換的圖片

3. 經常修改的js、css文件,js、css文件的載入可以加入文件的簽名來拒絕緩存,如『index.css?簽名』,『index.簽名.js』

不建議緩存的內容

1. 用戶隱私等敏感數據

2. 經常改變的API數據介面

NGINX配置緩存策略

本地緩存配置

1. add_header指令:添加狀態碼為2XX和3XX的響應頭信息,設置代碼add_header name value [always];,可以設置Pragma、Expires、Cache-Control,可以繼承

2. expires指令:通知瀏覽器過期時長,設置代碼expires time;

3. Etag指令:指定簽名,設置代碼etag on|off,默認on

前端代碼和資源壓縮

優勢

1. 讓資源文件更小,加快文件在網路中的傳輸,讓網頁更快的展現,降低帶寬和流量的開銷

壓縮方式

1. js、css、圖片、html代碼的壓縮

2. gzip壓縮

gzip配置

gzip on|off; #是否開啟gzipgzip_buffers 32 4K|16 8K; #緩沖(在內存中緩存幾塊?每塊多大)gzip_comp_level [1-9] #推薦6,壓縮級別(級別越高,壓得越小,越浪費CPU計算資源)

gzip_disable #正則匹配UA,什麼樣的Uri不進行gzip

gzip_min_length 200 #開始壓縮的最小長度

gzip_http_version 1.0|1.1 #開始壓縮的http協議版本

gzip_proxied #設置請求者代理伺服器,該如何緩存內容

gzip_types text/plain application/xml image/png #對哪些類型的文件壓縮,如txt、xml、css

gzip_vary on|off #是否傳輸gzip壓縮標志

CDN加速

定義

1. CDN的全稱content delivery network,內容分發網路

2. 盡可能避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定

3. 在網路各處放置節點伺服器所構成的有的互聯網基礎之上的一層智能虛擬網路

4. CDN系統能夠實現地根據網路流量和各節點的連接、負載狀況以及到用戶距離和響應時間等綜合信息將用戶的請求重新告禪洞導向離用戶最近的服務節點上

優勢

1. 本地cache加速,提高了企業站點(尤其含有大量圖片和靜態頁面站點)的訪問速度

2. 跨運營商的網路加速,保證不同網路的用戶都能得到良好的訪問質量

3. 遠程訪問用戶根據DNS負載均衡技術只能選擇cache伺服器

4. 自動生成伺服器襪枯的遠程Mirror(鏡像)cache伺服器,遠程用戶訪問時從cache伺服器上讀取數據,減少遠程訪問的帶寬、分擔網路流量、減輕原站點web伺服器負載等功能

5. 廣泛分布的cdn節點加上節點之間的智能冗餘機制,可以有效地預防黑客入侵

工作原理

1. 用戶發起請求

2. 智能DNS的解析(根據IP判斷地理位置、接入網類型、選擇路由最短和負載最輕的伺服器)

3. 取得緩存伺服器ip

4. 把內容返回給用戶(如果緩存中有,沒有就執行5、6、7)

5. 向源站發起請求

6. 將結果返回給用戶

7. 將結果存入緩存伺服器

適用場景

1. 站點或者應用中大量靜態資源的加速分發,例如css、js、圖片和HTML

2. 大文件下載

3. 直播網站

獨立圖片伺服器

必要性

1. 分擔web伺服器的I/O負載,將耗費資源的圖片伺服器分離出來,提高伺服器的性能和穩定性

2. 能夠專門對圖片伺服器進行優化,為圖片伺服器設置針對性的緩存方案,減少帶寬成本,提高訪問速度

3. 提高網站的可擴展性,通過增加圖片伺服器,提高圖片吞吐能力

採用獨立域名

原因:

1. 同一域名下瀏覽器的並發連接數有限制,突破瀏覽器連接數的限制

2. 由於cookie的原因,對緩存不利,大部分web cache都只緩存不帶cookie的請求,導致每次的圖片請求都不能命中cache

如何圖片上傳和同步

1. NFS共享方式

2. 利用FTP同步

動態語言靜態化

將現有的PHP等動態語言的邏輯代碼生成為靜態的HTML文件,用戶訪問動態腳本重定向到靜態HTML文件的過程。對實時性要求不高

原因:

1. 動態腳本通過會做邏輯計算和數據查詢,訪問量越大,伺服器壓力越大

2. 訪問量大時可能會造成CPU負載過高,資料庫伺服器壓力過大

3. 靜態化可以減低邏輯處理壓力,降低資料庫伺服器查詢壓力

實現方法

1. 使用模板引擎

2. 利用ob系列函數

需要獲取swoole、workerman、TP、laravel、vue、Linux、redis以及性能優化,並發項目實戰,微服務 架構方面的資料,可以私信我哦

㈢ 京東活動系統--億級流量架構應對之術

京東活動系統 是一個可在線編輯、實時編輯更新和發布新活動,並對外提供頁面訪問服務的系統。其高時效性、靈活性等特徵,極受青睞,已發展成京東幾個重要流量入口之一。近幾次大促,系統所承載的pv已經達到數億級。隨著京東業務的高速發展,京東活動系統的壓力會越來越大。急需要一個更高效,穩定的系統架構,來支持業務的高速發展。本文主要對活動頁面瀏覽方面的性能,進行探討。

活動頁面瀏覽性能提升的難點:

1. 活動與活動之間差異很大,不像商品頁有固定的模式。每個頁面能抽取的公共部分有限,可復用性差。

2. 活動頁面內容多樣,業務繁多。依賴大量外部業務介面,數據很難做到閉環。外部介面的性能,以及穩定性,嚴重製約了活動頁的渲染速度、穩定性。

經過多年在該系統下的開發實踐,提出「頁面渲染、瀏覽非同步化」的思想,並以此為指導,對該系統進行架構升級改造。通過近幾個月的運行,各方面性能都有顯著提升。在分享"新架構"之前,先看看我們現有web系統的架構現狀。

以京東活動系統架構的演變為例,這里沒有畫出具體的業務邏輯,只是簡單的描述下架構:

2.第二步,一般是在消耗性能的地方加緩存,這里對部分查庫操作加redis緩存

3.對頁面進行整頁redis緩存:由於活動頁面內容繁多,渲染一次頁面的成本是很高。這里可以考慮把渲染好的活動內容整頁緩存起來,下次請求到來時,如果緩存中有值,直接獲取緩存返回。

以上是系統應用服務層面架構演進的,簡單示意。為了減少應用伺服器的壓力,可以在應用伺服器前面,加cdn和nginx的proxy_caxhe,降低回源率。

4.整體架構(老)

除了前3步講的「瀏覽服務」,老架構還做了其他兩個大的優化:「介面服務」、靜態服務

1.訪問請求,首先到達瀏覽服務,把整個頁面框架返回給瀏覽器(有cdn、nginx、redis等各級緩存)。

2.對於實時數據(如秒殺)、個性化數據(如登陸、個人坐標),採用前端實時介面調用,前端介面服務。

3.靜態服務:靜態資源分離,所有靜態js、css訪問靜態服務。

要點:瀏覽服務、介面服務分離。頁面固定不變部分走瀏覽服務,實時變化、個性化採用前端介面服務實現。

介面服務:分兩類,直接讀redis緩存、調用外部介面。這里可以對直接讀redis的介面採用nginx+lua進行優化( openresty ),不做詳細講解。 本次分享主要對「瀏覽服務」架構

在講新架構之前先看看新老架構下的新能對比

擊穿cdn緩存、nginx緩存,回源到應用伺服器的流量大約為20%-40%之間,這里的性能對比,只針對回源到應用伺服器的部分。

2015雙十一, 瀏覽方法tp99如下:(物理機)

Tp99  1000ms左右,且抖動幅度很大,內存使用近70%,cpu 45%左右。

1000ms內沒有緩存,有阻塞甚至掛掉的風險。

2.新架構瀏覽服務新能

本次2016 618採用新架構支持,瀏覽tp99如下(分app端活動和pc端活動):

移動活動瀏覽tp99穩定在8ms, pc活動瀏覽tp99 穩定在15ms左右。全天幾乎一條直線,沒有性能抖動。

新架構支持,伺服器(docker)cpu性能如下

cpu消耗一直平穩在1%,幾乎沒有抖動。

對比結果:新架構tp99從1000ms降低到 15ms,cpu消耗從45%降低到1%,新架構性能得到質的提升。

why!!!

下面我們就來揭開新架構的面紗。

1.  頁面瀏覽,頁面渲染 非同步化

再來看之前的瀏覽服務架構,20%-40%的頁面請求會重新渲染頁面,渲染需要重新計算、查詢、創建對象等導致 cpu、內存消耗增加,tp99性能下降。

如果能保證每次請求都能獲取到redis整頁緩存,這些性能問題就都不存在了。

即:頁面瀏覽,與頁面渲染 非同步。

理想情況下,如果頁面數據變動可以通過 手動觸發渲染(頁面發布新內容)、外部數據變化通過監聽mq 自動觸發渲染。

但是有些外部介面不支持mq、或者無法使用mq,比如活動頁面置入的某個商品,這個商品名稱變化。

為了解決這個問題,view工程每隔指定時間,向engine發起重新渲染請求-最新內容放入redis。下一次請求到來時即可獲取到新內容。由於活動很多,也不能確定哪些活動在被訪問,所以不建議使用timer。通過加一個緩存key來實現,處理邏輯如下:

好處就是,只對有訪問的活動定時重新發起渲染。

  整理架構(不包含業務):

 view工程職責 :

  a.直接從緩存或者硬碟中獲取靜態html返回,如果沒有返回錯誤頁面。(文件系統的存取性能比較低,超過   100ms級別,這里沒有使用)

  b.根據緩存key2是否過期,判斷是否向engine重新發起渲染。(如果,你的項目外面介面都支持mq,這個      功能就不需要了)

  engine工程職責 :渲染活動頁面,把結果放到 硬碟、redis。

  publish工程、mq 職責 :頁面發生變化,向engine重新發起渲染。 具體的頁面邏輯,這里不做講解

Engine工程的工作 就是當頁面內容發生變化時,重新渲染頁面,並將整頁內容放到redis,或者推送到硬碟。

View工程的工作,就是根據鏈接從redis中獲取頁面內容返回。

3.view 工程架構 ( 硬碟  版)

 

兩個版本對比

a.Redis版

優點:接入簡單、 性能好,尤其是在大量頁面情況下,沒有性能抖動 。單個docker tps達到 700。

缺點:嚴重依賴京東redis服務,如果redis服務出現問題,所有頁面都無法訪問。

b.硬碟版

優點:不依賴任何其他外部服務,只要應用服務不掛、網路正常 就可以對外穩定服務。

在頁面數量不大的情況下,性能優越。單個docker tps達到 2000。

缺點:在頁面數據量大的情況下(系統的所有活動頁有xx個G左右),磁碟io消耗增加(這里採用的java io,如果採用nginx+lua,io消耗應該會控制在10%以內)。

解決方案:

a. 對所有頁面訪問和存儲 採用url hash方式,所有頁面均勻分配到各個應用伺服器上。

b. 採用nginx+lua  利用nginx的非同步io,代替java io。

現在通過nginx+lua做應用服務,所具有的高並發處理能力、高性能、高穩定性已經越來越受青睞。通過上述講解,view工程沒有任何業務邏輯。可以很輕易的就可以用lua實現,從redis或者硬碟獲取頁面,實現更高效的web服務。如果想學習Java工程化、高性能及分布式、深入淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java進階qun:694549689,裡面有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家。

1.具有1-5工作經驗的,面對目前流行的技術不知從何下手,需要突破技術瓶頸的可以加。

2.在公司待久了,過得很安逸,但跳槽時面試碰壁。需要在短時間內進修、跳槽拿高薪的可以加。

3.如果沒有工作經驗,但基礎非常扎實,對java工作機制,常用設計思想,常用java開發框架掌握熟練的可以加。

通過測試對比,view工程讀本地硬碟的速度,比讀redis還要快(同一個頁面,讀redis是15ms,硬碟是8ms)。所以終極版架構我選擇用硬碟,redis做備份,硬碟讀不到時在讀redis。

這里前置機的url hash是自己實現的邏輯,engine工程採用同樣的規則推送到view伺服器硬碟即可,具體邏輯這里不細講。後面有時間再單獨做一次分享。 

優點:具備硬碟版的全部優點,同時去掉tomcat,直接利用nginx高並發能力,以及io處理能力。各項性能、以及穩定性達到最優。

缺點:1、硬碟壞掉,影響訪問。2.方法監控,以及日誌列印,需使用lua腳本重寫。

無論是redis版、硬碟版、openresty+硬碟版,基礎都是頁面瀏覽與頁面渲染非同步化。

優勢:

1、所有業務邏輯都剝離到engine工程,新view工程理論上永遠無需上線。

2、災備多樣化(redis、硬碟、文件系統),且更加簡單,外部介面或者服務出現問題後,切斷engine工程渲染,不再更新redis和硬碟即可。

3、新view工程,與業務邏輯完全隔離,不依賴外部介面和服務,大促期間,即便外部介面出現新能問題,或者有外部服務掛掉,絲毫不影響view工程正常訪問。

4、性能提升上百倍,從1000ms提升到10ms左右。詳見前面的性能截圖。

5、穩定性:只要view伺服器的網路還正常,可以做到理論上用不掛機。

6、大幅度節省伺服器資源,按此架構,4+20+30=54個docker足以支持10億級pv。(4個nginx proxy_cache、20個view,30個engine)

 從事開發已有近10載,一直就像寄生蟲一樣吸取著網路上的資源。前段時間受「張開濤」大神所託,對活動系統新架構做了一次簡單整理分享給大家,希望能給大家帶來一絲幫助。第一次在網上做分享,難免有些沒有考慮周全的地方,以後會慢慢的多分享一些自己的心得,大家一起成長。最後再來點心靈雞湯。。。

㈣ 如何搭建億級並發的系統架構

想設計億萬級高並發架構,你要先知道高並發是什麼?

面對流量高峰,不同的企業是如何通過技術手段解決高並發難題的呢?

0、引言

軟體系統有三個追求:高性能、高並發、高可用,俗稱三高。三者既有區別也有聯系,門門道道很多,全面討論需要三天三夜,本篇討論高並發。

高並發(High Concurrency)。並發是操作系統領域的一個概念,指的是一段時間內多任務流交替執行的現象,後來這個概念被泛化,高並發用來指大流量、高請求的業務情景,比如春運搶票,電商雙十一,秒殺大促等場景。

很多程序員每天忙著搬磚,平時接觸不到高並發,哪天受不了跑去面試,還常常會被面試官犀利的高並發問題直接KO,其實吧,高並發系統也不高深,我保證任何一個智商在線的看過這篇文章後,都能戰勝恐懼,重拾生活的信心。

本文先介紹高並發系統的度量指標,然後講述高並發系統的設計思路,再梳理高並發的關鍵技術,最後結合作者的經驗做一些延伸探討。

1、高並發的度量指標

既然是高並發系統,那並發一定要高,不然就名不副實。並發的指標一般有QPS、TPS、IOPS,這幾個指標都是可歸為系統吞吐率,QPS越高系統能hold住的請求數越多,但光關注這幾個指標不夠,我們還需要關注RT,即響應時間,也就是從發出request到收到response的時延,這個指標跟吞吐往往是此消彼長的,我們追求的是一定時延下的高吞吐。

比如有100萬次請求,99萬次請求都在10毫秒內響應,其他次數10秒才響應,平均時延不高,但時延高的用戶受不了,所以,就有了TP90/TP99指標,這個指標不是求平均,而是把時延從小到大排序,取排名90%/99%的時延,這個指標越大,對慢請求越敏感。

除此之外,有時候,我們也會關注可用性指標,這可歸到穩定性。

一般而言,用戶感知友好的高並發系統,時延應該控制在250毫秒以內。

什麼樣的系統才能稱為高並發?這個不好回答,因為它取決於系統或者業務的類型。不過我可以告訴你一些眾所周知的指標,這樣能幫助你下次在跟人扯淡的時候稍微靠點兒譜,不至於貽笑大方。

通常,資料庫單機每秒也就能抗住幾千這個量級,而做邏輯處理的服務單台每秒抗幾萬、甚至幾十萬都有可能,而消息隊列等中間件單機每秒處理個幾萬沒問題,所以我們經常聽到每秒處理數百萬、數千萬的消息中間件集群,而像阿某的API網關,每日百億請求也有可能。

2、高並發的設計思路

高並發的設計思路有兩個方向:

閱讀全文

與tp框架如何減少伺服器壓力相關的資料

熱點內容
idea編譯進度條 瀏覽:132
文件夾工具箱軟體 瀏覽:686
最近為什麼手機連不上索尼伺服器 瀏覽:877
海康錄像機怎麼關視頻加密 瀏覽:786
編程以後有可能被機器人代替嗎 瀏覽:522
windows創建文件命令 瀏覽:986
linuxcopy文件內容 瀏覽:383
程序員帥哥禿頂 瀏覽:839
阿里雲伺服器開通流程 瀏覽:105
如何開雲伺服器 瀏覽:979
網站小說源碼 瀏覽:301
php用什麼ide 瀏覽:867
網上預約課程app哪個好 瀏覽:152
android兼容測試工具 瀏覽:96
雲伺服器不支持虛擬化怎麼辦 瀏覽:189
加密方式的演變 瀏覽:364
java常用演算法pdf 瀏覽:734
伺服器數據遇到異常什麼原因 瀏覽:450
phpexif信息 瀏覽:543
單片機三位元組浮點數 瀏覽:757