Рубрики
Без рубрики

Первый опыт масштабирования приложения Meteor

Первым опытом Elie Steinbock Scaling Meteor Appi недавно прошел вызов и испытать необходимость масштабирования моего приложения Meteor. Это проект, который уже работал в производстве около года. Этим летом приложение стало намного популярным с тысячи

Автор оригинала: FreeCodeCamp Community Member.

Эли Штайнбок

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

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

До лета у меня не было никакого предыдущего опыта масштабирования приложений, и, несмотря на то, что я немного читал о теме, когда мне пришлось на самом деле сесть и начать заниматься проблемами, я чувствовал себя довольно потерянным и разве «Я уверен, что смогу решить проблемы. Я также чувствовал, что многие из статей, которые я читал в Интернете, предположил простое количество знаний, которые у меня еще нет.

Моя надежда заключается в том, что эта статья поможет мостиковать некоторые из этого разрыва. Я далеко от эксперта по масштабированию Meteor Applications, но я надеюсь, что эта статья оказывает ценность другим, которые оказываются в аналогичной ситуации с той, что я оказался.

Задний план

Немного фона о приложении при обсуждении. Это футбольная игра в стиле фантазии стиля для английской премьер-лиги (футбол). Большая часть регистраций происходит за месяц до начала сезона. Помимо всех регистраций, почти все черновики происходят в этом месяце. Проект – это когда все пользователи в лиге приходят онлайн, чтобы выбрать свою команду. Пользователи выбирают свои футболисты по одному за раз, и весь процесс проживает с каждым пользователем, имеющий от 30 секунд и 5 минут на выбор игрока.

В пиковые времена сайт имел более 500 одновременных пользователей онлайн и 20 одновременно проектов. Если сервер становится не отвечает во время проекта, он полностью разрушает опыт пользователя, чтобы игроки были выбраны для него автоматически, что он не обязательно собирался выбирать, поэтому было чрезвычайно важно, чтобы избежать этого.

Так что же масштабируется?

Для многих это может показаться очевидным, но не так давно, я понятия не имел, что имел в виду этот модный слом.

Масштабирование – это то, что происходит, когда ваше приложение вылетает. Ваш сервер может обрабатывать только столько нагрузки. Что происходит, когда 10000 человек хотят использовать ваше приложение одновременно? Ваш сервер не сможет обрабатывать его, поэтому вам также нужно получить лучший сервер или получить больше серверов для запуска приложения. Этот процесс называется масштабированием.

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

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

Для веб-приложений вертикальное масштабирование обычно легче сделать. В хостинговых компаниях, таких как Digitalocean или AWS (Amazon Web Services), вы можете легко обновить свой виртуальный частный сервер в более сильную конфигурацию с увеличением RAM, CPU и хранения.

Проблема с таким подходом состоит в том, что всегда есть ограничение на то, насколько мощно вы можете сделать свой сервер. В какой-то момент вам придется масштабировать горизонтально. Используя пример выше, ваш бизнес может идти до сих пор только с одним сотрудником. В определенной точке вам придется нанять больше сотрудников.

Когда дело доходит до приложений METEOR, вам придется чему понять горизонтально рано в начале. Приложение Meteor – это действительно просто приложение Nodejs и, следовательно, работает в одном процессе, что означает, что он может использовать только один процессор.

Мы можем использовать несколько процессоров, запустив несколько экземпляров нашего приложения одновременно. Эти процессоры могут принадлежать к одному и тому же серверу или распространению по нескольким разным серверам. Запуск нескольких экземпляров приложения означает запустить то же приложение на разных IPS или портах и распространение нагрузки по различным экземплярам приложения. Все экземпляры приложения все еще подключаются к той же базе данных, и все подключенные клиенты будут мгновенно получать любые обновления базы данных независимо от экземпляра приложения, к которым они подключены к (предполагая, что вы используете функцию хвостохранилища MongoDB. В противном случае обновления могут занять несколько секунд. ).

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

Каждая платформа будет иметь свои собственные вызовы на масштабирование. Эта статья о масштабировании Meteor Apps. На других платформах вы сможете уйти с вертикальным масштабированием для гораздо дольше. Stackoverflow работает на 25 серверов И мог даже сделать с 5. Это какая-то серьезная нагрузка на каждый сервер и в основном является случай удивительного вертикального масштабирования.

Разные части приложения Meteor

Мы можем разделить наше приложение на два логических компонента. Первая часть – это сервер, который обрабатывает запросы пользователей, отправляющих соответствующие данные обратно и выполняет любые задачи, которые необходимо выполнить. Вторая часть – это база данных, которая хранит данные приложения.

Сервер взаимодействует с базой данных, запрашивая ее и обновляя ее на согласованной основе.

Мы не будем слишком много говорить о масштабировании MongoDB. Вероятно, будет некоторое время, прежде чем вы достигнете точки, на котором вам придется масштабировать вашу базу данных. Если вы хотите узнать больше об этой теме, Эта ссылка может быть хорошим местом для начала.

Что нужно сделать, прежде чем расширить расширение сервера

Хорошее место для начала до того, как вы попадаете на масштабирование, это убедиться, что ваше приложение работает максимально эффективно. Рекомендуемый инструмент для проверки производительности вашего приложения и какие методы и публикации занимают наибольшее время для завершения IS Кадира Отказ Базовый план свободен, так что нет никаких причин, чтобы не использовать его. Используйте статьи на Кадира Академия Чтобы выработать, как лучше всего оптимизировать свое приложение и где посвятить свою энергию. В целом, вы хотите оптимизировать методы и публикации, которые запускаются чаще всего и займется долгое время.

Одна вещь, которая абсолютно необходима для хорошей производительности, заключается в использовании индексов MongoDB. Вы делаете это в Meteor, написав:

Это создает индекс на UserID поле в Сообщения коллекция. Вы также можете создавать индексы в самом MongoDB. Смотреть больше на индексах MongoDB здесь Отказ

Посмотреть Эта статья Дифференциалом для некоторых дополнительных советов по производительности.

Когда мне нужно начать беспокоиться о масштабировании?

Если ваше приложение Meteor имеет более 100 пользователей онлайн в любое время, вы, вероятно, придется начать беспокоиться о масштабировании. (Конечно, вы не знаете, когда ваше приложение собирается взлететь. Вы можете прыгать от 5 до 500 одновременных пользователей за один день, поэтому стоит быть готовым до этого происходит.)

В зависимости от вашего приложения вы можете получить до 500 одновременных пользователей на одном капельке DigitalCean. Мое приложение борется со 100-150 одновременных соединений, в результате чего он попадает в 100% процессор. Узкое место для большинства приложений Meteor, кажется, CPU, а не RAM, поэтому масштабирование горизонтально является обязательным. Вы можете добавить всю оперативную память, но это не поможет вашему приложению. Недостаток процессора – это то, что собирается перегружать ваше приложение, и вы можете получить больше энергии CPU, используя несколько CPU (или несколько серверов).

Следующий график от Kadira показывает, что происходит, когда ваше приложение имеет слишком много давления.

Около 7:28 вечера вы можете увидеть, что среднее время отклика для публикаций было около 18 секунд, а для методов около 7 секунд. Это не хорошая ситуация, чтобы быть в. Высокое время отклика было вызвано большим шипом в процессоре, которое на 100% на пару минут на 100%. RAM не является проблемой, потому что только около 500 МБ используется в любое время, и используемая здесь VPS, имеет 1 ГБ ОЗУ.

Развертывание

Есть несколько способов развертывать приложение METEOR. Вот некоторые из общих решений, используемых для производственных приложений:

Есть также Бесплатный Meteor.com Хостинг Но это должно быть использовано только для целей развития. MDG также только что выпустил Галактика , но ценообразование в настоящее время начинается в 500 долларов в месяц. ЦРТ работает над предоставлением более дешевых планов на галактику, а также бесплатный план, но на момент написания этой статьи это не вариант.

Для людей также распространено проведение базы данных на другом провайдере. Популярный – это Сочинять Отказ

Моя собственная установка – это Page Digitalocean + Compose.io.

Если вы хотите прочитать о других настройках, см. Раздел развертывания на MeteorPedia Отказ

Моя начальная установка была 10 долларов в месяц Digitalocean капля. Это дает вам одно ядро VPS с 1GB RAM. Вы также получаете 30 ГБ хранилища, хотя вы, вероятно, не будете использовать большую часть этого.

Я использую Plance развертывание US $ 18 в месяц для хостинга базы данных MongoDB. Вы можете бороться с MongoDB, но это просто дополнительная работа, с которой я не хотел иметь дело.

Для развертывания я использую инструмент под названием Meteor UP (или MUP для короткого). Вы можете взглянуть на это на Github здесь Отказ

Если вы развернули на Modulus.io, они позаботятся о многих проблемах масштабирования для вас. Если вы хотите запустить несколько экземпляров вашего приложения, все, что вам нужно сделать, это переместить слайдер вверх и вниз на веб-сайте модуля. Чем больше экземпляров, которые вы работаете, тем больше это будет стоить вам, но вы можете масштабировать, когда вы тоже хотите.

Я не пошел с модулем для развертывания, потому что у меня были некоторые проблемы, устанавливающие его два года назад. Я предполагаю, что эти проблемы были бы вытянуты. Другой вопрос стоит. Это дешевле развернуть на цифровой камере. Недостатком является то, что это может занять больше вашего времени. Еще одним преимуществом с помощью Digitalocean является более тонким зернистым контролем на вашем сервере.

Статья, сравнивающая, модуль .о и Heroku можно найти здесь Отказ

Итак, как вы на самом деле масштабируете приложение Meteor?

Как отмечалось выше, мое приложение развернуто на цифровом океане, используя Meteor UP. С этой настройкой у вас нет роскоши использования ползунка, чтобы загрузить больше экземпляров. Стандарт mup.json Файл выглядит что-то вроде этого:

{   "servers": [     {      "host": "123.45.678.901",      "username": "root",      "pem": "~/.ssh/id_rsa",      "env": {}     },     {       "host": "333.22.444.555",       "username": "root",       "pem": "~/.ssh/id_rsa",       "env": {}     }   ],   "setupMongo": false,   "setupNode": true,   "nodeVersion": "0.10.40",   "setupPhantom": true,   "appName": "myapp",   "app": "/Users/arunoda/Meteor/my-app",   "env": {      "PORT": 80,      "ROOT_URL": "http://myapp.com",      "MONGO_URL": "mongodb://arunoda:fd8dsjsfh7@hanso.mongohq.com:10023/MyApp",      "MONGO_OPLOG_URL": "mongodb://.....",      "MAIL_URL": "smtp://postmaster%40myapp.mailgun.org:adj87sjhd7s@smtp.mailgun.org:587/"   },   "deployCheckWaitTime": 15}

Обратите внимание, что я перечислил два сервера в Серверы блокировать. Когда вы впервые начинаете начинаться, у вас будет только один сервер. Со следующей настройкой мы будем развертываться на IP-адреса 123.45.678.901 и 333.22.444.555 Отказ После развертывания, если вы должны были посетить любой из этих IP-адресов в вашем браузере, вы увидите то же самое, и оба сервера будут подключены к той же базе данных.

Балансировки нагрузки

Таким образом, мы развернули наш сайт, но мы не хотим, чтобы пользователи посещали сайт на случайных IP-адресах. Мы хотим, чтобы они посещали наш домен. Итак, скажем, наше доменное имя awesomedomain.com (который лучше, чем example.com, в моем скромном мнениях). Как мы получаем каждый из наших двух серверов, чтобы иметь дело с половиной запросов?

Один из способов сделать это, используя инструмент под названием Nginx Отказ От Википедия :

Мы собираемся использовать его для трех вещей:

  1. В качестве обратного прокси
  2. Как балансировщик нагрузки
  3. Для поддержки SSL

Что это значит, что мы собираемся запустить nginx на одном из наших серверов по порту 80. Любой трафик, попадающий в сервер из Интернета, будет получен Nginx. NGINX затем пересылает трафик на экземпляры нашего приложения Meteor, которое может работать на одном сервере на другом порту или другом сервере. NGINX постарается и сбалансировать количество запросов, которые отправляются на каждый экземпляр.

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

Будучи балансировщиком нагрузки означает, что он будет разделен (баланс) нагрузки между различными экземплярами приложения.

Мы также будем использовать Nginx, чтобы предоставить нам поддержку SSL. SSL-поддержка означает, что любые данные, передаваемые между пользователем и нашими серверами, будут зашифрованы. Без поддержки SSL наш сайт Meteor не будет работать правильно во многих странах, и он также будет довольно легким для людей Hijack наших пользователей счета или прочитайте любые переданные данные. Любой сайт, который использует HTTPS, имеет поддержку SSL.

SSL не в центре внимания этой статьи, но необходимо для любого производственного приложения, а Nginx может позаботиться о том, чтобы позаботиться о SSL для вас. Чтобы настроить SSL с Nginx, см. здесь Отказ Нужно использовать Nginx для поддержки SSL. Meteor UP также может обрабатывать его с помощью инструмента, называемого STED, как показано на рисунке здесь Отказ

Так как мы настроим nginx?

Для этого я рекомендую поступить по первому шагу этого руководства:

Как развернуть приложение METEOR.JS на Ubuntu 14.04 с Nginx | Digitalocean Разверните приложение METEOR.JS на Ubuntu 14.04 с Nginx и MongoDB. В этом руководстве показано, как строить и развернуть … www.digitalocean.com.

Не беспокойтесь о остальной части урока. Meteor Up позаботится обо всех этого для вас для вас.

В статье также объясняется, как использовать NGINX для поддержки SSL.

Как только все это работает для вас, у вас должно быть приложение работает в каком-то домене. Пока что Nginx на самом деле не сделал много для нас (кроме возможности поддержки SSL.) Мы все еще не используем наш второй экземпляр Meteor, но мы собираемся исправить это сейчас.

Чтобы использовать больше серверов, вам нужно добавить следующий код в верхнюю часть вашего файла nginx:

upstream myAppName {  ip_hash;               # for sticky sessions, more below  server 123.45.678.901:3000;  # server 1  server 333.22.444.555:3000;  # server 2}

Ваш файл NGINX теперь должен выглядеть что-то похожее на это:

upstream myAppName {  ip_hash;               # for sticky sessions, more below  server 123.45.678.901:3000;  # server 1  server 333.22.444.555:3000;  # server 2}server {  listen 80;  server_name www.myapp.com  # and all other "server" directives  location / {    # the "hostname" below must be same myAppName from upstream directive above    proxy_pass http://myAppName;    # and all other "location" directives  }}

… где MyAppName было бы что-то вроде example.com или app.example.com.

Приведенный выше код был адаптирован из MeteorPedia Отказ

Если вы теперь перезагружаете Nginx (как описано в статье цифрового океана выше), используя:

nginx -t # check everything is okaynginx -s reload

Нагрузка будет разделена среди ваших двух экземпляров Meteor.

Если вы хотите добавить больше экземпляров в будущем, все, что вам нужно сделать, это добавить другую строку в NGINX Upstream Block и перезапустите nginx. Вот пример, который использует 4 экземпляра METEOR, с 2 экземплярами, работающими на двух разных серверах:

upstream myAppName {  ip_hash;  server 10.0.0.1:3000;  # server 1, core 1  server 10.0.0.1:3001;  # server 1, core 2  server 10.0.0.2:3000;  # server 2, core 1  server 10.0.0.2:3001;  # server 2, core 2  # or whatever other appropriate combination}

Удаление экземпляров просто включает в себя удаление линий из восходящего блока и перезапустить Nginx.

Алгоритмы балансировки нагрузки

Таким образом, если вы просто хотите заняться работоспособными вещами, то после приведенных выше шагов следует работать, но если вы хотите понять немного глубже, вот основное объяснение того, что мы только что сделали.

Мы используем Nginx в качестве балансировщика нагрузки. За каждый запрос, который приходит, Nginx должен решить, какой сервер отправить его. В то же время NGINX должен быть максимально быстрым, насколько это возможно, используя как можно меньше ресурсов. Nginx способен обращаться с 10 000 одновременных соединений и простые алгоритмы балансировки нагрузки являются частью того, что делает это возможным.

Простой алгоритм, который используется для решения того, где отправлять следующий запрос, называется «Round Robin». В этом алгоритме балансировщик нагрузки отправляет клиентские запросы на каждый сервер в свою очередь, и как только он попадает в конец списка серверов, снова запускает процесс. Результат для трех серверов: 1, 2, 3, 1, 2, 3, 1, 2, …

Есть много других алгоритмов, которые также могут быть использованы для решения того, какой сервер отправлять запрос, но одно ограничение, которое Meteor требует от нас, заключается в том, что каждый запрос от пользователя должен быть отправлен в тот же экземпляр. Это также известно как «липкие сессии». Пользователь палочки с одним и тем же сервером весь сеанс.

Это означает, что мы не можем использовать круглый алгоритм Robin для нашего приложения Meteor, который не учитывает, к какому серверу пользователь сначала подключен к. Вместо этого мы используем IP_HASH алгоритм, который объясняется в Nginx Docs следующим образом:

Работает на месте

Вы можете попробовать пробовать два экземпляра вашего приложения локально. Чтобы сделать это открыть два окна терминала и запустите одно приложение METEOR на стандартном порту (3000).

meteor

База данных теперь будет работать по порту 3001.

В отдельном окне терминала запускайте другой экземпляр приложения в порту 4000, который подключается к той же базе данных, выполняя следующее:

export MONGO_URL=mongodb://localhost:3001/meteor
meteor --port 4000

Теперь вы можете посетить localhost: 3000 или localhost: 4000 В вашем веб-браузере и оба будут внесены изменения в ту же базу данных.

Вещи, которые нужно знать о

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

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

Так как вы решаете эти проблемы?

Есть несколько способов справиться с такой ситуацией, но я просто наброску, что я сделал.

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

Чтобы сделать код, специфичный только для одного экземпляра приложения, я использую переменные среды. В вашей местной среде вы можете экспортировать переменные в окне вашего терминала следующим образом:

export ENV_VAR=valueOfOurVar

Мы сделали это раньше для Mongo_url Отказ

Вы можете получить доступ к переменным среды в вашем приложении Meteor, используя:

process.env.ENV_VAR

В моем приложении я могу сделать что-то вроде этого, если я хочу только один экземпляр приложения, чтобы запустить определенный код:

if (process.env.RUN_BACKGROUND_TASKS === 'true') {   // do some task}

Я также мог бы использовать чистые микросервисы подход, но это сделало бы немного больше времени для меня, чтобы настроить, а совместное использование кода было бы сложнее.

При использовании METEOR UP вы можете установить переменные среды для определенного экземпляра следующим образом:

"servers": [   {     "host": "...",     "username": "...",     "pem": "...",     "env": {       "ENV_VAR": "123",       "RUN_BACKGROUND_TASKS": "true"     }   } ],

Есть также пакеты, которые не работают хорошо при запуске нескольких экземпляров приложения. Один пакет я наткнулся на то, что падает в эту категорию Mizzao: user-status Отказ Этот пакет говорит вам, какие пользователи онлайн в любой момент времени и не работает должным образом При запуске нескольких экземпляров. Один сервер будет иметь открытое соединение с конкретным клиентом, а остальные не будут, и этот пакет не знает, как иметь дело с такой ситуацией. Закрытое соединение подразумевает, что пользователь вне форума. Работа вокруг состоит в том, чтобы использовать Конекти: пользовательское присутствие пакет вместо этого.

Вы не хотите, чтобы задачи CRON либо работают по нескольким экземплярам. Для этого вы можете использовать Percolate: синхронизированная Cron упаковка. Я никому не использовал его, но он выглядит как хорошее решение, который вместо этого ограничивает все задачи CRON на конкретный сервер, но это выглядит как хорошее решение.

Другие решения

Есть много способов сделать то, что мы сделали в этой статье. Использование Nginx – это не единственное решение. Для поддержки SSL мы могли бы использовать Шпилька вместо этого как Meteor UP. Для балансировки нагрузки мы могли бы использовать инструмент под названием Haproxy Чья единственная цель – быть балансировщиком нагрузки.

Другой подход ко всем этому, чтобы использовать Meteorhacks кластер упаковка. Это просто пакет метеора, который вы добавляете следующим образом:

meteor add meteorhacks:cluster

Чтобы увидеть его сразу работать на собственной машине, экспортируйте следующую переменную среды к вашему терминалу:

export CLUSTER_WORKERS_COUNT=2

Если вы теперь запустите свое приложение, вы должны увидеть два экземпляра вашего приложения Meteor App. Здесь мы использовали многокурсную поддержку кластерного пакета. Мы также можем использовать кластер для распределения нагрузки между несколькими серверами. Вы должны посмотреть на Кластерные документы Чтобы установить это.

Лучше лучше использовать кластер Meteorhacks или Nginx?

Я не знаю ответа на этот вопрос. У меня были проблемы с использованием кластера Meteorhacks в производстве при использовании его многоядерной поддержки. Приложение будет работать нормально в условиях низкого стресса, но в тяжелой нагрузке приложение будет случайным образом сбой, необходимый ручной перезапуск, чтобы снова работать. Для этого есть открытый выпуск на Github здесь Отказ Если вы не используете многоядерную поддержку, это не должно быть проблемой, хотя.

Моя окончательная установка

База данных работает на Compose.io со стоимостью 18 долларов в месяц на GB используемого пространства.

Приложение в настоящее время работает на 8 Digitalocean капли:

(Cakelet $ 5/месяц имеет 512 МБ ОЗУ и 1 Core, 10/месяц капелькула имеет 1 ГБ ОЗУ и 1 ядро, 20/месяц капельку 2 ГБ и 2 ядра.)

  • 1 $ 5/месяц капли заботится о фоновых задачах и не обрабатывает никаких пользовательских запросов.
  • 1 $ 20/месяц 2-я-ядерная капля проходит Nginx и 2 экземпляра Meteor of App.
  • 4 $ 10/месяц капельки (1 экземпляр на капельку)
  • 2 $ 5/месяц капельки (1 экземпляр на капельку)

Существует также капелька в размере 5 в месяц для блога, которая работает на призраке в поддомене (это не Meteor).

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

Какие капельки выбрать?

Таким образом, вы можете задаться вопросом, почему мои капельки разные размеры. Сначала я использовал только 10 в месяц капельки, но поскольку мое узкое место является процессором, а не RAM, я должен уметь заменить все свои 10 в месяц капельки с каплями в размере 5 в месяц, поскольку вы получаете такую же мощность CPU с каждым.

Я сейчас в процессе тестирования этого и видишь, как это происходит. Вы должны быть осторожны, что у вас не работает оперативная память при использовании капельку 512 МБ. Если вы используете пакетичный Пакет, ваш сервер может сбиться с крахом, когда поисковая система индексирует ваш сайт, и это приведет к тому, что CPU приведет к шипу до 100%. Вы можете обойти это, используя prerender.io вместо пакетичный и/или Добавление Swap Space Отказ Если вы используете RECT, вы можете использовать рендеринг на стороне сервера для поисковых систем вместо Spidable, как объяснено здесь Отказ

Автоскалинг

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

Это еще не видел легкое решение для этого для приложений METEOR, развернутых на Diumpanyocean, но, используя API на цифровой камень, это должно быть возможно без слишком большого количества работ. Это значительно сократило бы хостинг затраты.

Кажется, довольно легко автоудалить на модуль, как показано здесь Отказ И вы можете прочитать о AutoScaling на AWS здесь и здесь Отказ

Вещи, которые я бы сделал по-другому

Я бы проверил, что мое приложение может хорошо работать на двух серверах на гораздо более ранней стадии в процессе разработки. Переход от 1 сервера до 2 серверов довольно большой, если вы никогда не делали этого раньше. Переход от 2 серверов до 10 серверов – крошечный.

Другие ресурсы о масштабировании Meteor Apps

Позже дополнения

Мне очень понравилось следующий пост. Он имеет некоторую ключевую информацию о тестировании нагрузки, лучшую настройку NGINX и использование CDN: https://medium.freecodecamp.com/minimum-vity-devops-919972dfd9e0.