我怎麼寫一個程式自動判斷,別人的伺服器變慢,他們有兩個介面地址,位於兩台不同的伺服器,那麼,我怎麼用程式自動判斷一個伺服器變慢了,自動切換到下一個伺服器中請求連結呢???我使用php寫的程式
回複內容:
我怎麼寫一個程式自動判斷,別人的伺服器變慢,他們有兩個介面地址,位於兩台不同的伺服器,那麼,我怎麼用程式自動判斷一個伺服器變慢了,自動切換到下一個伺服器中請求連結呢???我使用php寫的程式
很奇怪這個功能(類似負載平衡),竟然需要在用戶端(也就是你的程式)這邊來做。
兩個建議:
和服務方溝通下,看看他們是否可以做。
如果只能自己做,建議做一個類似網關的程式,主要邏輯非常簡單,接收你php發來的http請求,預設轉寄到第一台伺服器,如果逾時(一個你覺得意味著它比較慢的時間),則轉寄到下一個伺服器。你也可以在php中寫這樣的邏輯(封裝一個http client即可,盡量和商務邏輯隔離開)。
希望能幫到你。好運。
裝置:A伺服器,B伺服器,C反向 Proxy伺服器
AB伺服器做資料處理。
C伺服器作請求處理。
以下是一些反向 Proxy的配置,可選。
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; #設定Proxy 伺服器(nginx)儲存使用者頭資訊的緩衝區大小
proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k以下的設定
proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2)
1,兩台一樣就做負載平衡,或使用ping得時間長度貨使用其他工具remote查看單機負載;
2,如果一個業務流需要兩步伺服器共同分步參與,請將其中一台逆向代理另一部;全部網路請求使用同一台伺服器相應根據使用者不同業務流步驟分配伺服器;比如:A負責使用者步驟1,B負責使用者步驟2;步驟1負載較輕,那麼我們得方案:A既有直接處理得後端,又AB兩台伺服器的逆向代理;使用者處於步驟1得時候,負載在伺服器A,使用者處於負載2得時候,負載處於伺服器B+一部分A;這樣,AB兩台伺服器通訊可以做到一個本地串連內,而使用者只可看到伺服器A;
PS:如果AB伺服器負載預估都會很重,那麼建議按照"悲慘的大爺"建議那樣,加入伺服器C;