首頁 後端開發 php教程 php如何實現負載平衡? php實作負載平衡實例(程式碼)

php如何實現負載平衡? php實作負載平衡實例(程式碼)

Jul 25, 2018 pm 03:56 PM

PHP實作負載平衡的方法有很多種,在這裡,我會跟大家介紹一下php的負載平衡,話不多說,我們就來直接看看關於php負載平衡的實作。

1. PHP檔案

第一個問題是,如果你有大量的小型伺服器,你怎麼把你的php檔案上傳到所有的伺服器上?有以下的方法供你參考:

1.分別上傳所有的檔案到每一個伺服器,這種方法帶來的問題是:想像一下你有20個伺服器,那麼上傳過程中這將會很容易導致錯誤,且更新時極有可能導致不同伺服器上有不同版本的檔案。
2. 使用‘rsync ‘ (或類似的軟體) . 這樣的工具能同步本地目錄和多個遠端主機目錄上的檔案。
3.使用版本控制軟體(如subversion ) .這是我最喜歡的方法。用它可以很好地維護我得程式碼,當發布我的應用程式時,可以在每一個伺服器上執行svnupdate命令同步。這種方法也讓切換伺服器得程式碼到過去的某一個版本更加容易。
4.使用一個檔案伺服器(你可能發現NFS 非常適合做這件事情). 這種方式是使用一個檔案伺服器來存放你的web應用.當然,如果你的檔案伺服器宕機,那麼多所有你的站點將不能使用。這時,你就需要花費更多的開支來恢復它。

選擇哪一種方式依賴你的需求和你所掌握的技能。如果你使用版本控制系統,那麼你可能得規劃一個方法如果同時執行一個更新命令來更新所有伺服器上的程式碼。然而,如果使用檔案伺服器,你就要實作一些失敗復原機制,防止萬一伺服器宕機導致請求失敗。

2. 檔案上傳

當只有一台伺服器時,檔案上傳不是一個問題。但是當我們有多台伺服器時,那麼上傳的檔案該怎麼存放呢?上傳檔案的問題和跨伺服器php檔案儲存是類似的。下面是幾個可能的方案:
1. 把檔案儲存到資料庫中 。

大多數資料允許儲存二進位資料。當你請求檔案下載時,存取資料把二進位資料和對應的檔案名稱和類型輸出給使用者。在使用這個方案前應該考慮資料庫怎麼儲存你 的檔案。該方法的問題在於如果資料庫伺服器宕機將使檔案不可用。

2. 在一個檔案伺服器上儲存上傳的檔案.

與前面的介紹一樣,你要安裝一個檔案伺服器讓所有web伺服器共享,把所有上傳的檔案上傳到這裡,上傳後所有的web伺服器就都可以使用它。但是,如果文 件伺服器宕機,那麼可能發生映像檔下載中斷。

3. 設計你自己的上傳機制傳輸檔案到伺服器到每一個伺服器 .

這個方法沒有單一檔案伺服器或資料庫方案的缺陷,但是將增加你程式碼的複雜度。例如,如果上傳到多個伺服器過程中,伺服器當機,你要怎麼處理?

用資料庫儲存上傳檔案但是設計一個檔案快取機制是一個不錯的方案。當伺服器接收一個文件下載請求時,首先檢查快取系統中是否有該文件,如果發現那麼從快取系統下載,否則從資料庫讀取並把它快取到檔案系統中。

3. 會話(Sessions)

如果你熟悉php的session處理,你將可能知道預設情況下,它儲存session資料在伺服器的暫存檔案裡。而且,這個檔案只是在你請求處理的那個伺服器上,但是接下來的請求可能被另外一個伺服器處理,這將在另一個伺服器上產生新的session。這導致session頻繁地不被識別,例如登入使用者總是要求重新登入。

我推薦的方案是,要嘛重新php內建的session處理機制儲存session資料到資料庫,或是實作你自己的機制保證發送一個使用者的請求到同一台伺服器。

4. 設定(Configuration)

儘管這個主題不是和php特別相關,我感覺還是有必要提及。當運行叢集伺服器時,用某種方法保持伺服器之間的設定檔同步是一個好主意。如果設定檔不一致,可能導致一些非常奇怪的斷斷續續的行為導致很難排查這些問題。

我推薦使用版本控制系統單獨管理他們。這樣你可以為不同的專案安裝儲存不同的php設定文件,也可以保持所有伺服器設定檔同步。

5. 日誌(Logging)

就像設定問題一樣,logging不是僅僅和php相關。但是對於保持伺服器健康運行它仍然是非常重要的。沒有正確的logging系統,你怎麼知道如果PHP程式碼開始產生錯誤(在系統正式運行時,你總是關閉display_errors 設定,不是嗎?)

有幾種方法你可以實作logging:

1.在每一個伺服器上記錄日誌。這是最簡單的方法。每一個機器僅僅記錄一個檔案。好處是簡單,可能只要很少的配置。但是,隨著伺服器數量的增多,監控每台伺服器上的日誌檔案將變得非常困難。
2.記錄日誌到一個共享這種方法每一個伺服器仍然有這個日誌文件,但是他們透過共享機制被儲存在一個中央文件伺服器上,這將使監控日誌變得更簡單。該方案的問題在於,如果檔案伺服器不可用將導致一個簡單的日誌不能寫入問題最終導致整個應用程式崩潰。
3.記錄日誌到logging伺服器 你可以使用一個logging軟體,如syslog來把所有的日誌寫到一個中央伺服器。儘管這個方法要求更多的配置,但是他也提供了最健壯的方案。

php負載平衡實例

##如果要使用負載平衡的話,可以修改配置http節點如下:

#设定http服务器,利用它的反向代理功能提供负载均衡支持
            http {
            #设定mime类型,类型由mime.type文件定义
            include       /etc/nginx/mime.types;
            default_type  application/octet-stream;
            #设定日志格式
            access_log    /var/log/nginx/access.log;
#省略上文有的一些配置节点
#。。。。。。。。。。
#设定负载均衡的服务器列表
            upstream mysvr {
            #weigth参数表示权值,权值越高被分配到的几率越大
            server 192.168.8.1x:3128 weight=5;#本机上的Squid开启3128端口
            server 192.168.8.2x:80  weight=1;
            server 192.168.8.3x:80  weight=6;
            }
upstream mysvr2 {
            #weigth参数表示权值,权值越高被分配到的几率越大
server 192.168.8.x:80  weight=1;
            server 192.168.8.x:80  weight=6;
            }
#第一个虚拟服务器
            server {
            #侦听192.168.8.x的80端口
            listen       80;
            server_name  192.168.8.x;
#对aspx后缀的进行负载均衡请求
            location ~ .*\.aspx$ {
root   /root;      #定义服务器的默认网站根目录位置
            index index.php index.html index.htm;   #定义首页索引文件的名称
proxy_pass  http://mysvr ;#请求转向mysvr 定义的服务器列表
#以下是一些反向代理的配置可删除.
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            client_max_body_size 10m;    #允许客户端请求的最大单文件字节数
            client_body_buffer_size 128k;  #缓冲区代理缓冲用户端请求的最大字节数,
            proxy_connect_timeout 90;  #nginx跟后端服务器连接超时时间(代理连接超时)
            proxy_send_timeout 90;        #后端服务器数据回传时间(代理发送超时)
            proxy_read_timeout 90;         #连接成功后,后端服务器响应时间(代理接收超时)
            proxy_buffer_size 4k;             #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            proxy_buffers 4 32k;               #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
            proxy_busy_buffers_size 64k;    #高负荷下缓冲大小(proxy_buffers*2)
            proxy_temp_file_write_size 64k;  #设定缓存文件夹大小,大于这个值,将从upstream服务器传
}
}
登入後複製

相關推薦:

PHP實作負載平衡下的session共用案例詳解(附程式碼)

以上是php如何實現負載平衡? php實作負載平衡實例(程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1? 說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP的持久相關性:它還活著嗎? PHP的持久相關性:它還活著嗎? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型? PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型? Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

See all articles