AWS S3 - Лучшие практики

Производительность

Одновременная обработка нескольких PUT/GET

S3 масштабируется для поддержки высокой интенсивности запросов. Если частота запросов постоянно растет, S3 автоматически разбивает корзины на части по мере необходимости для поддержки возрастающей интенсивности запросов.

S3 может обрабатывать не менее 3500 запросов PUT / COPY / POST / DELETE и 5500 запросов GET / HEAD в секунду на каждый префикс в корзине.
GET-интенсивные рабочие нагрузки

Для оптимизации производительности S3 используют Cloudfront, он позволяет:

- снижать латентность передачи данных и повышать скорость передачи данных;
- кешировать контент и тем самым уменьшать количество запросов непосредственно к S3;
- предоставлять несколько конечных точек доступа (периферийных местоположений) для доступности данных;
- поддерживать 2 варианта дистрибьюции данных: Web и RTMP.

Чтобы ускорить передачу данных на большие расстояния между клиентом и корзиной S3, используйте Amazon S3 Transfer Acceleration. Transfer Acceleration использует глобально распределенные периферийные местоположения в CloudFront для ускорения передачи данных на географические расстояния.
PUT/GET-запросы для больших объектов
AWS позволяет распараллеливать запрос PUT/GET для повышения производительности загрузки и скачивания данных, а также для возможности восстановления данных в случае сбоя.

Для PUT-запроса, загрузка объекта по частям (Multipart upload) может помочь ускорить загрузку данных за счет того, что:

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

Для GET-запроса Range http header помогает ускорить скачивание:
- позволяя получить объект по частям вместо всего объекта сразу;
- быстро восстанавливая скачивание после сбоев, поскольку необходимо повторить попытку только той части, которую не удалось скачать.

Операции над списком объектов
В индексах Amazon S3 имена ключей объектов хранятся лексикографически, что затрудняет сортировку и управление содержимым списка.

S3 поддерживает только один индекс списка объектов, и он отсортирован в лексикографическом порядке.

Если необходим другой индекс списка объектов S3, можно построить и поддерживать его за пределами S3, например, в DynamoDB или в RDS. Это позволит индексировать метаданные объектов и осуществлять поиск по ним, не выполняя лишних запросов непосредственно к S3.

Безопасность

Использование версионности объектов:

- может использоваться для защиты от непреднамеренных перезаписей и удалений объектов;
- позволяет получать и восстанавливать удаленные объекты или выполнять откат к предыдущим версиям;
Усильте безопасность, настроив корзину для использования MFA (мультифакторной авторизации) при удалении корзины.
Включение версионности для корзины не препятствует ее удалению, поэтому необходимо осуществлять регулярное резервное копирование на случай случайного или злонамеренного удаления данных.
Используйте Cross Region replication (межрегиональную репликацию) для резервного копирования данных в другой регион.

При использовании S3 внутри VPC, используйте для доступа к S3 из VPS только конечные точки S3, так как они горизонтально масштабируемы, избыточны, высокодоступны и помогают установить приватное соединение между VPC и S3 - трафик никогда не покидает сеть.

Стоимость

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

Отслеживание

Используйте Event Notifications (уведомления о событиях), чтобы получать уведомления о любых запросах на установку или удаление объектов S3.

Используйте CloudTrail, который позволяет записывать вызовы определенных API, обращающихся к S3 из учетной записи AWS, и сохраняет лог-файлы в корзину S3.

Используйте CloudWatch для мониторинга корзин Amazon S3, отслеживания метрик, таких как количество хранимых объектов и их размер.

Задачи:

1) Медиа-компания ежедневно создает новые видеофайлы с общим размером около 100 ГБ после сжатия. Каждый файл имееет размер 1-2ГБ. Все файлы должны загружаться в Amazon S3 каждую ночь в фиксированное временное окно между 3 и 5 часами утра. Сейчас их загрузка занимает почти 3 часа, хотя используется менее половины доступной полосы пропускания сети. Как обеспечить возможность загрузки файлов в отведенное время?

Ответ: загрузить файлы на S3 параллельно, используя Multipart upload.

2) Вы разрабатываете веб-приложение, которое хранит статические ресурсы в корзине S3. Вы ожидаете, что корзине будет поступать более 150 PUT-запросов в секунду. Что вы должны сделать, чтобы обеспечить оптимальную производительность?

Ответ: необходимо добавить случайный префикс к именам ключей.

3) У вас есть приложение, работающее на экземпляре Amazon Elastic Compute Cloud (AWS EC2), которое загружает 5 ГБ видеообъектов в Amazon Simple Storage Service (S3). Загрузка видео занимает больше времени, чем ожидалось, что приводит к снижению производительности приложения. Какой метод поможет улучшить производительность вашего приложения?

Ответ: использовать Multipart upload.

4) Как обеспечить защиту от случайной потери данных, хранящихся в Amazon S3?

Ответ: Установить политики корзины, чтобы ограничить удаление, включить управление версиями, создать резервную копию своего хранилища S3 в хранилище, принадлежащем другой учетной записи AWS, для обеспечения избыточности.

5) Стартап-компания наняла вас, чтобы помочь им создать мобильное приложение, которое в конечном итоге будет хранить миллиарды изображений и видео в Amazon S3. Компания хочет минимизировать эксплуатационные расходы и они ожидают удвоения числа установок своего приложения каждые шесть месяцев. Из-за специфики их бизнеса они ожидают внезапного и значительного увеличения трафика к и от S3, и вы должны гарантировать, что сервис S3 может удовлетворить требования производительности их приложения. Какую другую информацию вы должны получить от этого клиента, чтобы определить, является ли S3 правильным вариантом?

Ответ: Узнать общее количество запросов в секунду при пиковом использовании.

6) Компания, занимающаяся хранением документов, развертывает свое приложение в AWS и меняет свою бизнес-модель для поддержки пользователей как бесплатного, так и премиум-уровня. Пользователям премиум-уровня будет разрешено хранить до 200 ГБ данных, а клиентам бесплатного уровня - только 5 ГБ. Заказчик ожидает, что миллиарды файлов будут сохранены. Все пользователи должны получать оповещения, в первый раз когда приближается к 75-процентному использованию квоты и еще раз, когда приближаются к 90-процентному использованию квоты. Каким реализовать эти оповещнения?

Ответ: необходимо создать Activity Worker в сервисе Amazon Simple Workflow. Activity worker будет обновлять счетчик данных пользователей в базе данных Amazon Dynamo и  использовать Simple Email Service для отправки электронного письма, если значение счетчика превысит соответствующие пороговые значения.

7) У вашей компании есть веб-сайт с социальной сетью для хранения и обмена документами. Веб-приложение позволяет пользователям загружать большие файлы, возобновляя и приостанавливая загрузку по мере необходимости. В настоящее время файлы загружаются на ваш php-интерфейс при поддержке Elastic Load Balancing и автомасштабируемого парка экземпляров (EC2), который масштабируются в зависимости от среднего количества полученных байтов (NetworkIn). После загрузки файла он копируется в сервис Amazon Amazing Simple Storage (S3). Экземпляры Amazon EС2 используют роль AWS Identity and Access Management (AMI), которая позволяет загружать данные на Amazon S3. За последние шесть месяцев ваша пользовательская база и масштаб значительно увеличились, что заставило вас увеличить параметр Max для групп автоматического масштабирования в несколько раз. Ваш финансовый директор обеспокоен ростом затрат и попросил вас изменить архитектуру там, где это необходимо, для лучшей оптимизации затрат. Какое изменение архитектуры вы могли бы ввести, чтобы снизить стоимость, и при этом сохранить веб-приложение безопасным и масштабируемым?

Ответ: Перепроектируйте свой механизм загрузки, сделайте так, чтобы приложение проходило аутентификацию у вашего провайдера идентификации как у посредника, и получало временные учетные данные AWS из службы токенов AWS Secure (GetFederation Token). Безопасно передайте учетные данные и конечную точку/префикс S3 в ваше приложение. 
Внедрите в приложение кастомную логику, использующую Multipart upload API для прямой загрузки файла в Amazon S3 с использованием указанных учетных данных и префикса.

8) Если приложение хранит почасовые журнальные файлы из тысяч экземпляров с веб-сайта с высоким трафиком, какая схема именования даст оптимальную производительность на S3?

Ответ: HH-DD-MM-YYYY-log_instanceID (HH даст больший разброс префиксов, чем если начинать наименование с идентификатора инстанса или с года).


Данный пост - это мой адаптированный перевод, который я сделала для подготовки своей команды к серфикации по AWS. Оригинал на английском: https://jayendrapatil.com/aws-s3-best-practices/

Комментарии

Популярные сообщения из этого блога

Настройка почты через biz.mail.ru в БитриксВМ

Git обновить текущую ветку из master