Борьба приложений: от Redis до Aerospike мы наступили на эти ямы

Redis задняя часть сервер Эксплуатация и техническое обслуживание

Автор: инженер-разработчик Ge Push, Чжао Чжицян.


Getui уже много лет занимается предоставлением услуг push-уведомлений для разработчиков. Через Getui SDK мобильный терминал устанавливает длительное соединение с сервером и поддерживает онлайн-состояние. Однако в случае сбоя в сети сообщение не может быть доставлено конечному пользователю в режиме реального времени, поэтому сервер push-уведомлений создает автономный список сообщений для доставки сообщения, когда пользователь снова входит в систему. Эта часть данных хранится в кластере Redis.Весь кластер включает более 100 экземпляров master и slave.Количество ключей находится на уровне 1 миллиарда, а пространство для хранения на уровне T, что приводит определенные затраты на техническое обслуживание и проблемы эксплуатации и обслуживания. Как инженер-разработчик Getui, мы также искали экономичные решения.

Целый кластер QPS нажимает на миллион уровень, если вы решите использоватьAerospikeПо сравнению с фактическим измерением мы обнаружили, что одна физическая машина, оснащенная одним интерфейсом SSD 4600, может достигать QPS, близкого к 10 Вт, то есть десятки машин могут удовлетворить существующие потребности, а также могут поддержать потребности в бизнесе для длительный период времени в будущем.

Преимущества Аэроспайк

Aerospike – это высокопроизводительное, масштабируемое и надежное решение NoSQL, которое поддерживает ОЗУ и твердотельные накопители в качестве носителей данных и специально оптимизировано для твердотельных накопителей. Оно широко используется в областях вычислений в реальном времени, таких как торги в реальном времени. Официальный гарантирует, что 99% операций выполняются в течение 1 мс, и предоставляет такие функции, как автоматическая перебалансировка данных кластера, клиенты с поддержкой кластера и поддерживает хранение сверхбольших наборов данных (уровень 100T).

В качестве хранилища KV Aerospike предоставляет различные типы данных, и его работа аналогична работе Redis. В дополнение к основным функциям Aerospike также поддерживает консоль AMC, API и другие методы мониторинга, а также имеет несколько индикаторов мониторинга, таких как QPS кластера, работоспособность и нагрузка, что удобно в эксплуатации и обслуживании. Он поддерживает автоматическую перебалансировку данных в кластере, по сравнению с кластерным решением Redis значительно снижает стоимость обслуживания.

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

Модель данных Описание

Aerospike использует хранилище без схемы, а модель данных похожа на RDBMS, поэтому ее относительно легко понять и использовать:

Каждое пространство имен содержит несколько наборов, каждый набор содержит несколько записей, а каждая запись содержит несколько ячеек (столбцов базы данных).Записи можно запрашивать с помощью ключей индексации. Различные предприятия могут использовать разные пространства имен одного и того же кластера для изоляции ресурсов, чтобы добиться объединения ресурсов и максимального использования ресурсов.

Онлайн-процесс в оттенках серого

Getui использует крупномасштабный кластер Redis для автономного хранения списков сообщений. Мы исследовали ssdb, pika и другие дисковые хранилища, поддерживающие протокол Redis, общий расчет показывает, что Aerospike является наиболее рентабельным.

На начальном этапе мы смоделировали фактическое соотношение чтения/записи в сочетании с онлайн-сценариями (анализируя онлайн-бизнес, мы обнаружили, что соотношение между записью и чтением составляет примерно от 1:1 до 1:2), чтобы провести стресс-тестирование, оценить и проверить осуществимость, а затем запустить в производство.

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

Этап наблюдения:После успешного выполнения операции Redis операции чтения и записи в Redis синхронизируются с Aerospike асинхронным образом, и Aerospike не выполняет определенные услуги. Следующий шаг — двойная запись данных в Redis и Aerospike. На этом этапе в основном наблюдают, согласуются ли данные с обеих сторон, давление Aerospike и т. д. В то же время на этапе наблюдения могут выполняться операции по эксплуатации и обслуживанию, такие как перезапуск узла и расширение кластера, можно оценивать стоимость эксплуатации и обслуживания, а также оптимизировать конфигурацию. Здесь вы можете использовать консоль страницы AMC и API мониторинга для мониторинга состояния кластера, а часть вызовов клиента для записи необходимых журналов и информации мониторинга.

Этап оттенков серого:Aerospike начал использовать автономное хранилище списков сообщений для некоторых приложений и задач. На этапе градации серого данные Redis и Aerospike дважды записываются и дважды очищаются, а состояние горячего резерва сохраняется до тех пор, пока данные Redis не будут полностью переключены на Aerospike и не будут стабильно работать в течение определенного периода времени.

Этап наблюдения очень важен, в основном это онлайн-оценка осуществимости всей программы. На этом этапе точка наблюдения делится на две части: клиентскую (AS-Client) и серверную (AS-Server). Основные наблюдения клиента:

1. Используйте метрики для мониторинга времени ответа на запрос клиента и используйте процентное распределение времени запроса (50%, 90%, 99%, 99,9%) за период времени для оценки SLA системы.

2. Отслеживайте количество успешных и неудачных операций чтения и записи и т. д.

3. Установите порог медленного журнала на 50 мс и подсчитайте условия медленного журнала в периоды пиковой нагрузки и нормальные периоды.

4. Асинхронно напишите мониторинг очереди Aerospike и разумно отрегулируйте размер очереди.


Основные наблюдения на стороне сервера:

1. Кластер исправен.

2. Использование диска и памяти, соотношение памяти и дискового пространства.

3. Такая информация, как загрузка машинного ввода-вывода, загрузка ЦП и степень фрагментации диска.

4. Можно ли сравнить пропускную способность кластера, чтение и запись TPS с онлайн-кластером Redis.

5. Проверка согласованности данных. Как проверить согласованность двух данных на стадии наблюдения и стадии серого? Пошаговое сравнение различий трудно удовлетворить требованиям производительности. Учитывая, что данные полностью согласованы, данные, обнаруженные Redis, должны быть точно такими же, как данные, обнаруженные Aerospike, поэтому результаты запроса данных Redis и Aerospike отбираются и записываются в журнал, а несоответствия в течение 1 минуты, 5 минуты, 30 минут и 1 час сравниваются и анализируются пропорции данных. Если количество онлайн-ключей находится на уровне 1 миллиарда, даже если проверяется только одна десятитысячная разница, то нестыковка весьма значительна. В этом случае необходимо выяснить причину несоответствия и устранить ее.

Аспекты технического обслуживания принимаются во внимание, что данные Cluster автоматически ребаланс принесет некоторую деградацию производительности, может оказать большее влияние на пользовательский опыт, в сочетании с нашим опытом, для моделирования операции и обслуживания некоторых типичных сценариев:

1. Смоделируйте влияние перебалансировки кластера, вызванной отказом одного узла, на производительность системы.

2. Смоделируйте влияние перебалансировки кластера, вызванной расширением кластера, на производительность системы.

3. В зависимости от влияния на онлайн-бизнес, рассчитайте скорость перебалансировки кластера в течение дня и ночи и поддержите обновление заданий cron.

4. Узел перезапускается.

5. Увеличьте крепление SSD.

6. Оптимизация связанных конфигураций и т.д.

Подводя итог, полный онлайн-процесс делится на следующие этапы:

0. Смоделируйте онлайн-испытание под давлением окружающей среды, чтобы проверить возможность его реализации.

1. Инкапсулируйте клиент Aerospike в интерфейс, подобный Redis, добавьте необходимые журналы, элементы мониторинга и проверьте достоверность Bin.

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

3. Проверка функции обеспечения качества.

4. Подайте заявку на ресурсы и разверните кластеры Aerospike онлайн.

5. Запускается служба сообщений, интегрированная с функцией Aerospike.

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

Сводка опыта

Во время использования Aerospike мы столкнулись с некоторыми проблемами и проблемами, которые можно обобщить в виде следующих моментов:

1. Aerospike открывает одноярусный режим для экономии места.

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

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

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

5. Поскольку сам SSD имеет проблемы с фрагментацией и усилением записи, при фактическом использовании мы обнаружили, что если использование дискового пространства составляет около 50%, снижение производительности будет более серьезным. Таким образом, параметры, связанные с дефрагментацией, могут быть оптимизированы в сочетании с реальным бизнесом.

6. Aerospike имеет ограничения на HotKey, поэтому, когда ключ часто читается и записывается, он вернет ошибку HotKey (код ошибки 14). Сервер может увеличитьtransaction-pending-limitНастройте для увеличения параллелизма операций с одним и тем же ключом. Его значение по умолчанию равно 20, а значение 0 означает неограниченное количество. Увеличение этой конфигурации может привести к некоторому снижению производительности. Клиенту может потребоваться добавить обработку повторной попытки для этого исключения, но повторная попытка может еще больше увеличить риск HotKey.

7. Замена таких основных компонентов должна максимально использовать онлайн-трафик для опрессовки, чтобы как можно скорее выявить потенциальные проблемы.

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

9. Во время использования следует также обратить внимание на некоторые присущие Aerospike ограничения, такие как пространство имен с максимальным количеством 1023 наборов, имя бина с максимальной длиной 14 однобайтовых символов, пространство имен, поддерживающее не более 64 твердотельных накопителей, и т.д. Для получения подробной информации см.:aerospike_known_limitations.

Эпилог

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