Хранилище и базы данных
Что это такое
Хранилище в AWS бывает трёх форм, которые легко перепутать, потому что в разговоре все три называют «хранилищем». Блочное хранилище ведёт себя как диск, подключённый к одной машине. Объектное хранилище — это плоское хранилище именованных блобов, доступных по сети. Управляемые базы данных — сервис, который запускает за вас знакомый движок базы, беря на себя резервные копии, репликацию и переключение при отказе. Выбор между ними определяется тем, как данные читаются и пишутся, а не тем, сколько их.
Почему это важно
Место, где живут данные, — самое трудное, что можно поменять позже. Перенос сервиса на новую платформу вычислений — это развёртывание; перенос его базы — миграция с простоем, двойной записью и планом отката. Хранилище также определяет стоимость и долговечность сильнее любой другой части системы: объектное хранилище дёшево и практически безгранично, блочное тарифицируется по выделенному размеру независимо от того, заполните вы его или нет, а управляемая база стоит дороже запуска движка самостоятельно и покупает вам ту операционную работу, которую вы не сделали. Это решение чаще всего вызывает сожаление, поэтому заслуживает большего, чем выбор по умолчанию.
Ключевые идеи
Сопоставляйте шаблон доступа, а не объём
Блочное хранилище — это диск: чтения и записи с малой задержкой для одной машины, по цене выделенного размера. Объектное хранилище — пространство имён неизменяемых блобов, по цене того, что вы храните и передаёте, доступное откуда угодно. База данных — движок запросов с транзакциями и индексами. Спросите, что делает читатель — случайные небольшие чтения, последовательные сканы или запросы целых файлов по имени, — и ответ обычно называет одну из трёх форм.
диск, подключённый к одной машине -> блочное хранилище
целые файлы, запрашиваемые по имени -> объектное хранилище
запросы, соединения, транзакции -> база данных
Долговечность и доступность — разные обещания
Долговечность — вероятность того, что данные всё ещё существуют; доступность — вероятность того, что вы прочитаете их прямо сейчас. Объектное хранилище чрезвычайно долговечно и умеет разносить копии по регионам. База на одном инстансе ни долговечна, ни доступна во время отказа, если вы не настроили реплики. Чтение заявлений провайдера с этими двумя словами по отдельности снимает большую часть сюрпризов хранилища.
Управляемые базы меняют деньги на операции
Запускать движок самому значит владеть патчингом, резервными копиями, репликацией, переключением при отказе и ёмкостью. Управляемый сервис берёт это на себя, а взамен стоит дороже в час и оставляет меньше ручек. Для большинства команд обмен того стоит, потому что операционная работа — как раз то, что они умеют хуже всего. Ошибка — платить за управляемый сервис и затем эксплуатировать его так, будто он развёрнут самостоятельно.
Резервная копия реальна только после восстановления
Каждое решение о хранилище включает путь восстановления. Копия, которую никогда не восстанавливали, — это надежда, а не резервная копия: ключи шифрования, права и процедура восстановления должны сработать в тот момент, когда они понадобятся. Правила жизненного цикла объектного хранилища — самый дешёвый способ хранить копии годами, при условии, что что-то регулярно доказывает их читаемость обратно.
Стоимость накапливается в тихих местах
Запросы, извлечение, передача между регионами и досрочное удаление — всё это имеет цену. Объектное хранилище дёшево за гигабайт, но берёт за вывод данных, поэтому архив, который читают часто, не дёшев. Удаление реплики базы убирает стоимость и резерв одновременно. Наблюдение за строкой хранилища в счёте — самый быстрый способ найти ресурсы, которыми никто не пользуется.
Практика
Выберите хранилище для трёх нагрузок
Возьмите библиотеку фотографий, хранилище сессий веб-приложения и реестр с балансами и переводами. Для каждого выберите блочное, объектное или управляемую базу и напишите одно предложение о шаблоне доступа, который это решил.
Готово, когда: каждый выбор называет шаблон чтения или записи, из-за которого два других варианта не подошли.
Восстановите резервную копию
Создайте объектное хранилище с правилом жизненного цикла, положите в него файл, удалите оригинал и восстановите его из сохранённой копии.
Готово, когда: вы прочитали восстановленный файл обратно и можете назвать каждое право и каждый ключ, которые потребовались для восстановления.
Частые ошибки
- База данных на блочном хранилище, названная долговечной — одна машина, одна копия, нет переключения при отказе; исправить: используйте управляемый движок или осознанно настройте репликацию.
- Обращение с объектным хранилищем как с файловой системой — переименование или правка блоба переписывает весь объект; исправить: считайте объекты неизменяемыми и версионируйте вместо изменения.
- Выбор управляемой базы и последующая ручная эксплуатация — вы платите за автоматизацию, которой не пользуетесь; исправить: позвольте сервису заниматься патчингом и переключением при отказе.
- Предположение, что копия есть, раз её снял сервис — путь восстановления никогда не проверяли; исправить: восстанавливайте по расписанию и записывайте, что для этого потребовалось.
- Игнорирование платы за извлечение и передачу — хранить дёшево, а читать нет; исправить: сопоставляйте класс хранилища с тем, как часто данные действительно читают.
Что читать дальше
- Вычисления и EC2 (06-cloud-devops/02-aws/01-compute-and-ec2) — машины, которые читают и пишут это хранилище.
- AWS (06-cloud-devops/02-aws) — аккаунт и каталог, в которых живут эти сервисы.
- Сети и VPC (06-cloud-devops/02-aws/03-networking-and-vpc) — как эндпоинты хранилища достигаются из вашей сети.