2011-02-03 32 views
0

正如我的問題題目中所述,我目前面臨着如何進行負載平衡,供應多種服務的應用程序的問題。匯聚多業務應用

的應用是存儲在存儲分區的用戶的文件存儲服務。這些文件本身並不實際存儲在應用程序服務器上,而是存儲在網絡存儲上。應用程序服務器用於加密/解密數據並提供多種服務,使用戶能夠訪問其數據。 這些服務目前包括FTP,SFTP,HTTP以及供內部使用的JNDI/RMI,並可能在未來其他專有或自己的協議中得到增強。

兩個文件桶可能不會在同一時間兩個服務器進行訪問,所以我想任何路線服務的任何調用同一個羣集節點,如果它仍在運行。如果不是,另一臺服務器將打開到存儲區的連接並將其提供給用戶。

你怎麼集羣這樣的應用程序?我查看了Tomcat和JBoss AS集羣指南,並閱讀了一些關於Java EE集羣的文章,但沒有任何東西可以讓我瞭解如何實現我的目標。我認爲我的主要問題之一是負載平衡,我可能無法在這裏使用任何標準解決方案。

+0

我想知道你怎麼例如做SFTP的負載均衡,因爲你將不得不解密所有網絡傳輸? – Erik 2011-02-05 08:46:14

回答

1

我很想創建從文件名稱的哈希值,並用它來確保負載比較平衡開始。

對於一個簡化的例子(C):

hash = 0 
for(i = 0; i < strlen(file_name); i++) { 
    hash ^= (hash << 5)^file_name[i]; 
} 
server_number_for_this_file = hash % total_servers; 

對於像發現在一個特定的組中的所有文件,要求所有的服務器和合並的答覆。對於例如第一臺服務器可能會返回「hello」和「foo」,而第二臺服務器可能會返回「goodbye」和「bar」,因此您可以將這些部分列表合併爲一個4個文件的列表。

注:我假設應用程序服務器高速緩存目錄下的內容,以避免hassling網絡存儲所有的時間,所以這也提高緩存效率(如10個應用程序服務器,每個應用程序服務器只需要緩存的10%目錄內容數據而不是100%)。

當然,我也會試圖在客戶機上進行加密/解密,以便在客戶機和應用程序服務器之間傳輸的文件數據(通過不可信的互聯網?)被加密,而不是「純文本」通過不受信任的網絡,只對在應用程序服務器和網絡存儲器(在可信網絡上)之間傳輸的數據進行加密。

+0

在此處受支持的運行時故障轉移或添加新服務?發生這種情況時,我認爲我必須清理緩存,對吧? – Erik 2011-02-03 11:06:35