AWS Число подключений ElastiCache (Memcached) постоянно увеличивается - PullRequest
0 голосов
/ 05 августа 2020

У меня есть лямбда-функция в AWS (. NET Core), созданная для переноса параметров хранилища параметров из Simple Systems Management в Memcached для легкого / быстрого доступа моего бессерверного приложения. Несмотря на то, что моя функция конфигурации использует синтаксис using для клиента Memcached (что, как я ожидал, означало, что соединение будет освобождено из кеша после завершения работы), количество подключений постоянно растет. Моя функция запускается каждые 60 секунд для синхронизации c значений параметров.

Вот как выглядит количество подключений.

введите описание изображения здесь

Вот мой код функции прототипа:

    public async Task<bool> LcsConfigurationSweeper(ILambdaContext context)
    {
        try
        {
            context.Logger.LogLine($"Configuration Sweeper activated");
            ElastiCacheClusterConfig config = new ElastiCacheClusterConfig("*******", *******);

            using (var client = new MemcachedClient(config))
            {
                GetParametersByPathRequest getParametersByPathRequest = new GetParametersByPathRequest
                {
                    Recursive = true,
                    WithDecryption = true,
                    Path = "***"
                };

                var getParametersByPathResponse = await _systemsManagementClient.GetParametersByPathAsync(getParametersByPathRequest);
                foreach (var parameter in getParametersByPathResponse.Parameters)
                {
                    Object value; // Memcached value

                    if (client.TryGet(parameter.Name, out value))
                    {
                        if (value.ToString() != parameter.Value)
                        {
                            context.Logger.LogLine($"Configuration sweeper has detected {parameter.Name} has changed. Updating.");
                            if (client.Store(Enyim.Caching.Memcached.StoreMode.Replace, parameter.Name, parameter.Value))
                            {
                                context.Logger.LogLine($"Parameter {parameter.Name} updated in cache OK.");
                                return true;
                            }
                            else
                            {
                                context.Logger.LogLine($"Exception: Parameter {parameter.Name} unable to be updated in cache.");
                            }
                        }
                    }
                    else
                    { 
                        if (client.Store(Enyim.Caching.Memcached.StoreMode.Set, parameter.Name, parameter.Value))
                        {
                            context.Logger.LogLine($"Parameter {parameter.Name} stored in cache OK.");
                            return true;
                        }
                        else
                        {
                            context.Logger.LogLine($"Exception: Parameter {parameter.Name} unable to be stored in cache.");
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            context.Logger.LogLine($"Exception: {ex.ToString()}");
        }

        return false; 
    }
...