Научная статья на тему 'Использование СУБД Redis в качестве промежуточного хранилища данных для PostgreSQL'

Использование СУБД Redis в качестве промежуточного хранилища данных для PostgreSQL Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
1481
79
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
NOSQL / REDIS / POSTGRESQL / СУБД / БАЗЫ ДАННЫХ / УПРАВЛЕНИЕ ДАННЫМИ / DBMS / DATABASES / DATA MANAGEMENT

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Рубин Олег Ильич

В статье рассмотрена возможность повышения производительности работы информационной системы, в которой в качестве основного хранилища данных используется реляционная система управления базами данных PostgreSQL. Как средство увеличения производительности применяется нереляционная система управления базами данных Redis, используемая в качестве промежуточного хранилища (кэша). Было проведено внедрение Redis в нагруженной информационной системе. Полученные результаты свидетельствуют о том, что использование как Redis, так и других нереляционных хранилищ данных в качестве промежуточного слоя между приложением и основным реляционным хранилищем данных значительно увеличивает производительность системы, особенно за счет уменьшения времени выполнения часто повторяющихся запросов.The article considers the possibility of improving the performance of an information system that uses the PostgreSQL relational database management system as the main data storage. The non-relational database management system Redis is used as an intermediate storage (cache) as a means of increasing performance. Redis was implemented in a loaded information system. The results show that using both Redis and other non-relational data stores as an intermediate layer between the application and the main relational data store significantly increases system performance, especially by reducing the execution time of frequently repeated queries.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Использование СУБД Redis в качестве промежуточного хранилища данных для PostgreSQL»

ИСПОЛЬЗОВАНИЕ СУБД REDIS В КАЧЕСТВЕ ПРОМЕЖУТОЧНОГО ХРАНИЛИЩА ДАННЫХ ДЛЯ POSTGRESQL

USING THE REDIS DBMS AS AN INTERMEDIATE DATA STORE FOR

POSTGRESQL

УДК-004

Рубин Олег Ильич

студент, УрФУ им. Б. Н. Ельцина, ИРИТ РтФ, г.Екатеринбург, ул. Мира, д. 32 Rubin Oleg Ilyich olegrubin97@gmail.com

АННОТАЦИЯ

В статье рассмотрена возможность повышения производительности работы информационной системы, в которой в качестве основного хранилища данных используется реляционная система управления базами данных PostgreSQL. Как средство увеличения производительности применяется нереляционная система управления базами данных Redis, используемая в качестве промежуточного хранилища (кэша). Было проведено внедрение Redis в нагруженной информационной системе. Полученные результаты свидетельствуют о том, что использование как Redis, так и других нереляционных хранилищ данных в качестве промежуточного слоя между приложением и основным реляционным хранилищем данных значительно увеличивает производительность системы, особенно за счет уменьшения времени выполнения часто повторяющихся запросов.

ANNOTATION

The article considers the possibility of improving the performance of an information system that uses the PostgreSQL relational database management system as the main data storage. The non-relational database management system Redis is used as an intermediate storage (cache) as a means of increasing performance. Redis was implemented in a loaded information system. The results show that using both Redis and other non-relational data stores as an intermediate layer between the application and the main relational data store significantly increases system performance, especially by reducing the execution time of frequently repeated queries. Ключевые слова: NoSQL, Redis, PostgreSQL, СУБД, базы данных, управление данными.

Keywords: NoSQL, Redis, PostgreSQL, DBMS, databases, data management.

1646

Введение

Redis (remote dictionary server) - это высокопроизводительная БД с открытым исходным кодом, которая хранит данные в памяти, загружая их при старте сервера. Является базой данных класса NoSQL, используется как в качестве баз данных, так и для реализации кэшей (от англ. cache -промежуточное, временное хранилище данных с меньшим временем обращения чем основное хранилище, используемое с целью повышения производительности работы системы). Ориентирована на достижение максимальной производительности на атомарных операциях (set/get).

СУБД Redis написана на языке Си, имеет открытый исходный код и распространяется по лицензии BSD (не запрещающей бесплатное коммерческое использование продукта при условии упоминания авторов в коде программного обеспечения).

В данной статье рассматривается использование СУБД Redis в качестве кэша приложения на платформе ASP.NET Core, написанной на языке программирования C#, представляющей из себя чат-бота в мессенджере (интеллектуального агента) для управления цифровыми финансовыми активами.

Описание приложения и нагрузки на PostgreSQL

В ходе работы бота пользователь вводит команды (либо эти команды вводятся автоматически при нажатии на кнопки), данные поступают на сервер мессенджера, а затем по технологии WebHook (когда мы заранее сообщаем мессенджеру адрес сервера приложения, и он отправляет туда все обновления) поступают на сервер приложений бота на .net core. В качестве основной СУБД приложения используется PostgreSQL версии 9.6.

1647

Рисунок 1 - Интерфейс бота в мессенджере

Количество пользователей приложения на промышленном стенде -100 000 человек, приблизительный средний «онлайн» (количество единовременно работающих с системой пользователей) - 10000. Наиболее частым запросом является запрос данных текущего пользователя - он выполнятся при выполнении абсолютно любых команд в боте, по данным pg_stat_statements среднее время выполнения запроса составляет 112 мс и запрос выполняется порядка 10200 раз в секунду.

Рисунок 2 - Статистика запроса примерно через секунду после вызова pg_stat_statements_reset()

LIMIT ?

102 39 0.112 0 112 0 112 SELEC- usr.id, usi.aUlofiiailbax_enabled: usr 3u1c_mailbcx_ogin. usr aulo_maibox_pas5woid, i FROM public_ussrs AS usr WHERE usr.lelegram usemams = 51 LIMIT ?

15 0.00413зззззззззззз 0 003 0 007 ? ЕТ Ьу1еа_ои1ри1 О гзггре

Согласно документации, СУБД Redis может обрабатывать порядка 81000 GET-запросов и 110000 SET-запросов в секунду, при этом сами запросы происходят практически мгновенно по меркам компьютерной программы, т.к. данные полностью выгружаются в память. Соответственно, в данном случае он идеально подходит, потому что значительного роста числа пользователей не предвидится.

Для использования кеша в приложении изначально был создан интерфейс ICache, имеющий реализацию RedisService, исходный код приведён в приложении.

В метод, запрашивающий в коде приложения пользователя из БД, было добавлено условие, что сначала необходимо запросить пользователя по ключу (в формате {ключ_сервера}telegramPropKey: {идентификатор_пользователя}) из кэша (redis) и, если он там найден, вернуть его ещё до запроса к PostgreSQL.

return^JsoriSerializer^ Deserialize<TelegramLser>( (string)cache[V .CachedDbUser]) j

Рисунок 3 - Код запроса пользователя из БД на языке C#

1648

Научно-образовательный журнал для студентов и преподавателей «StudNet» №9/2020

Конфигурация и внедрение

Была выполнена настройка подключения приложения к базе данных Redis. В частности, были установлены следующие параметры: REDIS_CONNECTION - строка подключения к серверу Redis, содержит хост и порт;

REDIS_DNS - необходимость использования локального DNS-сервера для

резольва домена хоста из REDIS_CONNECTION. Данная настройка

используется только на промышленном контуре, где Redis разворачивается на

отдельной виртуальной машине в локальной сети с доменом mredis;

REDIS_PASSWORD - пароль от redis. Используется только тогда, когда

установлена аутентификация через пароль (де-факто данная настройка так и

не пригодилась - на всех контурах осталась пустой).

"POSTGRE DEV": "Server=35.294.176.154 ;Fort=5432;Database=zilliq

"REDISCONNECTION" : "localhost : 6379" "REDISONS": "false", ■REDIS_PASSWORD":

"BUI lOKtN": "ТТ7зВ7з261:AAGHVClWgZbJKlnyhtOZS/FbSeJwDZcfAXO", Рисунок 4 - Настройки подключения к Redis

Далее была произведена установка redis-server на контуры посредством утилиты apt-get, применены настройки подключения. Полученные результаты

Примерно через 12 часов были сняты метрики и получены результаты работы приложения с применением Redis. Работа всех запросов к серверу приложений от бота ускорена минимум на 100 милисекунд за счёт перехода на in-memory cache в виде Redis. Количество ключей на промышленном сервере Redis (получено командой redis-cli DBSIZE) - 19381. Запрос пользователя по telegram_username ушёл из топа запросов в PostgreSQL представлении pg_stat_statements (остались буквально несколько десятков запросов тех пользователей, которых ещё нет в кэше).

Литература

1. Высоконагруженные приложения. Программирование, масштабирование, поддержка /Клеппман Мартин. — Питер, 2018. — 740с.

2. How fast is redis? [Электронный ресурс] /. — Электрон. журн. — Режим доступа: https://redis.io/topics/benchmarks

3. What is redis? [Электронный ресурс] /. — Электрон. журн. — Режим доступа: https://github.com/antirez/redis

4. Redis licenses [Электронный ресурс] /. — Электрон. журн. — Режим доступа: https://www.openhub.net/p/redis/licenses

1649

5. VMWare: Redis new home [Электронный ресурс] /. — Электрон. журн. — Режим доступа: http://oldblog.antirez.com/post/vmware-the-new-redis-home.html

6. Дополнительно поставляемые модули PostgreSQL [Электронный ресурс] /. — Электрон. журн. — Режим доступа: https://postgrespro.ru/docs/postgrespro/9.6/pgstatstatements

Literature

1. High-load applications. Programming, scaling, support of Klapman Martin. -Peter, 2018 — - 740C.

2. How fast is redis? [Electronic resource] /. — Electron. journal. — Mode of access: https: //redis. io/topics/benchmarks

3. What is redis? [Electronic resource] /. — Electron. journal. — Mode of access: https: //github .com/antirez/redis

4. Redis licenses [Electronic resource] /. - Electron. journal. — Mode of access: https://www.openhub.net/p/redis/licenses

5. VMWare: the new Redis home [Electronic resource] /. — Electron. journal. — Mode of access: http://oldblog.antirez.com/post/vmware-the-new-redis-home.html

6. Additionally delivered PostgreSQL modules [Electronic resource] /. - Electron. journal. — Mode of access: https://postgrespro.ru/docs/postgrespro/9.6/pgstatstatements

1650

i Надоели баннеры? Вы всегда можете отключить рекламу.