@VisualIdeas

Какую архитектуру выбрать для приложения с централизованной БД?

Имею идею:
Создать веб приложение на множество доменов
С общей БД и админкой и централизваными данными.

Моя идея:
(1) 1 сервак помощнее, на котором крутится и БД и админка и сайты.
Каждый домен/сайт закрываем за cloudflare - в итоге ни поисковики ни пользователи не знают реального IP и все вроде красиво)

Но заказчик говорит
При получении доступа к серверу злоумышленника он сможет иметь полный доступ ко всему. И хочется как-то разносить по 10 - 20 доменов/сайтов на отдельные мелкие сервера.


Но в виду некоторых вещей мне необходимо чтобы бОльшая часть данных была централизованно в 1 месте и вариант иметь централизованную админку которая по АПИ дергает каждый сайт и управляет контентом.

Дальше начинаем думать:
(2) Отдельный сервер с БД и несколько серверов с сайтами - при нахождении в одном ДЦ скорость будет приемлемая, но получив доступ к любому из сайтов можно попасть и в БД (логин и пароль то хранятся в открытую в конфигах). При размещении БД и сайтов в разных ДЦ скорость будет сильно заметно падать(((

(3) Отдельный сервер с RestFull API и все сайты получают данные по API
Этот вариант супер гибкий, но самый сложный в реализации и самый медленный

И вот второй день сижу и думаю: как именно все это реализовать?

Кроме общего вопроса интересуют такие частности как:
Какова скорость задержки в ответе API если будет чистый сервер с только MySQL, nginx, php_fpm и какимнить супербыстрым фреймворком на C (phalcon) где вся програмная часть будет постоянно висеть в памяти?

Ну есть ещё вариант написать сервис вебсокетов в качестве АПИ чтобы не гонять полные html запросы - но опыта маловато((( Да и демон на php -спорное решение)
  • Вопрос задан
  • 266 просмотров
Решения вопроса 3
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
1. Централизованной админке ничто не мешает быть реплицированной копией на всех серверах.
2. Доступ к каждому серверу из центр. админки осуществляется с помощью двух факторов:
2.1. Авторизация веб-клиента в админке (получение токена1)
2.2. Аутентификация веб-клиента на сервере через API (получение токена2; сервер также сообщает его хеш админке напрямую)

После получения двух токенов, админка может управлять нужным сервером от имени авторизованного веб-клиента (ну или любого другого), подписывая запросы к админке хешем этих двух токенов на стороне клиента.

Данные (файлы фронта и сам php-скрипт) - также можно реплицировать и управлять этим через ту же админку.
Базу - никто не мешает Вам вынести на отдельный сервер и создать к ней RESTful API, через которое можно будет обращаться с любой площадки из своих скриптов. А там уже: и шифрование трафика, и защита данных.
И, разумеется, не забыть создать кеш-систему для RESTful API от центральной БД на каждой площадке (Redis - уже не подойдёт, т.к. тут не прямой коннект, а RESTful..).

Админку можно разместить рядом с БД (на одном сервере/хостинге), НО! под другим аккаунтом, т.к. доступ к базе - она будет получать всё равно через RESTful API с токеном площадки, поэтому, риска доступа к БД со стороны (кроме работников самого хостера!) - никаких нет.
Ответ написан
Комментировать
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Сделайте синхронизацию БД, все будет супер быстро и «в одном месте» в случае обвала бд да беда, но можно на репликах продержаться, как я понимаю вещи которые нужны в одном месте это учетки и биллинг?
Ответ написан
@vitaly_il1
DevOps Consulting
Один из вариантов - разнести сайты по разным хостам (или контейнерам), а админку - на отдельный сервер, с доступом только через VPN.

Отдельный сервер с БД и несколько серверов с сайтами

Если для каждого сайта использовать свои credentials с доступом только к "своей" базе, то этой проблемы нет.

Но в виду некоторых вещей мне необходимо чтобы бОльшая часть данных была централизованно в 1 месте и вариант иметь централизованную админку которая по АПИ дергает каждый сайт и управляет контентом.

Тогда опять же если хакер залезет на это административный сервер, то получит доступ ко всему.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы