Гібридне та динамічне багатокористувацьке розгортання баз даних з Ruby on Rails

У цьому пості ми поділимося досвідом впровадження гібридної та динамічної системи багатокористувацьких баз даних для одного з проектів, до якого ми залучені. Якщо ви не знайомі з будь-якими з цих понять, не хвилюйтеся — ми розглянемо їх детально.

Розуміння багатокористувацьких баз даних

Щоб краще зрозуміти багатокористувацькі бази даних, давайте спершу подивимось на однотипне розгортання, яке є його протилежністю.

Однокористувацьке розгортання

Однокористувацьке розгортання — це архітектура програмного забезпечення, в якій кожен клієнт (орендар) має окремий екземпляр програмного забезпечення разом із власною базою даних. Цей підхід забезпечує ізоляцію між клієнтами, але вимагає більших ресурсів та додаткових витрат на обслуговування.

Багатокористувацьке розгортання

Багатокористувацьке розгортання, з іншого боку, є архітектурою, де кілька клієнтів (орендарів) користуються одним екземпляром програмного забезпечення, при цьому їхні дані логічно ізольовані, що може передбачати одну або кілька баз даних.
Цей підхід є більш ефективним з точки зору використання ресурсів і простіший в обслуговуванні, але може мати потенційні проблеми з безпекою та продуктивністю.

Переваги та недоліки

Переваги багатокористувацького розгортання включають економічність, ефективне використання ресурсів, легкість в обслуговуванні та масштабованість. Недоліки багатокористувацького розгортання — це потенційні проблеми з безпекою та продуктивністю через спільне використання ресурсів.

Гібридне багатокористувацьке розгортання: Рівні гранулярності

Для сегментації даних орендарів у межах бази даних можна використовувати різні рівні гранулярності. Важливо пам'ятати, що один і той самий екземпляр програми завжди спільний. Ці рівні включають:

Рівень бази даних

Кожен орендар має окрему базу даних. Цей підхід забезпечує найвищий рівень безпеки та легкість у створенні резервних копій, але має вищі витрати: дорожчий, більше часу на розробку для підключення нового клієнта та вищі витрати на ресурси.

Рівень схеми

Орендарі використовують одну й ту саму базу даних, але мають власну окрему схему PostgreSQL.
Цей рівень забезпечує певний ступінь ізоляції даних, але управління резервними копіями може бути складним.

Рівень рядка

Орендарі використовують одну й ту саму базу даних та схему, але їхні дані розділяються на рівні рядків за допомогою ідентифікатора орендаря. Це найбільш економічний підхід, але він може призвести до проблем з продуктивністю та меншої ізоляції даних.

Гібридне розгортання

Цей підхід дозволяє мати або окрему базу даних, або спільну базу даних, залежно від специфічних вимог кожного орендаря. Така гнучкість дозволяє розробникам знаходити баланс між витратами, продуктивністю та ізоляцією даних, згідно з потребами.

Динамічне багатокористувацьке розгортання: втручання програміста та час виконання

Динамічне багатокористувацьке розгортання дозволяє додавати орендарів до системи під час виконання, без необхідності ручного втручання програміста. У свою чергу, не динамічні рішення вимагають, щоб програмісти вручну налаштовували нових орендарів.
Наприклад, при використанні Ruby on Rails 6.0 для шардінгу, програміст повинен змінити файл database.yml і розгорнути оновлену конфігурацію для кожного нового орендаря.

Впровадження динамічного багатокористувацького розгортання дозволяє розробникам автоматизувати процес додавання нових орендарів до програми, знижуючи витрати та потенційні помилки, пов’язані з ручною настройкою. Цей підхід дозволяє швидше інтегрувати нових клієнтів і покращує загальну масштабованість системи, хоча він може бути не таким доцільним, якщо система має лише кілька клієнтів з низьким рівнем залучення нових користувачів.

Багатокористувацьке розгортання з Ruby on Rails та PostgreSQL: популярні рішення

Два з найпопулярніших рішень для впровадження багатокористувацького розгортання в Rails-додатках з використанням PostgreSQL — це гем Apartment і вбудований шардінг в Ruby on Rails 6.0.
Почесне згадування заслуговує гем actastenant, який забезпечує багатокористувацьке розгортання на рівні рядків.

Гем Apartment

Найпопулярніший гем для багатокористувацького розгортання в Rails називається Apartment. Він добре побудований і багатий на функції, але офіційна підтримка була припинена три роки тому, і він офіційно не підтримує Rails 6.0. Однак існує форк, який продовжує підтримку цього гему. Він підтримує багатокористувацьке розгортання на рівні схем та баз даних, але не дозволяє обидва ці варіанти використовувати одночасно, що означає, що це не "гібридне" рішення. Тим не менш, гем Apartment є динамічним.

Вбудований шардінг в Ruby on Rails 6.0

Вбудований шардінг в Ruby on Rails 6.0 підтримує гібридну модель, оскільки вимагає визначення підключення до бази даних, що містить інформацію як про базу даних, так і про схему.
Однак, це не є динамічним рішенням, оскільки потрібно визначати орендарів у файлі database.yml і розгорнути цю конфігурацію для додавання нових орендарів.

Підсумовуючи, при виборі між гемом Apartment та вбудованим шардінгом Rails 6.0 для впровадження багатокористувацького розгортання в Rails-додатках з використанням PostgreSQL, слід врахувати бажаний рівень деталізації та чи потрібне вам динамічне або статичне рішення.

Гібридне та динамічне багатокористувацьке розгортання з Ruby on Rails та PostgreSQL: практичне рішення

Для впровадження гібридного та динамічного багатокористувацького розгортання з Ruby on Rails та PostgreSQL ми будуємо на основі шардінгу Ruby on Rails 6.0, який вже надає гібридну основу. Завдання полягає в тому, щоб зробити це рішення динамічним, замінивши статичну конфігурацію в файлі database.yml на рішення, яке працює в реальному часі.

Наш підхід передбачає використання публічної схеми, де зберігаються конфігурації підключення до бази даних для кожного орендаря. Коли робітник запускається, він завантажує ці конфігурації з бази даних.
З мінімальними зусиллями, Rails створює пул підключень для кожного орендаря, з якого ми можемо отримувати з'єднання. Крім того, нам потрібно перезапустити робітників кожного разу, коли додається новий орендар, щоб забезпечити доступ до нього для всіх робітників.

Застосувавши це практичне рішення, ми успішно інтегрували гібридне та динамічне багатокористувацьке розгортання з Ruby on Rails та PostgreSQL. Результатом є гнучка, ефективна та масштабована архітектура, яка відповідає унікальним вимогам кожного орендаря, максимізуючи використання ресурсів.

У майбутньому пості ми впровадимо гібридне та динамічне багатокористувацьке розгортання, побудоване на основі шардінгу Ruby on Rails 6.0, слідкуйте за оновленнями!

Перекладено з: Hybrid and Dynamic Database Multitenancy with Ruby on Rails

Leave a Reply

Your email address will not be published. Required fields are marked *