Ping
Ping 是檢查伺服器是否可用的可靠方法嗎?
在我的應用程序中,我正在 ping 伺服器並等待響應。我正在使用它來確定伺服器是否可用和響應。
這是確定可用性的可靠方法嗎?我假設防火牆可以過濾 icmp 流量……還有其他缺點嗎?有沒有更靠譜的方法?
判斷任何給定遠端服務是否處於活動狀態的最佳方法是要求它按照其應有的方式為請求提供服務——事實上,這是真正知道某事是否正常工作的唯一方法。
舉個例子,我總是讓我的負載均衡器從我們的網路伺服器獲得一個實際的“頭部”響應,如果你願意,你可以對數據庫盒上的一個小選擇做同樣的事情,或者你的實際伺服器提供的任何服務。作為提示,您可以在您的 Web 伺服器上創建一個“online.txt”(或任何您想給它的名稱),讓您的 LB 嘗試獲取該文件,如果它失敗,那麼它會從 VIP 中刪除伺服器,這是只需重命名單個文件即可手動將單個伺服器從您的 VIP 中取出的好方法。
Ping 僅測試響應 ping 的能力,因此這是基本作業系統、IP 堆棧的一部分和物理連結——但僅此而已,其他一切都可能出現故障,而您不知道。
我知道下面提到了這一點,但它需要一次又一次地重複。
ICMP Echo Requests(又名“Pings”)(又名 ICMP Type 8)建立在 IP 堆棧規範之上,是的,但不需要實現或使用。事實上,有大量網際網路提供商拒絕轉發這些請求並默默地丟棄這些請求,因為它們是一種網路攻擊形式(稱為 pingflood)。
如上所述,這是由作業系統處理的(特別是在網路堆棧級別),因此取決於作業系統配置來響應與否。如果關閉此功能(安全預防措施?),您將無法接收來自另一端的 ping 回复。這就是它不可靠的原因。