Привет!
У многих есть проекты с «хайлоадом». Немногие используют кластеры на AWS. И те, кто всё-таки их используют, должны использовать Placement группы.
Что это такое
Placement Groups (Группы размещения) — логические объединения кластерных типов AWS инстансов, позволяющие уменьшить сетевые задержки. AWS гарантирует скорость в 10 Gb между серверами, запущенными в одной плейсмент группе. Чисто теоретически, эти инстансы запускаются географически рядом.
При обычном размещении инстансов получается приблизительно следующая картина:
При старте инстансов в плейсмент группе, инстансы физически близко, тем самым получается выиграть в сетевых задержках:
Как создать плейсмент группу и запустить в ней инстансы
Есть по 2 способа как создать плейсмент группу, так и запустить инстансы в ней. Заметим, что уже запущенные машинки уже невозможно поместить в плейсмент группу.
1. CLI Tools
Создадим плейсмент группу:
$ ec2-create-placement-group MyFirstCluster -strategy cluster
И запустим в ней 10 кластерных GPU инстансов:
$ ec2-run-instances ami-02f54a6b -n 10 --instance-type cg1.4xlarge --placement-group MyFirstCluster --group MyClusterSecurityGroup
2. AWS Console
Создаем плейсмент группу:
И добавляем в группу 10 новых инстансов, выбирая плейсмент группу при их создании:
Тесты производительности
Статья бы была «ни о чём», если бы в ней не было бы тестов производительности сети между кластерными инстансами вне и в плейсмент групп.
Тест
Тест производится между двумя кластерными инстансами Cluster Compute Quadruple Extra Large Instance (cc1.4xlarge). На одном установлен и стартован дефолтный NGINX. На другом — httpd с тулзой Apache Bench.
1000 раз запускается строка вида:
ab -c 60 -n 4000 http://$ADDR/
В результате, на сервер отправлено 1000*60*4000=240.000.000 запросов. Мы посчитаем среднее время ответа, на этом и будем строить наши догадки о том, как хорошо работают плейсмент группы.
Результаты
Конечно тяжело разобраться с правомочен ли тест, но что есть, то есть.
Вот график среднего времени ответа сервера (grep 'Time per request' |grep «across»):
Видно, что график с серверами в плейсмент группе чуточку быстрее, чем вне её.
Выводы
При использовании кластерных инстансов на EC2/VPC нужно и полезно использовать Placement Groups. Это немного уменьшает сетевые задержки, что при долговременном использовании может значительно повлиять на производительность кластера.
AWS рекомендует не использовать более 128 инстансов в одной плейсмент группе, посему лучше их разделять на несколько групп, если у вас много серверов.
Используете ли вы Placement Groups в своих проектах на AWS? Есть ли интересные данные по производительности?
Автор: korjik