как управлять одновременными подключениями к sftp из функции - PullRequest
0 голосов
/ 05 июля 2019

Как мы управляем параллельными соединениями, возможно, путем пакетирования файлов в одно и то же соединение?

Я создаю функцию Azure, которая будет запускаться новыми BLOB-объектами (это можно изменитьна простой таймер-триггер).Пример большого двоичного объекта:

{
"server":"sftp.mysftpserver.com",
"credentials":"topsecret",
"body":"This text will be uploaded to the sftp server above"
}

Функция войдет на сервер и отправит полезную нагрузку в body.

Как ограничить число подключений, инициируемых к одному и тому же серверу?

У нас может быть 500 BLOB-объектов, которые все запускают функцию, что, в свою очередь,открывает 500 соединений с: sftp.mysftpserver.com.

В то же время может быть только 2 больших объекта, которые инициируют соединения с sftp.otherserver.net.

1 Ответ

0 голосов
/ 25 июля 2019

Без дополнительной информации о конкретной реализации я могу дать только общие советы.Предполагая, что вы используете какой-то FTP-клиент, вы можете использовать статический экземпляр этого клиента , чтобы поделиться им с экземпляром Functions.Если пропускная способность слишком высока, то служба функций будет масштабироваться до нескольких экземпляров, но при условии, что вы находитесь в плане потребления, это будет макс. При 200 .Если не будет огромного узкого места, пик 500 документов, вероятно, будет удален до того, как масштабирование достигнет 200 экземпляров.

Например, вы бы сделали что-то вроде этого:

// Create a single, static SftpClient
private static SftpClient client = new sftpClient(endpoint, user, pass);

public static async Task Run(string input)
{
    var response = await sftpClient.SendAsync("filename.txt", input);
}

Есливы не используете библиотеку SFTP, которая может делать это по умолчанию, вы можете создать статический вспомогательный класс, который обрабатывает создание клиента.

...