MongoDB: большое общее количество подключений / высокий процессор - PullRequest
0 голосов
/ 19 июня 2020

У нас есть распределенная архитектура микросервисов для выполнения различных рабочих нагрузок и сохранения рабочего состояния в grid-fs, чтобы каждый другой микросервис поддерживал состояние.

Мы столкнулись с некоторыми существенными проблемами производительности при создании большого количества операций чтения / записи в grid-fs, а также большого количества Total Connections Created во время выполнения указанной рабочей нагрузки.

Мы сделали предположение, что большое количество создаваемых подключений ( ниже) вызывает скачок модуля mon go pod (Kubernates) до 100%.

1 - Правильно ли составлен график Total Connections Create? Есть ли другой способ проверить это?

2 - Если общее количество подключений верное, почему наши подключения не объединяются?

Пример кода для подражания

Total Connections Created

public static IServiceCollection AddMongoDatabus(this IServiceCollection services, IConfiguration config, string sectionKey = "MongoDatabus")
{
        services.Configure<MongoSettings>(config.GetSection(sectionKey));

        var mongoSettings = config.GetSection(sectionKey).Get<MongoSettings>();
        var mongoConnection = new MongoConnection(mongoSettings);
        services.TryAddSingleton<IMongoConnection>(mongoConnection);
        services.TryAddSingleton(mongoSettings);
        services.TryAddSingleton<IMongoDatabus>(new MongoDatabus(mongoConnection, mongoSettings));

        return services;
 }

public class MongoConnection
{
    private readonly MongoClient _client;

    public MongoConnection(MongoSettings settings)
    {
       _client = GetMongoClient();
    }


    private MongoClient GetMongoClient()
    {
         //Auth Code removed
         return new MongoClient(...Connection String etc..); //Mongo Client Lib
    }
}

public class MongoDatabus
{
    private readonly MongoSettings _settings;
    private readonly IGridFSBucket _fs;

    public MongoDatabus(IMongoConnection connection)
    {
        _settings = settings;
        _fs = new GridFSBucket(connection.GetDatabase("DbName"));
    }

//Other methods to use GridFs
}
...