AWS EFS слишком медленный, когда я использую установку git и npm

Я использую хранилище aws S3 и облачный сервис для своих десятков статических веб-сайтов. Также я использую aws lambda с nodejs и EFS для git, node_modules и файлов кэша сборки.

Когда я пробую git clone, npm install и npm run build из EFS, он работает медленнее. Но когда я пытаюсь из папки lambda /tmp, он работает в 10 раз быстрее, чем хранилище EFS.

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


person freecoder52    schedule 06.09.2020    source источник
comment
Могу я спросить, почему файлы должны быть на EFS. Если бы вы могли предоставить больше информации о прецеденте, это помогло бы :)   -  person Chris Williams    schedule 06.09.2020
comment
@ChrisWilliams Спасибо за ваш комментарий. Я создаю свои сайты с gatsbyjs. Он запускает команду сборки aws-lambda npm run для каждого сайта, который необходимо построить. Я выбрал EFS, потому что мне нужно было хранилище, в котором нужно было хранить файлы, ранее установленные с помощью git clone и npm install.   -  person freecoder52    schedule 06.09.2020
comment
В моей предыдущей роли мы решили не использовать EFS для развертывания kubernetes gitlab, потому что для gitlab\git EFS не рекомендуется: клиенты и пользователи сообщают, что AWS EFS плохо работает для варианта использования GitLab. Рабочие нагрузки, в которых множество небольших файлов записываются в сериализованном виде, например git, плохо подходят для EFS. EBS с сервером NFS поверх будет работать намного лучше. Вместо этого мы выбрали использование тома EBS. docs.gitlab.com/ee/administration/nfs.html Вы не в состоянии использовать фиксацию кода для ваших репозиториев?   -  person berimbolo    schedule 07.09.2020


Ответы (1)


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

В зависимости от размера файла и количества изменений в монтировании EFS вы можете исчерпать доступные кредиты, что приведет к проблемам с производительностью для любого приложения, прикрепленного к монтированию EFS. Вы можете определить это, взглянув на метрику BurstCreditBalance CloudWatch, а также следите за любым выравниванием TotalIOBytes, так как это может свидетельствовать о достижении максимальной пропускной способности.

Когда вы выполняете клонирование git, вы также можете использовать --depth со значением 1 для создания мелкого клона. Эта опция позволит получить только последний коммит, в отличие от клонирования всей истории git.

Улучшение этого рабочего процесса Я бы предложил пересмотреть использование следующих технологий, чтобы обеспечить рабочий процесс для того, что вы хотите. Вместо функции Lambda создайте конвейер CodePipeline, который вызовет CodeBuild. Это задание CodeBuild будет отвечать за выполнение задачи установки npm для вас, а также за любые другие действия.

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

Пара ссылок, которые могут быть вам полезны:

person Chris Williams    schedule 06.09.2020
comment
Это предложение - именно то, с чем я согласился: github для исходного кода и конвейер кода, в основном состоящий из набора заданий по сборке кода и пользовательского агента сборки с заключенным в нем общим кодом. Работает очень хорошо, за исключением того факта, что конвейер кода должен знать о ветвях заранее, что означает, что у меня есть конвейер только для мастера, и я полагаюсь на пару заданий по сборке кода для обработки веб-перехватчиков push и pull запросов ветки функций, - person berimbolo; 07.09.2020
comment
@berimbolo CodePipeline привязан к одной ветке, а CodeBuild — нет. Если вы используете CodeBuild напрямую, вы можете выполнить сборку из любого коммита/ветки git. - person Noel Llevares; 09.09.2020
comment
Да, я знаю, и я использую (как я уже упоминал) задания по сборке кода только для продвижения функций и PR, которые предшествуют слиянию моих изменений с мастером, после слияния с мастером я запускаю конвейер кода на мастере.... работает сборка кода вне конвейера поможет мне только до сих пор, например, этап ручного утверждения или желание легко связать вместе сборки кода, которые легко выполняются с использованием конвейера кода... - person berimbolo; 09.09.2020