Cloud computing
June 2011 2

Гигагерцы задешево — Win 2008R2 Core на Amazon

From Sandbox
Занимаясь стартапами я, наконец-то, дошел до той точки, когда нужно быть готовым отмасштабировать приложение на N серверов для 1M просмотров в день и я начал думать, как же это сделать наиболее эффективно с использованием Amazon Ec2.

Примерный план известен всем — сервер помощнее для базы данных и набор небольших серверов, которые запускаются/останавливаются по мере необходимости в зависимости от нагрузки.

Из недорогих серверов у амазона особого выбора нет. Изначально я планировал использовать для этого Small Instance — именно этот вариант рекомендует amazon по умолчанию. В нем 1.7 GB RAM, что довольно комфортно для windows, но только 1 ECU. На практике в памяти можно разместить 5-8 рабочих процессов, однако, толком работать одновременно они не способны — ядро одно и очень слабое: 1 ECU это всего-то 1 Ghz одного ядра Xeon образца 2007 года. По моим оценкам, примерный эквивалент — процессор Celeron на частоте 1.5 Ghz. Стоит такой сервер $0.12 в час ~ $86 в месяц, десяток — $860 в месяц… Было очевидно, что эта конфигурация сервера не совсем отвечает моим задачам.

Поэтому я решил попробовать Micro instance — всего-навсего 613 MB памяти, но зато:
  • производительность достигает 2 ECU
  • он в 4 раза дешевле
  • можно использовать 64 битную платформу Windows Server 2008 R2 Core


Наверное, многих заинтересует — почему я выбрал x64 систему для 613 MB памяти? Аргументы следующие:
  • 2008 R2 — новая система, по сравнению с 2008. 2008 построена на базе Vista, R2 — на базе windows 7.
  • Улучшена работа IIS
  • Улучшена виртуализация на уровне OS, которой мы и будем пользоваться


Server Core — это урезанная установка Windows, без многих GUI элементов — нет Internet explorer, обычного Explorer и даже taskbar!

Разберем шаги настройки такого сервера:

1. Инсталяция Windows

В списке систем, предлагаемых по умолчанию, нет версии Core. Однако, ее можно найти поиском по ключевому слову «2008R2»:
image

Запустив Micro instance мы можем подключиться к нему по RDC, где вместо привычного десктопа нас встречает голая командная строка:

image

Набрав taskmanager видим, что у нас 300 MB памяти занято, общий объем виртуальной памяти примерно 1,4 GB. У инстанса есть единственный диск размером 16 GB, из которых после инсталяции свободно чуть больше 11 GB, чего вполне достаточно для наших задач.

2. Подключение к другим компьютерам cloud

Firewall в Ec2 (называется Security Groups), как обычно, разрешает заданным IP открывать указанные порты. Чтобы не добавлять IP каждого запущенного сервера вручную, можно использовать следующий прием — указать вместо IP имя security group (которое показано на вкладке details, и выглядит примерно «sg-c45ac45a») и разрешить доступ по всем портам.
При создании нового инстанса указываем эту же Security group и новый инстанс автоматически имеет доступ к любым другим ресурсам вашего облака. Мой security groups выглядит следующим образом (обратите внимание именно на первую и последнюю строчку добавленную для ms sql):
image

Соответственно, мы успешно выполнить следующую команду и подключиться по внутреннему IP к основному серверу:

net use z: \\10.20.30.40\C$ /user:Administrator

3. Установка IIS, .NET

Полный набор всевозможных команд детально описан MS на этой странице — http://technet.microsoft.com/en-us/library/ee441260(WS.10).aspx, однако, чтобы не набирать все это каждый раз я сделал «regiis.bat» на основном сервере. Запустив его на blade, выполняем все необходимые инсталяции (я выбросил FTP server, можно убрать еще несколько функций — экспериментируйте):

start /w pkgmgr /iu:IIS-WebServerRole;IIS-WebServer;IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;IIS-DirectoryBrowsing;IIS-HttpErrors;IIS-HttpRedirect;IIS-ApplicationDevelopment;IIS-ISAPIExtensions;IIS-ISAPIFilter;IIS-ServerSideIncludes;IIS-HealthAndDiagnostics;IIS-HttpLogging;IIS-LoggingLibraries;IIS-RequestMonitor;IIS-HttpTracing;IIS-CustomLogging;IIS-ODBCLogging;IIS-Security;IIS-BasicAuthentication;IIS-WindowsAuthentication;IIS-DigestAuthentication;IIS-ClientCertificateMappingAuthentication;IIS-IISCertificateMappingAuthentication;IIS-URLAuthorization;IIS-RequestFiltering;IIS-IPSecurity;IIS-Performance;IIS-HttpCompressionStatic;IIS-HttpCompressionDynamic;IIS-WebServerManagementTools;IIS-ManagementScriptingTools;IIS-IIS6ManagementCompatibility;IIS-Metabase;IIS-WMICompatibility;IIS-LegacyScripts;WAS-WindowsActivationService;WAS-ProcessModel

Dism /online /enable-feature /featurename:IIS-ManagementService

Dism /online /enable-feature /featurename:WAS-NetFxEnvironment /featurename:IIS-ISAPIExtensions /featurename:IIS-ISAPIFilter /featurename:IIS-NetFxExtensibility /featurename:IIS-ASPNET


Чтобы разрешить удаленное подключение для управления IIS, осталось всего ничего — меняем ключ в реестре (запускаем regedit.exe):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WebManagement\Server — свойство EnableRemoteManagement ставим в 1.

и запускаем сервис удаленного управления на blade инстансе:
net start wmsvc

Проверяем подключение к IIS с основного сервера — Connect to server..., указываем внутренний IP, Логин/Пароль и сохраняем подключение:


Осталось скопировать код приложения, для чего я создал на основном сервер copylocal.bat, который копирует последние исходники приложения в предопределённую папку с использоваением xcopy.
Опять же, этот .bat нужно выполнить на blade сервере.

С основного сервера настраиваем iis — проверяем использование .net в application pool, количество процессов — я ставил 3, так как средний размер W3WP.exe у меня около 100 MB, и после этого успешно открываем наш сервер в барузере по http:// и его public dns.

Сервер готов к работе и подключению в loadbalancer.

4. Масштабирование

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

Распределение работы между серверами можно поручить loadbalancer от amazon, 1й load balancer в течении 1 года предлагается бесплатно.

Обновление версии сервера выглядит так:
  • поднимаем новый blade с старым кодом в ручном режиме
  • обновляем код (у нас есть батник)
  • проверяем работу по http
  • делаем AMI новой версии
  • размножаем нужное количество серверов
  • меняем используемые сервера в load balancing
  • старые сервера выключаем — команда Terminate

Также есть вариант использовать autoscaling, но я думаю рассказать об этом в другой раз.

5. Тестирование скорости

Я до последнего боялся, что будут неоправданные тормоза на таком маленьком количестве памяти, поэтому нужно было обязательно проверить систему под хоть какой-то нагрузкой.
Для тестирования я использовал loadimpact.com и специальный метод контроллера, который делает redirect на случайную страницу. Результат получился вполне достойный — вот отчет, особенно для стоимости этого сервера в $21/месяц.
Большое время ответа на 10 и 20 клиентах объясняется инициализаицей приложения, свопом ненужных частей системы, так как тест был запущен сразу же после конфигрурирования.

Финансовый результат

Очевидно, что в мире Windows тяжело себе представить жизнь без мышки, контекстных меню и GUI для настройки чего угодно. Однако, это оказалось не так сложно. Самой большой сложностью было подобрать настройки firewall (как амазоновского так и встроенного в windows) и придумать простую схему выкладки, не требующую массы усилий. Я думаю, что с данной инструкцией реально настроить такой сервер за час, а это даст вам существенную ежемесячную экономию.
Общее мое впечатление — эффективность данной конфигурации в пересчете на 1 доллар примерно в 3 раза выше по сравнению с использованием массива small instance. То есть примерно 6 small instance можно смело заменить на 8 micro instance, что в денежном выражении обозначает $173 доллара в месяц вместо $516 — более 4000 долларов в год.

Полезная информация
1. Getting started для Core — http://technet.microsoft.com/en-us/library/ee441260(WS.10).aspx.
2. Если закрыли консоль, можно нажать Ctrl + Alt + End, что аналогично Ctrl + Alt + Del на вашем компьютере и запустить Taskmanager. Команда «выполнить» опять позволит запустить cmd.
3. Для завершения сеанса используем команду logoff.
4. Типы инстансов амазон — http://aws.amazon.com/ec2/instance-types/.
5. Цены на инстансы амазон (зависят от датацентра, в котором вы хотите их разместить) — http://aws.amazon.com/ec2/pricing/.

Update (26.07.2011): Stress testing такого сервера — http://loadimpact.com/result/ec2-50-19-133-136.compute-1.amazonaws.com/en/random-9ec1ada5c887d3d3c8607ecb740547a2

+27
4.4k 59
Comments 29
Top of the day