Хранилище и базы данных

Что это такое

Хранилище в AWS бывает трёх форм, которые легко перепутать, потому что в разговоре все три называют «хранилищем». Блочное хранилище ведёт себя как диск, подключённый к одной машине. Объектное хранилище — это плоское хранилище именованных блобов, доступных по сети. Управляемые базы данных — сервис, который запускает за вас знакомый движок базы, беря на себя резервные копии, репликацию и переключение при отказе. Выбор между ними определяется тем, как данные читаются и пишутся, а не тем, сколько их.

Почему это важно

Место, где живут данные, — самое трудное, что можно поменять позже. Перенос сервиса на новую платформу вычислений — это развёртывание; перенос его базы — миграция с простоем, двойной записью и планом отката. Хранилище также определяет стоимость и долговечность сильнее любой другой части системы: объектное хранилище дёшево и практически безгранично, блочное тарифицируется по выделенному размеру независимо от того, заполните вы его или нет, а управляемая база стоит дороже запуска движка самостоятельно и покупает вам ту операционную работу, которую вы не сделали. Это решение чаще всего вызывает сожаление, поэтому заслуживает большего, чем выбор по умолчанию.

Ключевые идеи

Сопоставляйте шаблон доступа, а не объём

Блочное хранилище — это диск: чтения и записи с малой задержкой для одной машины, по цене выделенного размера. Объектное хранилище — пространство имён неизменяемых блобов, по цене того, что вы храните и передаёте, доступное откуда угодно. База данных — движок запросов с транзакциями и индексами. Спросите, что делает читатель — случайные небольшие чтения, последовательные сканы или запросы целых файлов по имени, — и ответ обычно называет одну из трёх форм.

диск, подключённый к одной машине   ->  блочное хранилище
целые файлы, запрашиваемые по имени  ->  объектное хранилище
запросы, соединения, транзакции       ->  база данных

Долговечность и доступность — разные обещания

Долговечность — вероятность того, что данные всё ещё существуют; доступность — вероятность того, что вы прочитаете их прямо сейчас. Объектное хранилище чрезвычайно долговечно и умеет разносить копии по регионам. База на одном инстансе ни долговечна, ни доступна во время отказа, если вы не настроили реплики. Чтение заявлений провайдера с этими двумя словами по отдельности снимает большую часть сюрпризов хранилища.

Управляемые базы меняют деньги на операции

Запускать движок самому значит владеть патчингом, резервными копиями, репликацией, переключением при отказе и ёмкостью. Управляемый сервис берёт это на себя, а взамен стоит дороже в час и оставляет меньше ручек. Для большинства команд обмен того стоит, потому что операционная работа — как раз то, что они умеют хуже всего. Ошибка — платить за управляемый сервис и затем эксплуатировать его так, будто он развёрнут самостоятельно.

Резервная копия реальна только после восстановления

Каждое решение о хранилище включает путь восстановления. Копия, которую никогда не восстанавливали, — это надежда, а не резервная копия: ключи шифрования, права и процедура восстановления должны сработать в тот момент, когда они понадобятся. Правила жизненного цикла объектного хранилища — самый дешёвый способ хранить копии годами, при условии, что что-то регулярно доказывает их читаемость обратно.

Стоимость накапливается в тихих местах

Запросы, извлечение, передача между регионами и досрочное удаление — всё это имеет цену. Объектное хранилище дёшево за гигабайт, но берёт за вывод данных, поэтому архив, который читают часто, не дёшев. Удаление реплики базы убирает стоимость и резерв одновременно. Наблюдение за строкой хранилища в счёте — самый быстрый способ найти ресурсы, которыми никто не пользуется.

Практика

Выберите хранилище для трёх нагрузок

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

Готово, когда: каждый выбор называет шаблон чтения или записи, из-за которого два других варианта не подошли.

Восстановите резервную копию

Создайте объектное хранилище с правилом жизненного цикла, положите в него файл, удалите оригинал и восстановите его из сохранённой копии.

Готово, когда: вы прочитали восстановленный файл обратно и можете назвать каждое право и каждый ключ, которые потребовались для восстановления.

Частые ошибки

  • База данных на блочном хранилище, названная долговечной — одна машина, одна копия, нет переключения при отказе; исправить: используйте управляемый движок или осознанно настройте репликацию.
  • Обращение с объектным хранилищем как с файловой системой — переименование или правка блоба переписывает весь объект; исправить: считайте объекты неизменяемыми и версионируйте вместо изменения.
  • Выбор управляемой базы и последующая ручная эксплуатация — вы платите за автоматизацию, которой не пользуетесь; исправить: позвольте сервису заниматься патчингом и переключением при отказе.
  • Предположение, что копия есть, раз её снял сервис — путь восстановления никогда не проверяли; исправить: восстанавливайте по расписанию и записывайте, что для этого потребовалось.
  • Игнорирование платы за извлечение и передачу — хранить дёшево, а читать нет; исправить: сопоставляйте класс хранилища с тем, как часто данные действительно читают.

Что читать дальше