Одна база данных пользователей, два приложения на разных серверах - PullRequest
0 голосов
/ 02 апреля 2012

В настоящее время я запускаю приложение Rails на одном VPS с собственной базой данных MySQL.Эта база данных также содержит таблицу пользователей.В настоящее время мы создаем второе приложение, которое должно иметь тех же пользователей.Если кто-то регистрируется для одного из них, у него есть учетная запись для обоих.

Однако проблема заключается в том, что это второе (PHP) приложение должно быть размещено в другом месте.Каковы лучшие практики здесь?Могу ли я напрямую подключиться к внешней базе данных, не вызывая большой задержки?Должен ли я синхронизировать их?Сначала создать API?

Я ищу наиболее приемлемый из возможных методов.Спасибо.

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Вы можете разрешить второму хосту доступ к первому серверу MySQL. Лучшая практика (, насколько мне известно ) для этого заключается в создании новой учетной записи пользователя, предоставлении ей необходимых привилегий для таблицы пользователей, только разрешении доступа к это с IP или домена второго хоста и с использованием безопасного пароля. Вы бы запустили этот запрос на сервере MySQL:

GRANT ALL ON mydatabase.users TO 'mynewuser'@'123.123.123.123'
    IDENTIFIED BY 'mysecurepassword';

Само собой разумеется, что вы заменили бы «mydatabase.users» на вашу базу данных и имя таблицы, «mynewuser» на имя пользователя, к которому вы хотите иметь доступ (вы можете указать здесь что угодно, пользователь будет создан автоматически), «123.123.123.123» с IP-адресом или доменным именем вашего второго сервера и «mysecurepassword» с надежным и длинным паролем, предпочтительно генерируемым случайным образом.

Ваш второй сервер теперь сможет подключаться к серверу MySQL и иметь привилегии ALL (вы можете изменить их на те, которые ему нужны) в таблице mydatabase.users.

MySQL 5.6 Синтаксис GRANT
Greensql.com по MySQL лучшие практики удаленного доступа

Чтобы минимизировать небольшие потери производительности, я бы воздержался от создания нескольких соединений с MySQL (старайтесь использовать как можно меньше, желательно только одно). Я не уверен на 100% в следующем, но я уверен, что было бы неплохо уменьшить количество отдельных запросов, которые вы выполняете. Вместо запуска 10 отдельных вставок, запустите одну вставку с несколькими VALUES сегментами, например,

INSERT INTO mytable(id, name) VALUES
    (0, 'mia'),
    (1,'tom'),
    (2,'carl');

Я уверен, Подготовленные MySQL заявления также значительно помогли бы снизить штраф за скорость

1 голос
/ 02 апреля 2012

Вы можете подключиться к базе данных из второго приложения. но задержка на соединение всегда будет там. Другое дело, что вы должны учитывать безопасность, поскольку база данных будет доступна для всего мира. Вы можете ограничить подключение только вторым веб-сервером. Чтобы уменьшить задержку, у вас есть варианты, такие как использование memcached или других кешей, чтобы вам не приходилось снова и снова обращаться к базе данных. Вы можете иметь репликацию mysql и иметь основную базу данных в качестве главной, настроить другой mysql на втором сервере приложений и сделать его подчиненным. Mysql Второго сервера синхронизируется с мастером, и все запросы на запись (обновление, вставка, удаление и т. Д.) Должны быть переданы мастеру. Это должно снизить нагрузку на базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...