Как общий кеш выдавал пустые ответы MySQL
У крупного клиента Hyperdrive примерно 0,001% запросов возвращали пустой результат, хотя строки должны были быть. Ошибка появлялась только с включённым кешем.
В расследовании Cloudflare причиной оказались разные представления ответа MySQL. Hyperdrive и пользовательский драйвер могли согласовать разные возможности протокола: в одном случае набор строк завершается пакетом OK, в другом нужен EOF.
Два компонента Hyperdrive использовали общий кеш, когда находились в одном дата-центре. Один сохранял исходные байты, другой — уже преобразованные для драйвера. При чтении чужой записи ответ мог завершиться раньше времени или зависнуть.
Исправление: сохранять в кеше единое представление, а преобразование выполнять при выдаче клиенту. Если несколько компонентов разделяют кеш, им нужен общий контракт формата значения, включая особенности протокола.
#кеширование #разборы
Post #3080
104
