Тема: Исследование влияния различных параметров таблиц в работе с очередями сообщений на основе базы данных
Целью данного научно-исследовательской работы является изучение влияния различных параметров таблиц в работе с очередями сообщений на основе базы данных.
Основной акцент будет сделан на оптимизацию пропускной способности очереди сообщений, с целью достичь 1000 RPS.
- Разработка библиотеки для взаимодействия с базой данных в качестве брокера сообщений.
- Подготовка базы данных для проведения экспериментов.
- Проектирование и реализация двух сервисов - Producer и Consumer, обеспечивающих передачу и прием данных через брокера сообщений.
- Оптимизация базы данных
- Тестирование различных параметров таблицы и их влияния на эффективность системы.
Для тестирования использовалась база данных PostgreSQL.
С таблицами на которых проводились тесты можно ознакомиться в файле sql/create_tables.sql
queue_tasks_1
- Обычная таблицаqueue_tasks_2
- Вакумация + индекс btreequeue_tasks_3
- Вакумация + индекс btree + fillfactorqueue_tasks_4
- Вакумация + индекс btree + fillfactor + партиционировани с секционированием на 6 частейqueue_tasks_5
- Вакумация + индекс btree + fillfactor + партиционировани с секционированием на 8 частей
Конфигурация | Batch | RPS | Изменение | Изменение в % |
---|---|---|---|---|
queue_tasks_1 | 1 | 334,69 | Будем считать за 0 | Будем считать за 0 |
queue_tasks_1 | 10 | 1222,82 | 888,12 | 265,35 |
queue_tasks_2 | 10 | 1275,85 | 941,15 | 281,20 |
queue_tasks_3 | 10 | 1230,76 | 896,06 | 267,73 |
queue_tasks_4 | 10 | 1310,81 | 976,11 | 291,64 |
queue_tasks_5 | 10 | 1314,12 | 979,42 | 292,63 |
queue_tasks_5 | 20 | 1289,58 | 954,88 | 285,30 |
Тестирование проводилось в достаточно щадящем режиме)
Как можно заметить самым эффективным вариантом оказалось использование сетапа таблицы queue_tasks_5
с записью/чтением батчами по 10 записей.
Далее я провел тестирование с более высокими нагрузками и проанализировал более детально нагрузку в течении работы системы.
Результаты тестирования показали стабильную работу системы при максимальной нагрузке.
Показатели нагрузки в течение тестирования и анализ метрик позволяют сделать выводы о эффективности и устойчивости разработанного подхода.
Рисунок 1. Задержка (min/avg/max)
Рисунок 2. Кол-во запросов в секунду
Преимущества:
- Низкая стоимость масштабирования.
- Достойная пропускная способность.
- Гибкая платформа для реализации разных способов взаимодействия с очередью сообщений.
Недостатки:
- Является антипаттерном в большинстве случаев.
- Наличие сложности организации совместной работы нескольких сервисов.
В ходе работ над этой темой было проведено сравнение различных способов оптимизации таблиц для очереди ообщений и походов к чтению/записи. Как можно заметить наиболее эффективным способом оптимизации очереди оказалось партиционирование таблицы. Тем не менее использование такого подхода по-прежнему распространено для решения ряда задач.
docker compose up -d
- Spring-Boot 3
- Java 21
- PostgreSQL
- db-queue
Проект закончен
Проект сделан в образовательных целях
Выполнен Гурьяновым Марком под чутким руководством kartzum