Как построить архитектуру мультирегионального ресурса?


(Семён Васильев) #1

У вас приложение, которое лежит в Будапеште или вообще в Европе. Крутится на каком-то сервере и всё хорошо. Но тут начинают приходить пользователи из дальних стран, например из Австралии или Чили. Конечно, сайт у них грузится долго. Долго достаются данные, долго делается вообще всё.

Если добавить CDN в виде Cloudflare или чего-то подобного, то это решит проблему только со статикой. А как решить проблему с не статической и не кэшируемой информацией?

Логично, что купить сервер в Сиднее, развернуть там rails app, поднять nginx и всё такое. Но это будет отдельный проект. Да, он всё будет делать быстро, но как ему потом обмениваться информацией с базой из Европы?

Кто-то имел опыт построения подобных вещей? Как это вообще обычно делается?


#2

Если приложение должно быть одно, то вариантов слету два:

  1. постараться разместить сервер ближе ко всем пользователям

  2. Репликация базы и копия приложения в каждой локации. Репликация может быть ручной или той, которую поддерживает ваша БД.


(Семён Васильев) #3

Приложение не то чтобы должно быть одно, но можно было бы оставить одним. Хотя с другой стороны, можно же развернуть на каждом сервере по собственному приложению.

В данном случае не совсем подойдёт. У меня ресурс сейчас работает с РФ. Но через год будет затрагивать Южную Африку и Юго-Восточную Азию. Соответственно, рассматриваю установку двух дополнительных серверов: один в Кейптауне, и ещё один либо в Гонконге, либо в Сингапуре. Таким образом, получится три сервера и встаёт вопрос как их все связать.

Буквально полчаса назад, изучая тему, узнал, что у Alibaba, как и у Amazon, есть свои фишечки и они как раз затрагивают схожие вопросы: https://img.alicdn.com/tfs/TB1VuhnepGWBuNjy0FbXXb4sXXa-1640-1200.png

Однако, в данном случае есть прямая зависимость от сторонних компаний. Это часто хорошо, но хотелось бы для начала без них совсем.

Т.е. вы предлагаете примерно так:

  • три сервера
  • три БД
  • три приложения
    и репликация БД

Верно? Я не имею достаточно знаний, чтобы на этом остановиться, но мне кажется как-то просто слишком, не? :slight_smile:


#4

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


(Семён Васильев) #5

Чую всё станет на порядок проще, если сделать полное дублирование проектов. Тогда не надо мучаться ни с локализацией, ни с серверами, ни с чем вообще. =)


(Семён Васильев) #6

тут вот ещё чего нашёл: https://www.digitalocean.com/community/tutorials/how-to-scale-ruby-on-rails-applications-across-multiple-droplets-part-1