Проблема с исходящим TCP-соединением - отправка данных в концентратор событий и озеро данных из функции Azure - PullRequest
0 голосов
/ 09 октября 2018

Я работаю над функцией Azure с триггером http POST, как только клиент вызовет ее и отправит данные json, я отправлю ее в концентратор событий и сохраню в озеро данных.Как только он попадет под высокий трафик, 20к / час, Azure Functino создаст большое исходящее TCP-соединение, которое превысит ограничение (1920) плана.

  1. вызывает ли высокое исходящее TCP-соединение запись в концентратор событий, озеро данных или в обе эти области?
  2. есть ли способ уменьшить его, чтобы мне не пришлось больше платитьобновить наш план?
  3. как его отладить, чтобы устранить проблему?

код отправки данных в концентратор событий:

EventHubClient ehc = EventHubClient.CreateFromConnectionString(cn);

try
{
  log.LogInformation($"{CogniPointListener.LogPrefix}Sending {batch.Count} Events: {DateTime.UtcNow}");

  await ehc.SendAsync(batch);

  await ehc.CloseAsync();
}
catch (Exception exception)
{
  log.LogError($"{CogniPointListener.LogPrefix}SendingMessages: {DateTime.UtcNow} > Exception: {exception.Message}");
  throw;
}

здесьэто отправка данных в озеро данных:

var creds = new ClientCredential(clientId, clientSecret);
var clientCreds = ApplicationTokenProvider.LoginSilentAsync(tenantId, creds).GetAwaiter().GetResult();

// Create ADLS client object
AdlsClient client = AdlsClient.CreateClient(adlsAccountFQDN, clientCreds);

try
{
    using (var stream = client.CreateFile(fileName, IfExists.Overwrite))
    {
        byte[] textByteArray = Encoding.UTF8.GetBytes(str);
        stream.Write(textByteArray, 0, textByteArray.Length);
    }

    // Debug
    log.LogInformation($"{CogniPointListener.LogPrefix}SaveDataLake saved ");
}
catch (System.Exception caught)
{
    string err = $"{caught.Message}Environment.NewLine{caught.StackTrace}Environment.NewLine";
log.LogError(err, $"{CogniPointListener.LogPrefix}SaveDataLake");
    throw;
}

Спасибо,

1 Ответ

0 голосов
/ 24 октября 2018

Соединения TCP ограничены определенными номерами в зависимости от плана, на котором вы выполняете свои функции (потребление или статический план на любом уровне B / S / P).Для больших рабочих нагрузок я предпочитаю либо

A : использовать очередь с отдельной функцией и ограничивать параллелизм размером пакета функций и другими настройками

или

B : используйте SemaphoreSlim для управления параллелизмом исходящего трафика.(https://docs.microsoft.com/de-de/dotnet/api/system.threading.semaphoreslim?redirectedfrom=MSDN&view=netframework-4.7.2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...