- PVSM.RU - https://www.pvsm.ru -

Сервис с распознаванием лиц «Look-A-Like» обслуживал тысячи пользователей одновременно
Разработка на NodeJS в качестве хобби — сплошное удовольствие, но когда речь о продакшене для множества пользователей, есть пара вещей, которые стоит знать, чтобы избежать долгого отклика и сбоев.
В рамках работы в MyHeritage мы разработали сервис doppelgänger [1] для Евровидения 2019 года, с помощью которого, загрузив селфи, можно узнать на кого из участников конкурса вы похожи больше всего.
Помимо логики распознавания лиц, приложение имело крайне ясное требование: оно должно было обслуживать десятки тысяч одновременных пользователей, ведь Евровидение смотрят миллионы людей по всему миру.
Весьма быстро мы поняли, что балансировщика нагрузки перед приложением, настроенного с помощью Auto Scaling [2], недостаточно для отказоустойчивости. Нам очень помогло следующее:
fs.readSync) заманчивы, потому что код выглядит чище, но они буквально убивают производительность. Вместо них используйте async/await операции, потому что во время выполнения асинхронной работы ЦП будет доступен и для других задач (см. Цикл событий [5]).const res = fs.readSync('file.txt');
После: const res = await fs.readAsync('file.txt');Node по умолчанию настроен на ограничение в 1 ГБ. Если серверу доступно, скажем, 4 ГБ специально под ваше приложение, установить максимальный предел памяти вам придется вручную, используя CLI со следующим флагом: --max-old-space-size
Пример: node --max-old-space-size=4096 server.jsNode работает в одном треде. Если вы специально не настраивали конфигурацию, которая запускала бы несколько тредов, сэкономьте деньги, выбрав сервер с 1 ядром.В нашем случае эти советы привели к десятикратному улучшению производительности и помогли сохранить в чистоте окружение на продакшене, даже когда приходилось обслуживать тысячи пользователей одновременно.
Спасибо, что дочитали.
Автор: germn
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/320853
Ссылки в тексте:
[1] сервис doppelgänger: https://myheritage.com/eurovision-lookalike
[2] Auto Scaling: https://aws.amazon.com/ru/autoscaling/getting-started/
[3] JMeter: https://jmeter.apache.org/
[4] этот туториал: https://www.digitalocean.com/community/tutorials/how-to-use-apache-jmeter-to-perform-load-testing-on-a-web-server
[5] Цикл событий: https://nodejs.org/fa/docs/guides/event-loop-timers-and-nexttick/
[6] Winston: https://github.com/winstonjs/winston
[7] Источник: https://habr.com/ru/post/456036/?utm_campaign=456036&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.