Pull to refresh

Comments 12

Но вы же при 2м RPS как раз получите +- тот самый 0.1% невалидных кэшей, если время время окна инвалидации в районе 200мс

Нет, мы же кешируем в in-memory достаточно редко обновляемые данные, за 200мс устареет один ключ из нескольких десятков тысяч. А для той, части данных обновляется редко но крупными пачками, действительно данные будет не актуальными, но сотни миллисекунд, а не десятки минут.

Система стала сложнее и надёжнее. Два взаимоисключающих фактора в одном предложении

Мы как минимум перешли с Memcached на Valkey, благодаря чему у нас данные реплицированны. Это как раз про сложность которая дает надежность. Но в общем случае да, согласен чем проще тем надежнее. Но есть же история, что сначала риск принимается, так как он небольшой, а минимизировать его сложно, а потом делается какой-то механизм для снижения этого риска

Когда сделали "невелосипед" и он поехал, при чём очень даже хорошо.

Мы бы рады, что-то готовое использовать, но в полной мере не подошло ничего, чему собственно и посвящена половина статьи

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

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

Ну в ней то данные обновились допустим но у нас всё равно читатель мог прочитать старую версию и затупить. А потом её уже записать в кэш. В Memcached есть lease и это можно порешать с помощью т.н. fencing token'ов

А, да, в случае с memcached мы это так и решали, а при переходе на valkey написали для него модуль, который это поведение повторяет

Не является ли случаем эта машина по перекладыванию кэшей единой точкой отказа? Что-то думали в этом направлении?

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

Sign up to leave a comment.

Information

Website
ozon.tech
Registered
Founded
Employees
5,001–10,000 employees
Location
Россия