Mark1708 / spring-yoomoney-db-queue

Исследование влияния различных параметров таблиц в работе с очередями сообщений на основе базы данных

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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. Кол-во запросов в секунду

Преимущества и недостатки подхода

Преимущества:

  • Низкая стоимость масштабирования.
  • Достойная пропускная способность.
  • Гибкая платформа для реализации разных способов взаимодействия с очередью сообщений.

Недостатки:

  • Является антипаттерном в большинстве случаев.
  • Наличие сложности организации совместной работы нескольких сервисов.

Выводы и дальнейшие перспективы

В ходе работ над этой темой было проведено сравнение различных способов оптимизации таблиц для очереди ообщений и походов к чтению/записи. Как можно заметить наиболее эффективным способом оптимизации очереди оказалось партиционирование таблицы. Тем не менее использование такого подхода по-прежнему распространено для решения ряда задач.

Инструкция по запуску

docker compose up -d

Технологии

  • Spring-Boot 3
  • Java 21
  • PostgreSQL
  • db-queue

Статус

Проект закончен

Цель

Проект сделан в образовательных целях

Контакты

Выполнен Гурьяновым Марком под чутким руководством kartzum

+7(962)024-50-04 | mark1708.work@gmail.com | github

Readme Card

About

Исследование влияния различных параметров таблиц в работе с очередями сообщений на основе базы данных


Languages

Language:Java 99.9%Language:Dockerfile 0.1%Language:Shell 0.1%