Вопросы и ответы по Amazon MemoryDB

Общие вопросы

Amazon MemoryDB – это совместимый с OSS Redis и Valkey надежный сервис базы данных в памяти, который обеспечивает сверхбыструю производительность. MemoryDB позволяет обеспечить задержку чтения в несколько микросекунд, задержку записи менее десяти миллисекунд и высокую пропускную способность и надежность благодаря нескольким зонам доступности в соответствии с потребностями современных приложений, например созданных по архитектуре микросервисов. Таким приложениям важны низкие задержки, высокая масштабируемость, поддержка гибких структур данных и API OSS Redis и Valkey для гибкости и простоты разработки. MemoryDB хранит полный набор данных в памяти и использует распределенный журнал транзакций для обеспечения скорости работы, надежности, согласованности и восстанавливаемости данных. MemoryDB можно использовать в качестве полностью управляемой первичной базы данных, чтобы создавать на ее основе высокопроизводительные приложения и избавиться от необходимости раздельно управлять кэшем, надежной базой данных и базовой инфраструктурой. С помощью многорегиональной базы данных MemoryDB можно легко и быстро создавать приложения в нескольких регионах с доступностью до 99,999 % и задержкой чтения и записи в несколько микросекунд и миллисекунд соответственно.

Вы можете начать с создания нового кластера MemoryDB с помощью Консоли управления AWS, интерфейса командной строки (CLI) или Пакета средств разработки ПО (SDK). Чтобы создать кластер MemoryDB в консоли, войдите в систему и перейдите в Amazon MemoryDB. Выберите «Начать», а затем – «Создать новый кластер». Более подробные инструкции, в том числе по началу работы с интерфейсом командной строки, см. в документации по MemoryDB.

Да, MemoryDB поддерживает совместимость с OSS Redis и Valkey и тот же набор типов данных, параметров и команд, с которым вы знакомы. Это означает, что вы можете спокойно использовать в MemoryDB код приложения, клиенты и инструменты, которые у вас есть для OSS Redis и Valkey. MemoryDB поддерживает все типы данных OSS Redis и Valkey, в том числе строки, списки, наборы, хэши, отсортированные наборы, структуры HyperLogLog, растровые изображения и потоки. Кроме того, MemoryDB поддерживает более 200 команд OSS Redis и Valkey. Команды администратора OSS Redis и Valkey не поддерживаются, поскольку MemoryDB управляет кластером самостоятельно.

Информацию о версиях Redis OSS, поддерживаемых в MemoryDB, см. в документации по MemoryDB.

Кластер MemoryDB – это набор из одного или нескольких узлов, обслуживающих один набор данных. Набор данных MemoryDB разделен на сегменты, каждый из которых имеет первичный узел и до 5 дополнительных узлов-реплик. Первичный узел обслуживает запросы на чтение и запись, а реплика – только запросы на чтение. Каждая реплика может взять на себя роль первичного узла для своего сегмента. Дополнительные сведения см. в документации по MemoryDB.

MemoryDB – это надежная база данных в памяти для рабочих нагрузок, которым важна сверхбыстрая первичная база данных, совместимая с Valkey или OSS Redis. Вам следует обратить внимание на MemoryDB, если для вашей рабочей нагрузки требуется надежная база данных, обеспечивающая сверхвысокую производительность (с задержкой чтения в несколько микросекунд и задержкой записи менее десяти миллисекунд). MemoryDB также может подойти для тех сценариев использования, в которых приложение создается с использованием структур данных Valkey или OSS Redis и API на основе надежной первичной базы данных. И наконец, MemoryDB может вам помочь в упрощении архитектуры приложения и снижении затрат, позволяя обойтись без базы данных с отдельным кэшем для обеспечения надежности и производительности.

Сервис ElastiCache обычно используется в качестве кэша на основе Valkey, Memcached или OSS Redis для данных, хранящихся в других базах данных или хранилищах. ElastiCache следует использовать для кэширования рабочих нагрузок, если вы хотите ускорить доступ к данным в существующей первичной базе данных или в хранилище данных (скорость чтения и записи в несколько микросекунд). Также есть смысл применять ElastiCache в тех случаях, когда вы хотите использовать структуры данных Valkey или OSS Redis и API для доступа к данным, хранящимся в первичной базе данных или в хранилище данных.

Текущие ограничения и квоты см. в документации по MemoryDB.

Многорегиональная база данных MemoryDB

Многорегиональная база данных Amazon MemoryDB — это полностью управляемая многорегиональная база данных с «активно-активной» репликацией, позволяющая клиентам создавать приложения с доступностью до 99,999 % и задержками чтения и записи в несколько микросекунд и миллисекунд соответственно. Она обеспечивает резервирование данных в нескольких регионах AWS, что позволяет повысить доступность и отказоустойчивость многорегиональных приложений, даже если обработка приложения прерывается в одном регионе и не может подключиться к адресу MemoryDB. MemoryDB Multi-Region поддерживает репликацию типа «активная – активная», позволяя обслуживать операции чтения и записи локально из ближайших к клиентам регионов с задержками чтения и записи в несколько микросекунд и миллисекунд соответственно. Она асинхронно реплицирует данные между регионами, и обычно данные распространяются в течение секунды. Многорегиональная база данных MemoryDB автоматически устраняет конфликты обновлений и проблемы расхождения данных, позволяя вам сосредоточиться на разработке приложения.

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

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

Чтобы начать работу с многорегиональной базой данных MemoryDB, создайте новый многорегиональный кластер и региональный кластер в одном из нужных регионов AWS с помощью Консоли AWS, AWS SDK или интерфейса командной строки. После создания первого регионального кластера вы сможете добавить в многорегиональный кластер еще до четырех дополнительных регионов. При записи данных в любой региональный кластер многорегиональная база данных MemoryDB автоматически реплицирует эти данные во все другие региональные кластеры в многорегиональном кластере, как правило, в течение одной секунды. Если вы уже используете многорегиональную базу данных MemoryDB, вы можете сделать снимок состояния своего кластера и использовать его для создания многорегионального кластера и регионального кластера.  

Новые региональные кластеры можно добавлять в многорегиональный кластер MemoryDB, создавая региональные кластеры в соответствующих регионах AWS. Тем не менее существующий кластер MemoryDB нельзя добавить в существующий многорегиональный кластер MemoryDB. Можно только создать новый региональный кластер или удалить существующий региональный кластер из многорегионального кластера MemoryDB. При удалении регионального кластера многорегиональная база данных MemoryDB удалит кластер в этом конкретном регионе, сохранив при этом многорегиональный кластер MemoryDB. Вы сможете добавить больше региональных кластеров в один и тот же многорегиональный кластер MemoryDB позднее.

Многорегиональная база данных MemoryDB обеспечивает потенциальную непротиворечивость, поскольку выполняет асинхронную репликацию, сохраняя скорость обработки в памяти. Любые изменения, внесенные в раздел в одном из региональных кластеров многорегиональной базы данных MemoryDB, асинхронно распространяются на другие региональные кластеры в многорегиональном кластере MemoryDB, обычно менее чем за секунду.

Многорегиональная база данных MemoryDB использует бесконфликтное согласование реплицированных типов данных (CRDT) для сверки конфликтующих параллельных операций записи. CRDT — это структура данных, которую можно обновлять независимо и параллельно без координации. Конфликт операций записи разрешается независимо в каждой реплике с потенциальной непротиворечивостью.

Если происходит изоляция или снижение производительности региона, многорегиональная база данных MemoryDB отслеживает все выполненные им операции записи, которые еще не были переданы на все региональные кластеры. Когда регион возобновляет работу, она переносит все необработанные операции записи из этого региона в региональные кластеры в других регионах. Она также возобновляет распространение операций записи из других региональных кластеров в этот регион, который теперь снова доступен. В конечном итоге многорегиональная база данных MemoryDB распространяет все предыдущие успешные операции записи, независимо от того, как долго был изолирован регион. Если приложения обновляют один и тот же раздел в разных регионах примерно в одно и то же время, могут возникнуть конфликты. Многорегиональная база данных MemoryDB использует бесконфликтное согласование реплицированных типов данных (CRDT) между параллельными обновлениями. Разрешение конфликтов — это полностью управляемая функция. Оно выполняется в фоновом режиме без какого-либо влияния на доступность приложения.

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

Пропускная способность и задержка в MemoryDB зависят от типа узла, размера полезных данных и количества клиентских подключений. MemoryDB обеспечивает задержку чтения в несколько микросекунд, задержку записи менее десяти миллисекунд и задержку чтения после записи на первичном узле для сегментов кластера. MemoryDB может выдерживать до 390 000 запросов на чтение и 100 000 запросов на запись в секунду, и поддерживает пропускную способность чтения 1,3 ГБ/с и записи 100 МБ/с на каждый узел (по результатам внутреннего тестирования на рабочих нагрузках, выполняющих только чтение или чтение и запись). Кластер MemoryDB разделяет данные на сегменты, размещенные на одном или нескольких узлах, что позволяет добавлять в кластер сегменты или реплики для повышения совокупной пропускной способности.

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

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

Valkey и Redis OSS предоставляют необязательную функцию AOF (файл только для добавления), которая сохраняет данные в файле на диске первичного узла для обеспечения надежности. Но AOF хранит данные локально на первичных узлах в пределах одной зоны доступности, а значит не устраняет риск потери данных. Кроме того, в случае сбоя узла существует риск возникновения проблем с согласованностью реплик.

Да, MemoryDB поддерживает высокую доступность. Вы можете создать кластер MemoryDB с доступностью в нескольких зонах доступности. Поддерживается до 5 реплик в разных зонах доступности. В случае сбоя на первичном узле MemoryDB автоматически применит механизм отказоустойчивости и назначит одну из реплик новым первичным узлом, то есть направит на нее трафик операций записи. Кроме того, MemoryDB благодаря использованию распределенного журнала транзакций обеспечивает актуальность данных на репликах даже в случае сбоя первичного узла. Переключение при отказе обычно происходит менее чем за 20 секунд для незапланированных отключений и менее чем за 200 миллисекунд при плановых отключениях.

MemoryDB использует распределенный журнал транзакций для надежного хранения данных, записываемых в базу данных в периоды восстановления, перезапуска, процессов отказоустойчивости и обеспечения непротиворечивости между первичными узлами и репликами.

Valkey и Redis OSS поддерживают запись и строго последовательное чтение на первичном узле каждого сегмента и чтение потенциально непротиворечивых данных на репликах чтения. Эти свойства непротиворечивости не гарантируются в случае сбоя первичного узла, поскольку операции записи в процессе восстановления работы могут быть потеряны, что нарушит описанную модель непротиворечивости.

Модель непротиворечивости в MemoryDB аналогична модели в Redis OSS. Однако в MemoryDB данные при сбое не теряются, что позволяет клиентам выполнять чтение записанных данных с первичных серверов даже при сбое узлов. Чтение возвращает только те данные, которые уже успешно сохранены в журнале транзакций в нескольких зонах доступности. Узлы реплик обеспечивают чтение потенциально непротиворечивых данных, а метрики запаздывания публикуются в Amazon CloudWatch.

В MemoryDB версии 7.0 для OSS Redis мы внедрили улучшенное мультиплексирование ввода-вывода, которое обеспечивает дополнительные улучшения пропускной способности и задержки в масштабе. MemoryDB версии 7.2 для Valkey также поддерживает улучшенное мультиплексирование ввода-вывода. Улучшенное мультиплексирование ввода-вывода идеально подходит для рабочих нагрузок с высокой пропускной способностью и несколькими клиентскими соединениями, а его преимущества повышаются при росте параллелизма рабочих нагрузок. Например, при использовании узла r6g.4xlarge и одновременной работе 5200 клиентов можно добиться увеличения пропускной способности (операций чтения и записи в секунду) до 46 % и снижения задержки P99 до 21 % по сравнению с MemoryDB версии 6 для OSS Redis. Для таких типов рабочих нагрузок сетевая обработка ввода-вывода узла может стать ограничивающим фактором в возможности масштабирования. Благодаря усовершенствованному мультиплексированию ввода-вывода каждый выделенный сетевой поток ввода-вывода передает команды от нескольких клиентов в ядро MemoryDB, используя готовность ядра эффективно обрабатывать команды в пакетном режиме.

Дополнительную информацию см. в документации.

Получение данных и запросы по ним

Для записи данных в кластер MemoryDB или чтения из него нужно подключиться к кластеру с помощью любого из поддерживаемых клиентов Valkey или OSS Redis. Список поддерживаемых клиентов Valkey или OSS Redis см. в документации по Valkey или OSS Redis. Инструкции по подключению к кластеру MemoryDB с помощью клиента Valkey или OSS Redis см. в документации по MemoryDB. Valkey будет работать с существующими клиентами OSS Redis, поэтому вам не нужно менять клиентов при переходе с OSS Redis на Valkey.

Аппаратное обеспечение, масштабирование и обслуживание

В созданном кластере MemoryDB может размещаться до 500 узлов. Таким образом, максимальный объем памяти составит около 100 ТБ, если вы создадите 250 первичных узлов с одной репликой для обеспечения высокой доступности для каждого из них (итого 500 узлов).

Да, размер кластера MemoryDB можно изменять горизонтально и вертикально. Кластер можно масштабировать горизонтально, добавляя или удаляя узлы. У вас есть выбор: добавить новые сегменты, чтобы распределить набор данных по большему количеству сегментов, или добавить в каждый сегмент дополнительные узлы-реплики, чтобы повысить доступность и пропускную способность чтения. Вы также можете удалить сегменты или реплики для уменьшения размера кластера. Также можно масштабировать кластер вертикально, изменяя тип узла, то есть объем доступных ресурсов памяти и процессора для каждого узла. Во время операций горизонтального и вертикального масштабирования кластер продолжает работать и обслуживать запросы на чтение и запись.

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

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

Да, вы можете создавать снимки состояния для резервного копирования данных и метаданных из кластера MemoryDB. Можно создать снимки вручную или настроить автоматический планировщик для снимков состояния MemoryDB, который будет делать новый снимок каждый день в указанное вами время. Вы можете сохранять снимки MemoryDB в течение 35 дней после создания. Эти снимки состояния сохраняются в сервисе Amazon S3, который обеспечивает надежность на уровне 99,999999999 % (11 девяток). Кроме того, при удалении кластера для него можно сделать снимок финального состояния. Также вы можете экспортировать снимки из сервиса MemoryDB в корзину Amazon S3. Дополнительные сведения о снимках состояния см. в документации по MemoryDB.

Да, вы можете восстановить кластер MemoryDB из снимка состояния, выбрав его при создании нового кластера.

Да, вы можете восстановить кластер MemoryDB из файла RDB, созданного в OSS Redis или Valkey. При создании нового кластера MemoryDB укажите нужный файл RDB для восстановления.

Да, вы можете перенести данные из ElastiCache в MemoryDB. Сначала создайте снимок состояния кластера ElastiCache и экспортируйте его в корзину S3. Затем создайте новый кластер MemoryDB и выберите созданную резервную копию для восстановления. MemoryDB создаст новый кластер, восстановив данные и метаданные из снимка состояния OSS Redis или Valkey. Дополнительные сведения о миграции данных из ElastiCache в MemoryDB см. в документации по MemoryDB.

Метрики

Да, MemoryDB поддерживает операционные метрики и показатели производительности для кластера. MemoryDB передает более 30 метрик CloudWatch, и вы можете просмотреть их значения в консоли MemoryDB. Дополнительные сведения о метриках CloudWatch и MemoryDB см. в документации по MemoryDB.

Безопасность и соответствие требованиям

Да, MemoryDB поддерживает шифрование данных как при хранении, так и во время передачи. Для шифрования в состоянии покоя можно использовать управляемый клиентом ключ (CMK), сохраненный в Сервисе управления ключами AWS, или предоставленный MemoryDB ключ. При использовании инстансов Graviton2 для кластера MemoryDB данные шифруются в памяти с использованием постоянно включенного 256-битного шифрования DRAM.

MemoryDB использует списки контроля доступа для управления аутентификацией и авторизацией в кластере. ACL позволяют определять разные разрешения для разных пользователей в одном кластере. ACL содержит набор из одного или нескольких пользователей. У каждого пользователя есть пароль и строка для доступа, которые применяются для авторизации доступа к командам и данным. Дополнительные сведения о списках контроля доступа в MemoryDB см. в документации по MemoryDB.

Да, все кластеры MemoryDB должны работать только в VPC.

Мы будем постоянно увеличивать поддерживаемый набор сертификатов соответствия. Здесь вы найдете самую свежую информацию о готовности к соответствию требованиям.

Да. Чтобы получать полную историю вызовов API Amazon MemoryDB, выполненных в вашем аккаунте, включите сервис CloudTrail в Консоли управления AWS. Дополнительную информацию см. на домашней странице CloudTrail.

Оптимизация затрат

Многоуровневое хранение данных для Amazon MemoryDB предоставляет новую возможность оптимизировать соотношение цены и производительности для MemoryDB. Эта функция автоматически перемещает менее часто используемые данные из памяти на локально подключенные высокопроизводительные твердотельные накопители (SSD). Многоуровневое хранение данных повышает емкость, упрощает управление кластером и снижает совокупную стоимость владения MemoryDB.

Многоуровневое хранение данных следует использовать, если вам нужен более простой и экономичный способ увеличить объем данных в кластерах MemoryDB без ущерба для доступности приложений. Многоуровневое хранение данных идеально подходит для рабочих нагрузок, в которых регулярный доступ охватывает не более 20 % данных, и для приложений, которым не навредит дополнительная задержка при первом обращении к редко запрашиваемому элементу. Использование многоуровневого хранения данных в сочетании с узлами R6gd обеспечивает общую емкость (память и SSD) почти в 5 раз выше, что позволяет сэкономить более 60 % затрат при работе с максимальной загрузкой по сравнению с узлами R6g (только память). При обработке запросов для строковых значений длиной по 500 байтов дополнительная задержка на чтение данных с твердотельного накопителя обычно составляет 450 мкс по сравнению с чтением из памяти.

Многоуровневое хранение данных организовано за счет использования SSD-накопителей, когда исчерпывается доступный для узла кластера объем памяти. Если используются узлы кластера с SSD-хранилищем, многоуровневое хранение данных включается автоматически, и MemoryDB берет на себя управление размещением данных, прозрачно перемещая элементы между памятью и диском на основе политики вытеснения по давности использования (LRU). Когда память будет полностью исчерпана, MemoryDB автоматически вычислит, какие элементы не использовались дольше всего и переместит эти значения на диск, оптимизируя затраты. Когда приложению потребуется элемент, сохраненный на диске, MemoryDB прозрачно переместит его значение в память перед обработкой запроса с минимальным ущербом для производительности.

Для начала работы создайте новый кластер MemoryDB, используя оптимизированные для работы в памяти инстансы с процессорами AWS Graviton2 на базе ARM и твердотельными накопителями NVMe (R6gd). Затем перенесите в него данные из существующего кластера, выполнив импорт снимка состояния.

Узлы R6gd с многоуровневым хранением данных оплачиваются на основе количества часов использования инстанса. Вы также платите за объем записи данных при использовании R6gd, как и для других типов узлов MemoryDB. Дополнительные сведения см. на странице цен на MemoryDB.

Для начала работы создайте новый кластер MemoryDB, используя оптимизированные для работы в памяти инстансы с процессорами AWS Graviton2 на базе ARM и твердотельными накопителями NVMe (R6gd). Затем перенесите в него данные из существующего кластера, выполнив импорт снимка состояния.

Зарезервированные узлы MemoryDB обеспечивают гибкость размера в пределах семейства узлов и региона AWS. Так, скидка на зарезервированные узлы будет автоматически применена к использованию узлов всех размеров из одного семейства. Например, если вы приобрели зарезервированный узел r6g.xlarge и вам потребуется масштабирование до более крупного узла r6g.2xlarge, скидка за резервирование будет автоматически применена к 50 % стоимости использования узла r6g.2xlarge в том же регионе AWS. Гибкость размера сократит время, затрачиваемое на управление зарезервированными узлами, а отсутствие привязки к определенному размеру узла базы данных обеспечивает максимальную выгоду от скидки, даже если потребуется изменение мощности.

Цены на зарезервированные узлы MemoryDB зависят от типа узла, срока резервирования (один или три года), способа оплаты (без предоплаты, частичная предоплата или полная предоплата) и региона AWS. Обратите внимание, что цены на зарезервированные узлы не включают расходы на запись данных или хранение снимков состояния. Дополнительные сведения см. на странице цен на MemoryDB.

MemoryDB предлагает резервирования для оптимизированных для работы памяти узлов R6g, R7g и R6gd (с многоуровневым хранением данных).