2017-10-10 85 views
0

我們有一個基於erlang的分佈式系統系統,其中包含一個服務器節點和數百個客戶端節點(系統通過內部網絡分佈)。我們要求所有客戶端節點都將連接到服務器節點,並嘗試使用sftp同時下載某個文件(大多數情況下所有客戶端節點將訪問相同的文件)。我們按照下載的文件的步驟是:erlang ssh_sftp start_channel函數調用失敗

  1. 建立服務器節點和客戶端節點之間的ssh連接SFTP使用如下函數調用:

    ssh_sftp:start_channel/2

  2. 然後按照下面的做函數調用讀取文件:

    ssh_sftp:read_file/2

我們面對的問題是,當客戶端的數量較多,則觀察到幾個客戶端節點無法建立服務器節點之間的連接。即ssh_sftp:start_channel/2函數調用失敗。

請有人請解釋我;

  1. 對於我們可以在單個系統中建立的sftp會話數量是否有任何限制?

  2. 連接請求失敗的原因是什麼?

  3. 我們在這種方法中做了什麼錯誤?

  4. 有沒有更好的解決方案,我們可以保證所有的客戶端節點都能夠連接到服務器並能夠下載文件。

觀察:我們嘗試連接25個客戶端節點到服務器;在第一次嘗試期間,只有2個節點無法連接,第二次嘗試5個節點無法連接。爲什麼這是隨機的行爲?

+0

什麼是實際'ssh_sftp:start_channel/2'返回? – codeadict

回答

0

我想我可以回答以下一些問題(修理我,如果我錯了):

  1. Erlang是真正的強者,當你使用這個共存,所以你在這裏的問題是你的物理硬件(服務器)的功率。
  2. 我真的不知道你的項目出了什麼問題,但是我關於電信的項目可以很容易地處理一個由兩個進程處理每個呼叫的千次呼叫。 1進程是主進程處理會話(連接)並彼此監視和處理錯誤主進程,以至於無法連接失敗