Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР 138, ИЮНЬ 2010 г.

Amazon S3 для обычных смертных: современные технологии облачных вычислений для хранения файлов и бэкапа

Появление облачных технологий позволило любому стартапу иметь в распоряжении продвинутую инфраструктуру для хранения файлов. Она не упадет и выдержит любую нагрузку пользователей — это раз. Она бесконечно расширяема — это два. И стоит дешевле, чем приобретать оборудование самому — это три. Но разобраться с облачными вычислениями и использовать их могут не только специалисты Twitter или другого масштабного проекта — это под силу каждому. И более того — полезно не только разработчикам.

Во время загрузки страниц многих крупных интернет-проектов нередко можно заметить, что ресурсы вроде картинок и видео зачастую подгружаются откуда-то s3.amazonaws.com. Легко догадаться — они находятся в облаке, а именно в Amazon S3. Иногда не все так очевидно: кто же мог подумать, что известный сервис для синхронизации данных между компьютерамиDropbox — это красивый, многоплатформенный клиент для доступа к файлами, которые опять же хранятся на Amazon S3? И ведь как, заметь, хорошо работает! Не надо объяснять, зачем высоконагруженным проектам необходима надежная площадка для размещения файлов, которая 99.9% будет онлайн. Но это может понадобиться и обычному пользователю. Банальная задача — сохранность данных. После того как упал мой внешний жесткий диск с огромным количеством фотографий, я задумался о том, что неплохо сделать бэкап. Но куда? Выкладывать на flickr или Яндекс.Фотки удобно, но все-таки далеко не все фотографии хочется выкладывать в фотохостинг, даже под замок. Называйте меня параноиком. Больше того, фотки — это фотки, а как быть с бэкапом других файлов? Есть несколько серверов, откуда периодически необходимо сливать несколько сотен мегабайт бэкапа, но надежной площадки я так и не нашел. Кто гарантирует, что жесткий диск на выделенном сервере, куда отправляются бэкапы, точно так же не прикажет долго жить? О бэкапе на любые носители, в том числе DVD, не хочу даже задумываться: это дико неудобно и вообще прошлый век. В общем, именно в тот самый момент, когда я задумался о площадке для надежного хранения файлов, мне пришла в голову идея об Amazon S3. И вот почему.

Что такое S3?

Amazon S3 расшифровывается как Amazon Simple Storage Server — простое хранилище файлов от Amazon. Если говорить кратко, то это просто хранилище в Интернете. "Причем тут облачные вычисления, это же обычный хостинг?", — возможно, заметишь ты. Сейчас я объясню. У обычного хостинга всегда есть несколько ограничений. Первое самое прозрачное — объем жестких дисков (особенно, если это касается дорогих SCSI). Упрешься в потолок — нужно делать апгрейд. Со вторым ограничением сталкиваешься, когда на ресурс неожиданно приходит чрезмерно много пользователей, и сервер банально... падает. Или другой вариант — не хватает Интернет-канала, и пользователи тянут файлы так, как если бы оказались 10 лет назад на 36.6К-модеме. Мало этого, если вдруг жесткий диск на сервере полетит, то лучшее, на что придется надеяться, — это лишь когда-то сделанный бэкап. Увы, даже с резервной копией, сделанной несколько часов назад, можно потерять тонну важных данных. А теперь посмотрим на Amazon S3. Тебе предоставляется ровно столько пространства в хранилище, сколько нужно. Хоть 10 Мб, 1 Гб или даже 5000 Гб — никаких ограничений (оговорюсь, кроме максимального размера на файл — 5 Гб). В датацентрах Amazon используется специально проработанное оборудование и распределенные файловые системы, позволяющие бесконечно масштабироваться. Те же самые знаменитые технологии, которые давным-давно использовались, скажем, в Google для хранения огромных массивов данных, но в виде услуги для конечного пользователя. Что не менее важно, Amazon S3 гарантирует сохранность данных. Любой объект в обязательном порядке избыточно хранится одновременно в нескольких местах. Как только объект попадает в хранилище, S3 заботиться о его надежности, проверяя и в случае необходимости увеличивая недостающую избыточность данных. Помимо этого, S3 также регулярно проверяет целостность хранимых данных, используя контрольные суммы. Если вдруг обнаруживаются нарушения, целостность восстанавливается опять же с помощью тех самых избыточных данных. Что все это дает? Много "девяток":

  • 99.99% доступность файлов в течение года;
  • 99.999999999% надежности.

Стоп, я еще не сказал о системе версионности. Ты можешь использовать ее для сохранения, извлечения и восстановления предыдущих версий объекта, хранящихся в Amazon S3. Запрос по умолчанию извлекает последнюю версию. Но более старую модификацию файла можно закачать, указав версию файла.

Сколько это стоит?

Конечно, услуги Amazon S3 не бесплатны, как и за все хорошее, придется платить. Но я бы никогда не стал рассказывать об облачных вычислениях в таком ключе, если бы не более чем подъемные цены. Если речь идет о небольших объемах для хранения (на бэкап каких-то важных файлов) и небольшом трафике, то получаются фактически копейки. В Amazon используется регрессионная шкала: чем больше хостишь, тем дешевле тебе обходится гигабайт хранилища. До 50 ТБ стоимость гигабайта составляет $0.150. Примерно 4.5 рубля за гигабайт в месяц! Правда, отдельно придется платить за трафик (пока бесплатно), а также запросы для обращения к объектам ($0.01 за 1000 запросов).

Чтобы сразу понять, сколько примерно ты будешь тратить, можешь воспользоваться специальнымкалькулятором. Выбираем в меню, что хотим подсчитать стоимость для сервиса Amazon S3 (это не единственный проект облачных вычислений от этой компании), и вводим данные по своему хранилищу бэкапов. Я использую около 20 Гб для хранения файлов, входящий трафик составляет примерно 5 Гб, а входящего практически нет (укажем для верности тоже 5 Гб). Количество запросов PUT/COPY/POST/LIST - около 5 тысяч, столько же укажем для запросов GET. Заполнив поля, нажимаем на "Add to bill" и удивляемся цене справа.

Получается, за сверхнадежное хранилище с поддержкой версионности, которое доступно 99.99% времени, придется платить $3.66 в месяц, а это чуть больше 100 рублей. Не то чтобы очень большие платы за спокойствие и гарантию сохранности данных. К тому же, сам факт использования самых передовых технологий: разобравшись с S3 для хранения бэкапов, в случае необходимости легко потом подключить cloud-storage к своему высоконагруженному проекту. Если у тебя есть таковой, но при этом хостинг постоянно отказывает, а ширины канала не хватает, чтобы выдержать часы пик, обязательно посчитай расходы на содержание S3. Вполне вероятно, что при тех же затратах ты сможешь получить беспроблемное хранилище в облаке, а быть может — даже дешевле!

Тут есть еще одна хитрость. В калькуляторе есть один непонятный на первый взгляд параметр Reduced Redundancy Storage (RRS). Это относительно недавно появившаяся опция в S3, позволяющая уменьшить расходы за счет покупки дискового пространства в менее надежном контейнере. Это, конечно, не значит, что файлы будут хоститься на каком-нибудь старом оборудовании или вроде того. Конечно, нет — просто для файлов в таком хранилище будет использовано меньшее количество избыточности и меньшее количество репликаций. Но даже в таком случае надежность хранения будет в 400 (!) раз выше, чем просто дома на жестком диске. Такое хранилище дешевле (это легко проверяется калькулятором), но теоретически менее надежно. Тут важно еще сказать, что у Amazon S3 есть три региона, в которых расположены датацентры — два в Америке, один в Ирландии и один в Сингапуре. Это сделано для того чтобы минимизировать задержки: лучше всего выбирать регион ближний к себе, но при этом иметь в виду, что цена между различными регионами может незначительно отличаться.

XXX ЗАГОЛОВОК XXX
Как подписаться?

Какими бы пафосными ни были разговоры об облачных вычислениях, начать их использовать — плевое дело. В первую очередь, как вводится, необходимо зарегистрироваться: жмем на кнопку "Sing up for Amazon S3" на официальной странице сервиса aws.amazon.com/s3. Если ты до этого момента покупал что-то в интернет-магазине Amazon (а я, например, покупал в нем Radar-детектор вдвое дешевле, чем он продается в России), то можно использовать уже имеющийся аккаунт. В противном случае придется заполнить несколько стандартных форм. Так или иначе, аккаунт в Amazon'е у нас есть, теперь необходимо обзавестись доступом к самому S3, а вернее всем Amazon Web Service (AWC). Вводим свое имя, почтовый адрес, пароль и выбираем метод платежа. Для оплаты, как ни крути, понадобится карта международной платежной системы, т.е. Visa или Mastercard. Ты можешь скривиться: "Мол, фигня какая: ни Webmoney, ни Яндекс.Денег нет — не буду пользоваться". На самом деле, время диктует новые правила. Пластиковой картой можно расплатиться везде: я даже не говорю об иностранных магазинах и проектах, их начали нормально принимать везде в России. Затраты минимальны: если карточка нужна только для оплаты в Интернете, сгодится виртуальная версия (тебе выдается только номер карты, время истечения и cvv2 код вместо самой пластиковой карты). Обслуживание Visa Virtuon стоит 200 рублей в год, при этом ты можешь расплачиваться ею без комиссии, как в случае с электронными деньгами. Такую карту принимают везде, где есть логотип Visa — проще говоря, ей можно расплатиться везде :). Amazon спишет с карточки один доллар, чтобы проверить валидность карты, и через некоторое время вернет его. Это поначалу настораживает и смущает: "Один доллар, и все?". Так и есть — сервис использует оплату постфактум. Сколько будешь использовать пространства, сколько трафика нагенеришь — за столько и заплатишь. Очень удобно и гибко. Через несколько минут после регистрации на почту придет письмо с подтверждением того, что твой аккаунт активирован. Можно начинать работать.

Наше первое обращение к хранилищу

Прежде чем рваться в бой, необходимо разобраться, как собственно устроен S3 и как работать с файлами, которые находятся в облаке. В платформе от Amazon нет привычной файловой системы — она распределенная. Здесь нет такого понятия как файл или каталог: на практике это означает, что ты не сможешь взять FTP- или SSH-клиент и обратиться к ним.

Amazon S3 концептуально — это очень простое key-based хранилище. Это означит, что когда ты размещаешь данные, им присваивается уникальный ключ объекта, который дальше может быть использован, чтобы эти файлы получить. Каждый объект находится внутри так называемого bucket'а — это фундаментальное понятие S3, означающее контейнер для хранения любого количества объектов. Но поскольку ключ может быть строкой, то он может имитировать иерархию каталогов. Последнее означает, что если у тебя есть файл scanner.zip в каталоге xtoolz, то ты можешь залить его в хранилище S3 и присвоить ему ключ xtoolz/scanner.zip.

Любые объекты находятся в облаке не сами по себе, а внутри так называемого bucket'а. Bucket или ведро — это концептуальное понятие контейнера внутри Amazon S3, в котором может находиться нелимитированное количество объектов. Название bucket должно быть уникально по всей системе Amazon S3, потому как является идентификатором для доступа к объектам bucket'а извне. Например, если объект называется xtoolz/scanner.zip и находится в bucket'е xakep, то к нему можно обратиться, используя URL http://xakep.s3.amazonaws.com/xtoolz/scanner.zip. Обращаться к bucket'ам можешь только ты сам, а можешь разрешить это делать другим. С помощью атрибутов объекта ты можешь разрешить или запретить доступ другим людям, которые хотят скачивать или заливать файлы в твои bucket'ы. Так, чтобы любой человек мог скачать объект из твоего хранилища по адресу http://xakep.s3.amazonaws.com/xtoolz/scanner.zip, ему должны быть присвоены права для чтения "All".

Для работы с объектами используются технологии REST и SOAP, а все операции выполняются с помощью запросов (именно поэтому за них надо платить). Пять основных операций: создать bucket, записать объект (указав уникальный ключ и bucket), считать объект (можно скачать файл по HTTP или BitTorrent протоколу), удалить объект, вывести листинг ключей (получить список всех ключей, хранящихся внутри указанного "ведра").

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

Организуем файловое хранилище

Так как же получить доступ к этим bucket'а и создать, наконец, свое первое хранилище? Есть несколько вариантов. Можно воспользоваться бесплатным расширением для Firefox -S3Fox: с помощью него можно делать практически все. Устанавливается как и любой другой аддон, но при первом же запуске обязательно выругается по поводу отстствующих аккаунтов. Можешь не пробовать вводить сюда email и пароль для доступа к личному кабинету Amazon — ему нужно совсем другое. В S3 используется довольно мощная модель безопасности, предусматривающая различные способы авторизации. Самый простой способ обратиться к хранилищу — использовать пару ключей Access Key ID - Secret Access Key (они же используются для симметричного шифрования). Получить ключи, создать новые или заблокировать существующие можно в разделе Security Credentials, в который можно попасть из своеголичного кабинета. Выглядят они примерно так:

Access Key ID: AKIAIEAXPSMKJUXB3XDQ
Secret Access Key: 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

Все, теперь создаем новый аккаунт в S3Fox, вводим ключи - и, ву-а-ля, соединение устанавливается. Выглядит S3Fox, как и любой файловой менеджер с двумя панелями: с одной стороны локальные диски, с другой — облако. Если попробовать переместить файл или папку, плагин скажет, что для этого предварительно нужно создать bucket. Объект в облаке не может болтаться сам по себе и обязательно должен быть привязан к одному из "ведер". Сам процесс создания bucket мало чем отличается от создания каталога на локальном диске, о правилах составления имени подскажет сам плагин. В целом надо использовать те символы, которые могут быть в URL — как я уже сказал, имя "ведра" далее используется для составления URL для доступа файла извне. Пробуем залить файл — получилось. Выберем целую папку — нет проблем, файлы по очереди заливаются с использованием очереди. Теперь посмотрим, доступны ли файлы извне. Через контекстное меню какого-нибудь файла нажмем "Copy URL" и попробуем открыть полученную ссылку в браузере (http://xakep.s3.amazonaws.com/xtoolz/scanner.zip). Облом:

AccessDeniedAccess Denied31D32B892AF10B41tDOSXPdDmixz7CkanMA1GoYbaBhgcTjQy8l93OqTNsXXJqmj3snzF2fOdlAQJvQ9

Доступ запрещен. Необходимо опять же через контекстное меню изменить права доступа ("Edit ACL") и сделать файл доступным для всех — после этого все сразу заработает. S3Fox позволяет выполнять все элементарные действия с файлами и даже поддерживает простейшую синхронизацию каталогов. Еще один плюс в том, что плагин кроссплатформенный и может быть установлен к браузеру под любой ОС. С другой стороны, когда начинаешь работать с Amazon S3 более плотно, приходит понимание, что функционала у плагина недостаточно. Каково было мое удивление, когда я хотел переименовать файл, а такой возможности... не оказалось. Нет и поддержки более дешевого хранилища RRS, о котором мы говорили. В общем, с этого момента я стал использовать инструмент посерьезнее —CloudBerry Explorer.

Прокачиваем софт

Единственный недостаток этой утилиты в том, что работает она только под виндой. Зато в остальном это чрезвычайно мощный инструмент для работы с S3-хранилищем.

Во-первых, тут есть вкладки: можно даже одновременно работать с разными учетными записями на Amazon S3, если необходима такая возможность. Во-вторых, программа не впадает в стопор, когда нужно залить на сервер многогигабайтный файл (в S3Fox этого лучше не делать!). То же самое касается ситуации, когда в облако требуется залить огромное количество файлов: все, будь то совсем маленькие или очень большие, аккуратно встанут в очередь и будут передаваться на сервера S3. В-третьих, CloudBerry Explorer поддерживает быстрое копирование и перемещение объектов между аккаунтами и bucket'ами внутри Amazon S3. Т.е. не надо сначала закачивать файлы себе, а потом опять заливать на сервер — все происходит прозрачно внутри облака. Естественно, поддерживается переименование объектов (почему ее нет в S3Fox, мне сложно понять). В-четвертых, ты можешь расшарить объекты или даже целые "ведра" для других пользователей Amazon S3. С помощью ACL-листов четко настраиваются все политики безопасности. Кстати, когда создаешь ссылку, иногда очень полезно выбрать протокол BitTorrent (опция "generate bittorent url). В этом случае файл из облака будет скачиваться через Torrent'ы. Это очень классная фишка Amazon S3, которая пригодится, чтобы сэкономить трафик. Пользователи при таком раскладе будут выкачивать объект не только из облака, но и с компьютеров друг друга. Мало того, для любой сгенерированной ссылки можно обозначить срок годности, после которого она будет невалидна. И что важно: при всех плюсах CloudBerry Explorer остается бесплатным для всех пользователей. Впрочем, разработчики знали, как можно заставить пользователей платить. В ее старшем брате, за который просится $40, есть еще несколько умопомрачительных фишек. Во-первых, это поддержка шифрования и версионности, которые предлагаются Amazon S3. А, во-вторых, возможность использования Powershell-скриптов для автоматизации практически любых задач. Попробуем автоматизировать закачку содержимого c:\workdata\ в bucket "xakep", причем имя новой директории в облаке будет генериться автоматически, исходя из текущей даты (2010_06_01 - такой формат удобнее для сортировки):

$new_folder_format = Get-Date -uformat "%Y_%m_%d"
$s3 = Get-CloudS3Connection -Key $key -Secret $secret
$destination = $s3 | Select-CloudFolder -path "xakep" | Add-CloudFolder $new_folder_format
$src = Get-CloudFilesystemConnection | Select-CloudFolder -path "c:\workdata\"
$src | Copy-CloudItem $destination -filter "*"

Отличный способ выполнить умный бэкап. Впрочем, для резервного копирования в облако S3 есть специализированные программы. Разработчики CloudBerry Explorer предлагают очень простое и толковое, но, к сожалению, платное решение - CloudBerry Online Backup. А лично я используюS3 Backup, правда, и тут беда. Программа постепенно приближается к официальному релизу, и разработчики грозятся сделать ее платной. Во время бэкапа важно помнить о максимальном ограничении файла для S3 — 5 Гб. К счастью, обе утилиты могут использовать компрессию так, чтобы уложиться в это ограничение.

S3 и Linux

Теперь пару слов о том, как я делаю бэкап со своих линуксовых серверов. По мне лучше всего подходит консольный s3-клиентs3cmd. В Ubuntu он входит в стандартный репозитарий, поэтому устанавливается через менеджер пакетов: apt-get install s3cmd. Для того чтобы настроить клиент, ввести пару ключей, пароль для шифрования, а также указать другие параметры работы с облаком, необходимо запустить конфигуратор: s3cmd --configure. Настройщик проверит соединение, и если они правильные, предложит сохранить их в конфигурационный файл. Теперь можно приступать к работе. Классно, что в режиме бэкапа s3cmd очень сильно напоминает rsync, поэтому запускается похожим образом:

s3cmd --acl-private --bucket-location=EU --guess-mime-type --delete-removed sync /local/backup/ s3://xakep/backupfromserv1

Ключ -"-acl-private" означает, что доступ к файлам будет только у нас. С помощью "--bucket-location=EU" мы указываем регион (в данном случае Европу, а точнее Ирландию). Опция "--guess-mime-type" обозначает, что MIME-тип содержимого будет подбираться автоматически, исходя из расширения файла. А чтобы файлы сами удалились из S3-хранилища, если они исчезают в локальной папке, используется ключ "--delete-removed". Итак, бэкапы есть. Что надо сделать, чтобы данные восстановить из резервной копии? Достаточно одной команды:

s3cmdsyncs3://xakep/backupfromserv1/local/backup/

Чтобы просо посмотреть, что хранится в bucket'е, достаточно ключа ls:

s3cmd ls s3://xakep

Тут я учитываю, что bucket с именем xakep у нас уже есть. Но если его необходимо создать, то это опять же очень легко реализуется через s3tools:

s3cmd --acl-private --bucket-location=EU mb s3://xakep

Добавляем команду на бэкап в cron и наслаждаемся самым надежным бэкапом, который только можно представить. Кто сказал, что использовать облачные технологии сложно и под силу только разработчикам? Пфф, чепуха.

INFO

Построенный на базе Amazon S3 известный сервис для хранения и синхронизации данных Dropbox также успешно можно использовать для бэкапа. Изначальные 2 Гб для хранения данных - это немного, но объем можно прокачать до 5 Гб, если через тебя в сервисе зарегистрируются несколько человек.

WWW

Бесплатный онлайн сервис для работы с Amazon S3:

www.s3fm.com

Содержание
загрузка...
Журнал Хакер #151Журнал Хакер #150Журнал Хакер #149Журнал Хакер #148Журнал Хакер #147Журнал Хакер #146Журнал Хакер #145Журнал Хакер #144Журнал Хакер #143Журнал Хакер #142Журнал Хакер #141Журнал Хакер #140Журнал Хакер #139Журнал Хакер #138Журнал Хакер #137Журнал Хакер #136Журнал Хакер #135Журнал Хакер #134Журнал Хакер #133Журнал Хакер #132Журнал Хакер #131Журнал Хакер #130Журнал Хакер #129Журнал Хакер #128Журнал Хакер #127Журнал Хакер #126Журнал Хакер #125Журнал Хакер #124Журнал Хакер #123Журнал Хакер #122Журнал Хакер #121Журнал Хакер #120Журнал Хакер #119Журнал Хакер #118Журнал Хакер #117Журнал Хакер #116Журнал Хакер #115Журнал Хакер #114Журнал Хакер #113Журнал Хакер #112Журнал Хакер #111Журнал Хакер #110Журнал Хакер #109Журнал Хакер #108Журнал Хакер #107Журнал Хакер #106Журнал Хакер #105Журнал Хакер #104Журнал Хакер #103Журнал Хакер #102Журнал Хакер #101Журнал Хакер #100Журнал Хакер #099Журнал Хакер #098Журнал Хакер #097Журнал Хакер #096Журнал Хакер #095Журнал Хакер #094Журнал Хакер #093Журнал Хакер #092Журнал Хакер #091Журнал Хакер #090Журнал Хакер #089Журнал Хакер #088Журнал Хакер #087Журнал Хакер #086Журнал Хакер #085Журнал Хакер #084Журнал Хакер #083Журнал Хакер #082Журнал Хакер #081Журнал Хакер #080Журнал Хакер #079Журнал Хакер #078Журнал Хакер #077Журнал Хакер #076Журнал Хакер #075Журнал Хакер #074Журнал Хакер #073Журнал Хакер #072Журнал Хакер #071Журнал Хакер #070Журнал Хакер #069Журнал Хакер #068Журнал Хакер #067Журнал Хакер #066Журнал Хакер #065Журнал Хакер #064Журнал Хакер #063Журнал Хакер #062Журнал Хакер #061Журнал Хакер #060Журнал Хакер #059Журнал Хакер #058Журнал Хакер #057Журнал Хакер #056Журнал Хакер #055Журнал Хакер #054Журнал Хакер #053Журнал Хакер #052Журнал Хакер #051Журнал Хакер #050Журнал Хакер #049Журнал Хакер #048Журнал Хакер #047Журнал Хакер #046Журнал Хакер #045Журнал Хакер #044Журнал Хакер #043Журнал Хакер #042Журнал Хакер #041Журнал Хакер #040Журнал Хакер #039Журнал Хакер #038Журнал Хакер #037Журнал Хакер #036Журнал Хакер #035Журнал Хакер #034Журнал Хакер #033Журнал Хакер #032Журнал Хакер #031Журнал Хакер #030Журнал Хакер #029Журнал Хакер #028Журнал Хакер #027Журнал Хакер #026Журнал Хакер #025Журнал Хакер #024Журнал Хакер #023Журнал Хакер #022Журнал Хакер #021Журнал Хакер #020Журнал Хакер #019Журнал Хакер #018Журнал Хакер #017Журнал Хакер #016Журнал Хакер #015Журнал Хакер #014Журнал Хакер #013Журнал Хакер #012Журнал Хакер #011Журнал Хакер #010Журнал Хакер #009Журнал Хакер #008Журнал Хакер #007Журнал Хакер #006Журнал Хакер #005Журнал Хакер #004Журнал Хакер #003Журнал Хакер #002Журнал Хакер #001