- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF108:CloudComputing
Материал из Linuxformat.
Содержание |
Программируем в Облаках
- Хотите иметь огромный Linux-кластер и скидывать на него решение самых насущных проблем? «Большие» вычисления теперь дешевы, и это покажет Дэн Фрост.
Время — одиннадцать утра. Вы получили письмо от директора по маркетингу: «Привет. Мы только что пообещали отправить наш дневной бюллетень 2 000 000 клиентам наших партнеров. Я сказал, что все будет ОК, и они получат его где-то через час. Когда сделаешь, сообщи. Спасибо».
Спешное деление в уме 2 000 000 жаждущих клиентов на 3 престарелых сервера не дает вам результата «все будет ОК». Конечно, можно бросить на проблему 200 серверов EC2 и посиживать, балуясь с обоями рабочего стола, пока они глодают список имен.
Для большинства из нас быстрое масштабирование своего приложения и возможность скинуть проблему на несколько десятков серверов до недавнего времени было непозволительной роскошью, пока Amazon не открыл свои вычислительные облака для широких масс.
ЕC2 предоставляет столько виртуальных серверов, сколько вам нужно, взимая почасовую плату. За $ 0,10 – да, именно десять центов США – вы получите “1 EC2 Compute Unit” [1 вычислительный модуль EC], имеющий 160 ГБ для хранения данных на 32-битной платформе с 1,7 ГБ памяти. Суммарная стоимость выходит $ 72 в месяц, так что это не дешевый хостинг, но это не повод им не пользоваться. Подумайте о нем иначе: за $ 0,40 в день вы сможете получить 4 машины, загруженные отправкой ваших дневных бюллетеней.
Облако? А что это?
«Облаком» [cloud] прозвали огромное количество серверов Amazon, работающих в вычислительных центрах по всему миру; поверх них находится виртуализация Xen, предоставляющая тысячи виртуальных машин. EC2 существует почти два года, и уже имеет некоторые впечатляющие применения, от простого срочного масштабирования до развитой обработки данных.
New York Times применила EC2 для обработки 11 миллионов изображений статей, конвертировав их в PDF за 24 часа. Hadoop – открытая реализация алгоритма MapReduce от Google, развернутая на EC2 – позволяет выполнить колоссальный объем поисковых операций, при мизерных вложениях и трудозатратах.
Сайты вроде jamglue.com используют EC2 для внутренней обработки огромного количества аудиофайлов, на которую ушли бы длинные шеренги стоек с оборудованием. Доступ к дешевой вычислительной мощности делает построение таких систем программными, а не аппаратными проектами.
Ученые используют EC2 как дешевый инструмент для выполнения ряда «числодробильных» задач. Автоматическое тестирование придет на ум не в первую очередь, но selenium – инструмент как раз такого класса – может быть запущен на множестве модулей EC2, каждый из которых будет работать над конкретным тестом. И если раньше прогон всех тестов для вашего приложения занимал два часа, то теперь он выполнится за 12 минут при использовании десяти «экземпляров» [instances] EC2.
Типичный пример, который мы далее рассмотрим на практике, это отправка электронной почты. Обычно, при необходимости рассылать тысячи писем ежедневно, вы отводите на эту задачу отдельные серверы, и весь остаток дня они лодырничают; а с EC2 вы просто мобилизуете 3 экземпляра EC2, скажем, в 11 утра, загружаете ваши сообщения на них и отправляете почту в полдень. Это может стоить 1–2 доллара в день – сравните с сотнями долларов, необходимых на мощный выделенный сервер со всеми сопутствующими прибамбасами.
Проще говоря, EC2 – это возможность решать более крупные задачи и масштабироваться быстрее и дешевле.
Что там за Облаками?
Используйте это для:
- Быстро масштабируемых приложений
- Масштабирования в заданное время
- Задач массовой обработки
Не используйте это для:
- Хранения своих данных (возьмите что-то типа S3)
- Хостинга маленьких сайтов – он обходится дороже
Итак, вот что лежит в основе, но с нашей точки зрения все выглядит гораздо проще. Подключившись к EC2, вы увидите нечто вроде обычного Linux-сервера. К нему можно обратиться по SSH, активировать сервисы, держать web-сайты, запускать процессы, точно так же, как при загрузке нормального сервера. Когда экземпляр работает, вы подключаетесь к нему либо через временный URL, либо, как было сделано недавно, через статический IP.
Если вам понадобится больше машин, вы, используя SOAP, командную строку или графический интерфейс, отправляете запрос на них, и через некоторое время получаете новые сервера для ваших нужд. Между экземплярами EC2 или между EC2 и внешним миром можно обмениваться данными.
Закончив работу с экземплярами, вам просто надо выключить их – и все, вы больше ничего не платите. Принцип «плати-пока-работаешь» означает, что вы можете тестировать сложные кластерные установки, бросать сервера на подмогу, а то и просто поиграть этак со 100 серверами.
На самом деле их тут нет...
Но не обольщайтесь: в реальности машин не существует. Экземпляры EC2 – это виртуальные серверы, и поэтому они временны. При выключении экземпляра все данные теряются; то же самое происходит при его сбое.
В чем тут смысл? Ну, сервера EC2 дешевы – считайте их еще и одноразовыми. В отличие от выделенного сервера, рядом с которым вы проводите полжизни, резервируя и занимаясь мониторингом и проверкой, экземпляру EC2 этого не нужно, потому что вы моментально можете заменить его другим.
К ним надо немного попривыкнуть, и это может изменить способ написания ваших приложений, но главное, они вселяют надежду на то, что у вас не будет точек сбоя. Серверы EC2 – просто «рабочие лошадки», а важные данные спокойно хранятся вдали от них. Если «рабочая лошадка» рухнет, данные не будут утеряны.
Как вы увидите далее, это вносит изменения в планирование и построение ваших приложений.
Начало
Во-первых, заведите себе учетную запись на Amazon Web Services: https://aws-portal.amazon.com/gp/aws/developer/registration/index.html. Затем перейдите на сайт EC2 http://www.amazon.com/ec2/ и с помощью кнопки “Your Web Services Account” выберите пункт AWS Access Identifiers. Вам потребуется Access Key ID и Secret Access Key с этой страницы.
Вы можете управлять вашей частью облака EC2 через интерфейс командной строки, API SOAP или графический интерфейс. Мы же справимся с использованием EC2 при помощи расширения для Firefox, а для любителей грязной работы есть горы документации.
Следуя инструкции с форума, используем Key ID и Secret Access Key как подтверждение ваших полномочий: http://developer.amazonwebservices.com/connect/thread.jspa?threadID=17717&tstart=45
Установив все это, вы увидите список доступных вам AMI – образов машин. Чтобы начать работать, создайте экземпляр с подходящим образом, например, Fedora-core4-apache-mysql.
Когда образ выполняется, он возникает в списке ‘Your Instances' [Ваши экземпляры]. Подождите, пока колонка Public DNS сменится с ‘pending’ [ожидание] на ‘running’ [работа].
Откройте SSH-терминал и войдите в экземпляр:
ssh -i ваш_ключe.pem root@публичное_доменное_имя_сервера
Флаг -i велит ssh использовать реквизиты ssh, созданную вами при настройке расширения Firefox.
Войдя в свой первый экземпляр EC2, осмотритесь вокруг. Заметим что он по виду и ощущениям выглядит как обычный сервер, поэтому долго привыкать не придется.
Для примера: зайдите в /var/www/html/ и создайте там файл hello.php:
<?php echo “<h1>Hello, virtual world</h1>”; phpinfo(): ?>
Скопируйте Public DNS в браузер, чтобы увидеть результат. После этого попробуйте установить что-то вроде wordpress, чтобы убедиться, как просто пользоваться EC2.
Теперь у вас есть свой модуль EC2; платите за него $ 0,10 в час и используйте как нормальный web-сервер. Если вы уже баловались с Linux-серверами, там для вас будет очень мало нового, и вы, вероятнее всего, сможете сразу начать работу. Но далее мы видим важную разницу: остановите экземпляр, например, выбрав его и нажав кнопку Terminate. Затем запустите новый экземпляр. Все, что вы делали, будет потеряно, потому что этот экземпляр абсолютно новый, а старый стерт с лица земли.
2 000 000 электронных писем
Так что же нам делать с заданием директора по маркетингу и его двумя миллионами писем? Объединим EC2, SQS и чуть-чуть Ruby on Rails.
EC2 предоставляет семейство web-сервисов для хранения данных, постановки их в очередь, поиска и прочего, обладающих широкими возможностями масштабирования, и в то же время очень простых в использовании. Один из его наиболее известных представителей – S3: многие компании применяют его для дешевого резервного копирова- ния. Другой – Simple Query Service (SQS), и он гораздо внушительнее, чем его имя. Только представьте: 10, 100 или 1000 экземпляров EC2 все трудятся над одним центральным списком задач; простое привлечение большего числа экземпляров выполнит эту работу быстрее.
Используя очень простую модель Rails под названием ‘Email’, добавим несколько методов, которые будут помещать каждую запись Email в очередь SQS при сохранении:
# Standard Rails callback def after_save send_email_to_queue() end # Send the current email to the SQS queue to be delivered def send_email_to_queue q = Email.get_queue() q.send_message self.to_xml end
Теперь, имея возможность добавлять письма в центральную очередь, мы хотим, чтобы какой-либо из наших экземпляров EC2 брал их для отправки. Опять же, добавим это к модели e-mail:
# Get an email from the queue - pop from stack def self.get_email q = Email.get_queue() queueitem = q.receive_message remote_email = Email.new() remote_email.from_xml queueitem.body return remote_email end
При создании каждого нового элемента Email он помещается прямо в SQS-очередь, где его может забрать любой экземпляр EC2:
e = Email.new() e.recipient = ‘dummy@example.com’ e.save()
И затем любой другой экземпляр в нашем коде может просто вытащить письмо из SQS и послать его:
e = Email.get_email
Нужны еще кое-какие методы, которые я здесь опустил, но и эти строки показывают, как сделать вашу задачу простой и масштабируемой. Для развертывания этого приложения нам нужен подходящий AMI – выберите из списка образ ami-5c0aef35 (манифест ec2onrails). Получив работающий экземпляр EC2, разверните Rails-приложение на каждом сервере и запустите их.
Далее каждый экземпляр EC2 начинает забирать почтовые сообщения из очереди SQS, подготавливать их и отправлять. Rails-приложение будет просто повторять попытки, пока очередь не опустеет, так что можете добавить 10, 20, 30 экземпляров.
Иметь экземпляры EC2.0, работающие с SQS-списком задач, очень эффективно для процессов, которые могут быть децентрализованы. Пакетная отправка электронной почты – один из таких примеров, как и задача конверсии образов статей NYT. В обоих случаях большую работу можно разбить на множество более мелких, независимых задач.
А дальше что?
Использовать чужое AMI не так-то просто, потому что экземпляры EC2 все настроены под вас.
Например, selenium grid использует EC2 для автоматизации тестирования web-приложений: http://selenium-grid.openqa.org/
Или используйте Hadoop для запуска по-настоящему крупных вещей: http://wiki.apache.org/hadoop/AmazonEC2
Попробуйте учебники и приложения на: http://developer.amazonwebservic es.com/
Для всех этих примеров нам не пришлось писать какого-либо кода с учетом окружения EC2. Пример PHP – всего лишь простое PHP, и приложение Rails не общается с EC2 каким-либо специальным образом – только через SQS. Так происходит потому, что для большинства готовых web-приложений вам не нужно менять многое для работы на EC2: машины спроектированы так, чтобы на вид не отличаться от обычных серверов.
API имеются для наиболее популярных языков – PHP, Java, Ruby, Python и т.д. – так что вы сможете сделать что-то устанавливаемое и запускаемое. Но поиграть стоит. Если ваш основной заработок – программирование, с EC2 вы сможете вбросить огромную вычислительную мощность в проблемные задачи за очень небольшие деньги. Если вы просто любите пробовать новые технологии, EC2 доставит вам большое удовольствие. Вы сможете запустить приложение такой сложности, о которой из-за убогого компьютера даже и мечтать не смели, или наконец завершить NetHack на суперкомпьютере! LXF
Контроль облака через Firefox
Расширение к Firefox позволит вам быстро запустить ваш экземпляр.