Разделение баз данных

Сергей4 місяці у сервісі
Дані замовника будуть вам доступні після подання заявки
20.12.2025

Моя ситуация (коротко)
  • MySQL

  • Есть:

    • 🇷🇺 RU-домен + RU-сервер (ПД РФ хранятся в РФ) ✅

    • 🇪🇺 .com + БД в Финляндии

  • Нужно:

    • синхронизировать работу .com ↔ RU

    • запись данных с обеих сторон

    • нормальная скорость в РФ

  • Трафик: средний

⚠️ Главное ограничение
Персональные данные РФ НЕ должны уходить в EU
→ значит полной bidirectional-репликации делать нельзя


❗ КЛЮЧЕВОЙ ПРИНЦИП

❌ НЕ «одна общая БД»

ДВЕ БД + управляемая синхронизация


✅ РЕКОМЕНДУЕМАЯ АРХИТЕКТУРА (рабочая и легальная)

1️⃣ Разделяем данные логически

В MySQL:

🇷🇺 RU DB (основная для РФ)

Хранит:

  • users (РФ)

  • телефоны, email, адреса

  • заказы РФ

  • платежи РФ

🇪🇺 EU DB (.com)

Хранит:

  • товары

  • категории

  • контент

  • публичные отзывы

  • агрегированные данные (без ПД)


2️⃣ Что и КАК синхронизируем

🔁 Из RU → EU (ограниченно)

МОЖНО передавать:

  • order_id

  • product_id

  • сумма

  • статус

  • timestamps

НЕЛЬЗЯ:

  • ФИО

  • телефон

  • email

  • адрес

  • IP

👉 Используем обезличенные события


🔁 Из EU → RU (свободно)

  • товары

  • цены

  • наличие

  • контент

  • SEO-данные


3️⃣ Техническая реализация (MySQL)

❌ Почему НЕ Master–Master

  • конфликты

  • риск утечки ПД

  • сложная поддержка

  • плохо живёт через границы


✅ Правильный вариант: Event-based Sync

🔹 Запись
RU / EU → Local MySQL → Event → Queue → Receiver → Apply


4️⃣ Инструменты (проверенные)

Очередь

  • RabbitMQ (рекомендую)

  • или Kafka (если уже есть опыт)

  • или Redis Streams (если проще)


Синхронизация

  • Debezium (CDC) — если хочешь автомат

  • или:

    • сервис-слой

    • таблица outbox_events


Пример события (RU → EU)

{

"event": "order_created",

"order_id": 93241,

"product_id": 883,

"amount": 12990,

"currency": "RUB",

"country": "RU",

"created_at": "2025-01-10T12:45:00"

}


5️⃣ Как сделать сайт быстрым в РФ

🔥 Обязательно

  • Backend в РФ

  • MySQL в РФ

  • Redis в РФ

  • Nginx + HTTP/2

Cloudflare

  • ❌ не как прокси

  • только DNS

  • TTL минимальный

  • fallback на RU IP


6️⃣ Как связать .ru и .com

Лучший вариант

.ru  → RU backend → RU DB

.com → EU backend → EU DB

Общие:

  • товары

  • контент

  • бизнес-логика

Связь:

  • только через API / очередь

  • никакого прямого MySQL-трафика между странами


7️⃣ Что делать с пользователями

  • RU-пользователь всегда обслуживается в РФ

  • EU / Other — через .com

  • если RU-пользователь зашёл на .com:

    • редирект

    • или read-only режим


8️⃣ Итоговая схема (коротко)

         ┌───────────────┐

│ EU (.com) │

│ MySQL (EU) │

└──────▲────────┘

Events (no PD)

┌──────┴────────┐

│ Queue │

└──────▲────────┘

┌──────┴────────┐

│ RU (.ru) │

│ MySQL (RU) │

└───────────────┘


🟢 Почему это лучший вариант

✅ законно
✅ быстро в РФ
✅ масштабируемо
✅ переживает блокировки
✅ не зависит от Cloudflare
✅ нет конфликтов данных


Если хочешь, следующим шагом могу:

  • предложить конкретную схему таблиц

  • показать пример outbox pattern

  • помочь решить авторизацию пользователей между доменами

  • подсказать конкретные облака/железо в РФ

Просто скажи, что из этого важнее.


Авторизуйтесь для подання заявки