Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mark1708/spring-yoomoney-db-queue
Исследование влияния различных параметров таблиц в работе с очередями сообщений на основе базы данных
https://github.com/mark1708/spring-yoomoney-db-queue
db db-queue postgresql queue spring-boot
Last synced: about 2 months ago
JSON representation
Исследование влияния различных параметров таблиц в работе с очередями сообщений на основе базы данных
- Host: GitHub
- URL: https://github.com/mark1708/spring-yoomoney-db-queue
- Owner: Mark1708
- Created: 2024-01-16T20:35:32.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2024-02-03T14:51:11.000Z (11 months ago)
- Last Synced: 2024-02-03T15:41:10.756Z (11 months ago)
- Topics: db, db-queue, postgresql, queue, spring-boot
- Language: Java
- Homepage:
- Size: 498 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# spring-yoomoney-db-queue
## Тема: Исследование влияния различных параметров таблиц в работе с очередями сообщений на основе базы данных## Задачи
### Цель исследования
Целью данного научно-исследовательской работы является изучение влияния различных параметров таблиц в работе с очередями сообщений на основе базы данных.Основной акцент будет сделан на оптимизацию пропускной способности очереди сообщений, с целью достичь **1000 RPS**.
### Задачи и этапы исследования
1. Разработка библиотеки для взаимодействия с базой данных в качестве брокера сообщений.
2. Подготовка базы данных для проведения экспериментов.
3. Проектирование и реализация двух сервисов - Producer и Consumer, обеспечивающих передачу и прием данных через брокера сообщений.
4. Оптимизация базы данных
5. Тестирование различных параметров таблицы и их влияния на эффективность системы.## Результаты
Для тестирования использовалась база данных PostgreSQL.С таблицами на которых проводились тесты можно ознакомиться в файле `sql/create_tables.sql`
* `queue_tasks_1` - Обычная таблица
* `queue_tasks_2` - Вакумация + индекс btree
* `queue_tasks_3` - Вакумация + индекс btree + fillfactor
* `queue_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. Кол-во запросов в секунду
### Преимущества и недостатки подхода
Преимущества:
* Низкая стоимость масштабирования.
* Достойная пропускная способность.
* Гибкая платформа для реализации разных способов взаимодействия с очередью сообщений.Недостатки:
* Является антипаттерном в большинстве случаев.
* Наличие сложности организации совместной работы нескольких сервисов.### Выводы и дальнейшие перспективы
В ходе работ над этой темой было проведено сравнение различных способов оптимизации таблиц для очереди ообщений и походов к чтению/записи.
Как можно заметить наиболее эффективным способом оптимизации очереди оказалось партиционирование таблицы.
Тем не менее использование такого подхода по-прежнему распространено для решения ряда задач.## Инструкция по запуску
```shell
docker compose up -d
```## Технологии
* Spring-Boot 3
* Java 21
* PostgreSQL
* [db-queue](https://github.com/db-queue/db-queue)## Статус
Проект _закончен_## Цель
Проект сделан в образовательных целях## Контакты
Выполнен [Гурьяновым Марком](https://mark1708.github.io/) под чутким руководством [kartzum](https://github.com/kartzum)
#### +7(962)024-50-04 | [email protected] | [github](http://github.com/Mark1708)![Readme Card](https://github-readme-stats.vercel.app/api/pin/?username=Mark1708&repo=spring-yoomoney-db-queue&theme=chartreuse-dark&show_icons=true)