Отказоустойчивая обработка 10M OAuth токенов на Tarantool / В.Перепелица, И.Латкин (Mail.ru)

YOUTUBE · 01.12.2025 08:09

Ключевые темы и таймкоды

Введение

0:01
  • Монс Андерсон и Игорь Латкин представляют проект "Тарантул" - систему для хранения и обработки данных.
  • Тарантул обладает возможностью писать код внутри базы данных, что делает его более эффективным.

Реализация проекта

1:58
  • Проект занимается хранением и рефрешем вау-стокинов, а также авторизацией через другие почтовые сервисы.
  • В 2013 году проект был реализован с использованием простых сущностей и рефрешеров.
  • Проблемы начались, когда токины перестали обновляться, что привело к 25% аунду.

Решение проблем

5:16
  • В 2015 году проект столкнулся с проблемой нехватки ресурсов из-за быстрого роста.
  • Было решено использовать новый Тарантул с мастер-мастер-репликацией.
  • Однако возникла проблема с увеличением количества запросов на провайдер из-за реплик.

Решение проблемы с помощью Рафта

9:57
  • Рафт - простой консенсус-алгоритм, который позволяет выбрать лидера и работать с ним до перевыборов.
  • В Тарантуле изначально нет Рафта, но можно использовать готовый модуль из поставки.
  • После реализации Рафта каждая нода становится лидером или фолловером.

Реализация кворума в распределенной системе

10:59
  • В видео объясняется, как реализовать кворум в распределенной системе, используя ло.
  • Код прост и понятен, но требует дополнительных объяснений.

Проблема потери связи между нодами

12:36
  • Если одна из нод теряет связь с другими, система продолжает работать, используя алгоритм рафта.
  • Рефрешеры продолжают работать, но могут быть направлены только на одну ноду.

Восстановление целостности системы после потери связи

14:00
  • Рефрешеры могут продолжать работать, даже если одна из нод потеряла связь с другими.
  • После восстановления связи между нодами, система снова становится целостной.

Работа с аксе-токенами и рефреш-токенами

15:35
  • Аксе-токены живут один час и могут быть получены из рефреш-токенов.
  • Рефреш-токены могут быть рефрешены даже если одна из нод потеряла связь с другими.

Проблема с ЦП

18:50
  • Видео обсуждает проблему с ЦП, которая возникает из-за использования шардинга.
  • Шардинг - это способ разделения данных на несколько частей, каждая из которых реплицируется.

Реализация шардинга

19:16
  • Шардинг может быть реализован на клиенте или внутри базы данных.
  • Внутри базы данных шардинг сложнее, но клиенты становятся проще.
  • Ре-шардинг становится проще, когда база данных полностью отвечает за свои данные.

Пример шардинга

22:03
  • В примере пользователь запрашивает ключ, который лежит на первом шарде.
  • База данных знает, кто является лидером и фолловером, и перенаправляет пользователя к нужному шарду.

Решение проблемы с соединениями

24:04
  • Проблема с соединениями решается с помощью добавления прокси-шардов.
  • Прокси-шарды вычисляют ключ и определяют, кто является лидером в шарде, а рафт-кластеры остаются замкнутыми в себе.

Итоговая схема

25:58
  • Итоговая схема включает фронты, рефрешеры и адресные книги, которые работают на разных кластерах.
  • Это позволяет избежать проблем с ЦП и репликацией данных.

Создание очереди для токенов

26:56
  • В видео рассказывается о создании очереди для токенов в системе, которая позволяет рефрешить токены, когда они истекают.
  • Это делается для того, чтобы избежать проблем с ауттейчами и обеспечить горизонтальное масштабирование.

Использование базы данных для очереди

33:25
  • Вместо использования сторонних очередей, можно использовать базу данных для хранения токенов и их обработки.
  • Это позволяет сэкономить ресурсы и упростить логику работы с базой данных.

Преимущества использования базы данных

34:18
  • Использование базы данных позволяет сэкономить ресурсы и упростить логику работы с очередью.
  • Это особенно важно для систем с высокой нагрузкой и большим количеством соединений.

Заключение

36:03
  • В заключение, автор рекомендует использовать базы данных для хранения и обработки данных, особенно в системах с высокой нагрузкой и большим количеством соединений.
  • Тарантул - это удобный и производительный инструмент для работы с базами данных.

Обновление логики в Тарантуле

36:57
  • В Тарантуле обновления логики хранятся в глобальном таблице.
  • При обновлении кода, Тарантул загружает новый образ и выполняет его в старом скоупе, сохраняя старые функции.

Добавление шардов

38:45
  • Шарды добавляются через код, список шардов хранится в конфиге Lua.
  • В случае выпадения кластера, обновление кода через код позволяет перезагрузить конфликт.

Автоматический ришардинг

39:52
  • В Тарантуле нет автоматического ришардинга, только через код.

Валидация и тестирование

41:48
  • Проблемы возникали, но были решены через дебаг и тестирование.
  • Тарантул доказал корректность алгоритма выборов, проблемы были в имплементации.

Балансировка трафика между прокси

44:16
  • Используется простой коннекшн пул для балансировки трафика между прокси.
  • Прокси - это Тарантулы, не несущие данных.

Реализация интерпретатора

45:11
  • Интерпретатор встроен в Тарантул, используется Lua.
  • Фифа используется для подключения бизнес-логики.