AWS Notes
5.6K subscribers
444 photos
42 videos
10 files
2.8K links
AWS Notes — Amazon Web Services Educational and Information Channel

Chat: https://xn--r1a.website/aws_notes_chat

Contacts: @apple_rom, https://www.linkedin.com/in/roman-siewko/
Download Telegram
Graviton 2 — переходим на светлую сторону, часть 1

Процессоры ARM уже не первый год на AWS, а теперь ещё и в Макбуках (которые тоже на AWS :) ). Многие наверняка слышали про них, но, как это часто бывает, придерживаются фразы "Ну, вот, скажи мне — где я, а где ARM?!?"

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

Далее мой личный опыт и впечатления от работы c6g/m6g/t4g в, так сказать, "повседневной жизни" условного девопса или админа. Спойлер — овчинка стоит.

Возьмём популярный вариант — у вас что-то крутится в docker-compose, например, Node.js, Mongo или какой-нибудь Jenkins. Или даже возьмём всё вместе. Итак, что нужно будет сделать, чтобы пощупать гравитончик?

К примеру, у вас использовалась популярная виртуалка t3.medium. Значит для теста поднимаем t4g.medium - условный аналог на ARM.

Запустили, заходим, ставим докер привычным способом, например, для Amazon Linux 2:

yes | sudo amazon-linux-extras install docker

Docker поставили, пока никаких отличий.

Будем ставить docker-compose, гуглим и узнаём про первый облом ARM — а вот и нет такого:

https://github.com/docker/compose/issues/6831

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

sudo curl -L --fail https://raw.githubusercontent.com/linuxserver/docker-docker-compose/master/run.sh -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

И получаем неофициальную, но вполне рабочую версию docker-compose под ARM.

Дальше проходимся по сервисам, которые у вас поднимаются в docker-compose. Если это что-то известное/популярное, например, упомянутые Node.js или Монга, то проблем, скорей всего, не будет – вообще ничего менять не придётся, т.к. у них вместе выложены докеры сразу под несколько платформ, в том числе под arm64. Оговорочку можно сделать лишь если у вас шибко старые версии, т.к. поддержка ARM появилась относительно недавно. Например, для Mongo версий 3.5 и древней поддержки ARM не будет, зато 3.6+ работает на ARM отлично.

Для не столь крупных проектов может не быть arm64 версий. Например, дефолтный репозиторий для Jenkins имеет образы лишь под amd64. Конечно, всегда можно пойти и собрать образ под arm64 самому, скачав исходники с GitHub. Это справедливо и для большого количества других open source проектов. Но погуглив часто можно найти готовое, в случае Jenkins это будет jenkins4eval/jenkins.

Для наглядности поставим популярные вещи под ARM — kubectl, eksctl, helm, kustomize:

curl -o https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-05/bin/linux/arm64/kubectl

curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_arm64.tar.gz" | tar xz

curl --silent --location https://get.helm.sh/helm-v3.5.4-linux-arm64.tar.gz | tar xz linux-arm64/helm

curl --silent --location https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize/v4.1.2/kustomize_v4.1.2_linux_arm64.tar.gz | tar xz

Если под ваш какой-то проект нет ARM-варианта — что ж, значит придётся обождать. Однако часто выясняется, что от чего-то можно безболезненно избавиться и всё же попробовать.

Отдельно скажу, что у вышеупомянутой неофициальной версии docker-compose под ARM есть некоторые проблемы — например, у меня с ней не заработал нормально jwilder/docker-gen для получения LetsEncrypt-овских сертификатов. Я не пробовал другие, используя сертификаты на ALB, однако возможность таких вещей стоит учесть. Но, всё же, в большинстве случаев (и точно, если это что-то популярное) никаких принципиальных моментов не возникает.

#ARM #Graviton
Graviton 2 — переходим на светлую сторону, часть 2

Тесты ARM виртуалок в нагруженных приложениях не есть предмет данного поста - их можно найти в интернете или в официальном разделе:

https://aws.amazon.com/ec2/graviton/#Partner_Blogs

Здесь же, как было оглашено в первой части, рассмотрим "народные", то бишь популярные-недорогие типы виртуалок, обычно это 1-2 ядра и 1-4 ГБ памяти. В этой нише рулят Tx виртуалки — с поправкой на поколения это t2, t3, t3a и присоединившаяся к ним t4g на Graviton 2. Это так называемый burstable-тип виртуалок, которые не предназначены для постоянной нагрузки и производительность которых падает до своего baseline уровня, ежели "бурсты" иссякают.

Однако в эту нишу недорогих виртуалок Graviton 2 добавил не только t4g, под вышеприведенные правила 1-2 ядра и 1-4 ГБ памяти попадают и две "полноценные" виртуалки (которые не "burstable") - c6g.medium и m6g.medium! Да, у них по одному ядру, но, во-первых, очень многие системы прозябают с минимальной загрузкой в единицы процентов, а, во-вторых, если нагрузка вдруг станет постоянной, то baseline этих Tx виртуалок убьёт производительность двух ядер в 5-10 раз, что даст кратное преимущества "полноценным виртуалкам".

Сеть

Кроме того стоит добавить, что у "полноценных" виртуалок ещё и более быстрая сеть. У Tx типа это до 5 Gbit (если не считать старую t2, где аморфное Low to Moderate условно обозначает "до 1 Gbit"), в то время как у c6g/m6g это "до 10 Gbit". И это просто видно в обычной работе - привычные операции с копированием файлов на другие виртуалки/S3/итп банально на глаз быстрей. У кого много таких операций, сразу заметит, что работать стало комфортней.

И да, если уж про сеть, то правильно добавить ещё одну "полноценную" виртуалку, попадающую в наш диапазон: c6gn.medium, у которой сетка ещё более быстрая — до 25 Gbit!

Стоимость

Сведём всё в одну таблицу:

тип      цена   CPU   RAM сеть    baseline
t2.micro   $0.0116 1vCPU 1GB до 1 Gbit 10%
t2.small   $0.023  1vCPU 2GB до 1 Gbit 20%
t2.medium   $0.0464 2vCPU 4GB до 1 Gbit 20%
t3.micro   $0.0104 2vCPU 1GB до 5 Gbit 10%
t3.small   $0.0208 2vCPU 2GB до 5 Gbit 20%
t3.medium   $0.0416 2vCPU 4GB до 5 Gbit 20%
t3a.micro   $0.0094 2vCPU 1GB до 5 Gbit 10%
t3a.small   $0.0188 2vCPU 2GB до 5 Gbit 20%
t3a.medium $0.0376 2vCPU 4GB до 5 Gbit 20%
t4g.micro   $0.0084 2vCPU 1GB до 5 Gbit 10%
t4g.small   $0.0168 2vCPU 2GB до 5 Gbit 20%
t4g.medium  $0.0336 2vCPU 4GB до 5 Gbit 20%
c6g.medium  $0.034  1vCPU 2GB до 10Gbit 100%
m6g.medium  $0.0385 1vCPU 4GB до 10Gbit 100%
c6gn.medium $0.0432 1vCPU 2GB до 25Gbit 100%

Если отбросить морально устаревшие t2, которые дороже t3, а при этом медленней и отсортировать по возрастанию цены, то получаем следующую картину:

тип      цена   CPU   RAM сеть    baseline
t4g.micro   $0.0084 2vCPU 1GB до 5 Gbit 10%
t3a.micro   $0.0094 2vCPU 1GB до 5 Gbit 10%
t3.micro   $0.0104 2vCPU 1GB до 5 Gbit 10%
t4g.small   $0.0168 2vCPU 2GB до 5 Gbit 20%
t3a.small   $0.0188 2vCPU 2GB до 5 Gbit 20%
t3.small   $0.0208 2vCPU 2GB до 5 Gbit 20%
t4g.medium  $0.0336 2vCPU 4GB до 5 Gbit 20%
c6g.medium  $0.034  1vCPU 2GB до 10Gbit 100%
t3a.medium  $0.0376 2vCPU 4GB до 5 Gbit 20%
m6g.medium  $0.0385 1vCPU 4GB до 10Gbit 100%
t3.medium   $0.0416 2vCPU 4GB до 5 Gbit 20%
c6gn.medium $0.0432 1vCPU 2GB до 25Gbit 100%

Очень показателен нижний сегмент, где "полноценные" виртуалки расположились не равномерно внизу, как можно было бы предположить, а вполне себе тягаются с дешёвыми Tx!

Выводы

👉 Graviton 2 хорош. Не верьте на слово — попробуйте. Сделать это для простых вещей если не совсем просто, то точно не так сложно.

👉 Graviton 2 добавил в список "народных виртуалок" две полноценные и конкурентно недорогие виртуалки c6g.medium и m6g.medium. И если вы, как и я, раньше держали свои популярные повседневные вещи на t3/t3a small/medium, то очень стоит попробовать c6g.medium и m6g.medium. Я перевёл несколько проектов на оные и теперь радуюсь — как скорости работы, так и прайсу!

#ARM #Graviton