TCP連線可用性檢測

2022-02-24 05:14:10 字數 1969 閱讀 6598

1:問題的引出

我們假設有兩種服務,a和b。其中b部署在無差別的多台機器上。當a向b請求服務的時候我們通過軟體或是硬體的負載均衡演算法把該請求路由到提供b服務的某台機器上。這個時候b對a提供的服務在可靠性上我們是要做些工作的。如果負載均衡是通過軟體來實現的那麼檢測通向b的tcp鏈結是否可用這個工作就顯得很有必要。如果您認同以上的文字那麼接下來我試著構造乙個場景並提出乙個解決方案來。

2:場景

假設b服務就是我們的快取服務。如果我們通過某些雜湊演算法把不同的內容儲存到快取伺服器上。那麼他的執行序列應該是

1:計算要快取物件的鍵值

2:拿到快取伺服器的列表

好了,問題來了。如果提供b服務的某台機器網路出現瞬斷或是連線不可用了。那麼a將得到大量的錯誤。這個時候我們需要加強快取服務的可靠性指標。

3:解決方案 

基於可靠性考慮,我們可以這樣,建立a到b多台伺服器的長連線,在b不能連通的時候我們把這台不能連通的伺服器從可用服務列表中移除把備用伺服器頂上來,同時把這台不可用的伺服器儲存到不可用列表中。我們再開啟乙個工作,按照策略我們週期性的探測不可用列表中的機器看那台可用,如果某一時刻變得可用了我們再把它加入可用列表同時把備用伺服器頂下來。 

以下提供一些**

public

class

tcpreliabilitycheck

private

void

check(

string

hostaddress, 

intport)

if(port ==0

)iphostentry host 

=dns.gethostentry(hostaddress);

ipaddress addresslist 

=host.addresslist;

ipendpoint point 

=new

ipendpoint(addresslist[addresslist.length -1

], port);

clientsocket 

=new

socket(point.addressfamily, sockettype.stream, protocoltype.tcp);

socketasynceventargs connectargs 

=new

socketasynceventargs();

connectargs.usertoken 

=clientsocket;

connectargs.remoteendpoint 

=point;

connectargs.completed 

+=new

eventhandler

<

socketasynceventargs

>

(onconnect);

clientsocket.connectasync(connectargs);

}private

void

onconnect(

object

sender, socketasynceventargs e)

else

changeinfo(hostaddress,e.socketerror);

}private

void

receive(

object

sender, socketasynceventargs e)

接下來對tcpreliabilitycheck做些介紹。

首先這個類是建立了與某台伺服器的tcp長連線,其次這個類只會把連線出現異常時的資訊發布出來。 

4:後記

當然這只是一種方法。如果您有其他解決方案的話,希望能提出來我們一起討論討論。當然本文的解決方案也接受您的批評指正。

追加乙個狀態圖

可用性測試

工作一直緊張,但今天還是岔出了一件事情,就是對我負責的模組進行使用者可用性測試。兩個小時的測試還是有點收穫,小記之。剛剛從公司的培訓課程中學到了 usability test 沒想到這麼快就用到了實踐中,雖然這次的可用性測試不是很正式的從公司外部請使用者來做,也沒有用單面透視玻璃對使用者行為作 暗訪...

IT系統可用性

it系統可用性重新認識 今天看了一篇關於it系統可用性研究的文章,有些自己的想法,一併記載下來,若以後在此基礎上有新的發現,將及時更新。it系統可用性定義 what it系統中計算機軟硬體,網路等對使用者有效使用和令人滿意的程度。換句話說,盡量縮短因系統崩潰所導致的停機時間。包括確保機器的響應速度,...

可用性測試

1.頁面部分 1.頁面清單是否完整 是否已經將所需的頁面全部都列出來了 2.頁面是否顯示 在不同解析度下頁面是否存在,在不同瀏覽器版本中頁面是否顯示 3.頁面在視窗中的顯示是否正確 美觀 在調整瀏覽器視窗大小時,螢幕重新整理是否顯示 4.頁面特殊效果顯示是否正確 2.頁面元素部分 2.元素是否顯示 ...