У нас есть распределенная архитектура микросервисов для выполнения различных рабочих нагрузок и сохранения рабочего состояния в grid-fs
, чтобы каждый другой микросервис поддерживал состояние.
Мы столкнулись с некоторыми существенными проблемами производительности при создании большого количества операций чтения / записи в grid-fs, а также большого количества Total Connections Created
во время выполнения указанной рабочей нагрузки.
Мы сделали предположение, что большое количество создаваемых подключений ( ниже) вызывает скачок модуля mon go pod (Kubernates) до 100%.
1 - Правильно ли составлен график Total Connections Create? Есть ли другой способ проверить это?
2 - Если общее количество подключений верное, почему наши подключения не объединяются?
Пример кода для подражания
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
}