Как развернуть статические шаблоны expressjs в AWS без перезагрузки сервера? - PullRequest
1 голос
/ 12 апреля 2019

У меня есть сервер express.js, который я развертываю на AWS эластичный beanstalk. Я использую руль для шаблонов. Структура шаблонов меняется чаще, чем код сервера, поэтому я хочу иметь быстрый способ их развертывания. Я экспериментировал с размещением шаблонов на отдельной статической корзине S3 и затем загружал их из кода nodejs. Таким образом, я могу быстро развернуть изменения в шаблонах, используя статическое развертывание S3, а не eb deploy, который перезапускает все узлы сервера.

Вот мой код сервера node.js для загрузки шаблона:

const s3 = new aws.S3();
s3.getObject({Bucket: 'bucketname.com', Key: 'views/' + path}, (err, data) => {
  const template = handlebars.compile(data.Body.toString('utf-8'));
  resolve(template);
});

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

Может быть, есть лучший способ решить проблему скорости развертывания шаблонов?

1 Ответ

2 голосов
/ 19 апреля 2019

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

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

Мы закончили с созданием другого репозитория GIT для хранения этих статических шаблонов. Наш express сервер будет загружать эти шаблоны и кэшировать их в памяти при запуске.

Мы настроили webhook для проверки связи с нашим express сервером каждый раз, когда менялись шаблоны (новый коммит в git repo). Затем сервер делает недействительным свой кеш и загружает новые шаблоны из того же репо. Таким образом, нам не нужно было перезапускать сервер для каждого изменения в статическом шаблоне.

...