Войти Регистрация
Data base

104. Какие реплики убрать из пула чтения

Средняя

MySQL · MySQL 8.4.6

В Booking.com у кластера MySQL один primary на запись и от десятков до сотен реплик на чтение. Реплику, которая отстала, убирают из пула, чтобы пользователь не видел старую цену номера.

В replica_heartbeats каждые несколько секунд пишется отставание реплики lag_sec. Последний heartbeat — с самым поздним checked_at; при равном времени — с большим hb_id. Верните replica, cluster, lag_sec для реплик, у которых в последнем heartbeat отставание больше 10 секунд.

В работе: Балансировщик чтения: раз в минуту решает, на какие реплики слать SELECT.

Как проверяем Движка MySQL в браузере пока нет, поэтому здесь не запрос, а выбор решения. Выберите все верные варианты (одна лишняя отметка допустима). После ответа — почему каждый вариант верный или нет. Ответ один на подход: после него показываем разбор.
оконные функциитоп-N в группеGROUP BYONLY_FULL_GROUP_BY

Источник: кейс Booking.com: MySQL с сотнями реплик на чтение, SREcon24 EMEA. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.

Какие запросы вернут реплики, отстающие в последнем замере больше чем на 10 секунд?

  • Коррелированный подзапрос с ORDER BY … LIMIT 1
  • MAX(lag_sec) по реплике
  • JOIN с MAX(checked_at) без учёта hb_id
  • ANY_VALUE(lag_sec) рядом с MAX(checked_at)
  • ROW_NUMBER() по checked_at DESC, hb_id DESC