Содержание статьи
Появление облачных технологий позволило любому стартапу иметь в распоряжении
продвинутую инфраструктуру для хранения файлов. Она не упадет и выдержит любую
нагрузку пользователей — это раз. Она бесконечно расширяема — это два. И стоит
дешевле, чем приобретать оборудование самому — это три. Но разобраться с
облачными вычислениями и использовать их могут не только специалисты 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: