К основному содержимому
#Software

Как департамент утилизации CPU превратился в департамент экономии железа, выдерживающий нагрузку в 1 млн RPS

#Software #Architecture #SoftwareArchitecture #SystemDesign #DistributedSystems #Management

Хорошая статья от Ozon на тему кэширования на примере создания сервиса product-facade, который будет единым кешом над всеми мастер-системами в Ozon. Сервис получился нагруженным (1 mln rps, 350 Gb/s в пике на раздачу). Интересно почитать про различные стратегии работы с кешом по мере нарастания изощренности

  • lazy caching (с чего все начиналось) и дальше вопросы инвалидации кеша с версионированием, тегами, TTL, событиями из Kafka для инвалидации
  • **read-through caching
  • write through caching** Дальше интересная часть про выбор локального или внешнего хранилища кешей и отчего это зависит, тут прямо хорошо разобраны дизайн решения и плюсы и минусы каждого подходов и как и для чего их комбинировать. А дальше хорошо про борьбу за hitrate и стратегии вытеснения кеша (LRU, LFU, Segmented LRU) и что делать с thundering herd problem. И напоследок немного про то, как кешировать решение полностью обмазанное кешами:)

В конце авторы выдают хороший чеклист из вопросов, которые надо задать себе перед тем, как начать кешировать

  • Безопасно ли использовать кэшированное значение?
  • Какое допустимое время жизни объектов в кэше?
  • Допустимы ли задержки в обновлении кэша при изменениях в данных или его необходимо инвалидировать сразу?
  • Как часто изменяются данные?
  • Каков ожидаемый объем кэшируемых данных?
  • Какие ожидаются сценарии запросов (пользовательское поведение клиентов)?
  • Ожидаются ли горячие ключи, на которые будет приходиться основная читающая нагрузка?
  • Эффективно ли будет кэширование?

В общем, с инженерной точки зрения статья точно хороша. Я при чтении вспоминал свои вьетнамские флешбеки с кешированием и было прямо приятно некоторые моменты прочитать в хорошо описанном виде. Но вот с точки зрения дизайна архитектуры и взаимодействия команд мне показалось, что отдельный отдел, который кеширует все данные за всех - это решение, которое работает на определенном масштабе и которое плохо масштабируется на крупную организацию. Мы получаем аля DWH, но не сзади, а спереди:) В итоге, ответственность за попадание в кеш, настройку кеша, получение эффективно данных из источников и правильную инвалидацию приходится на централизованную команду, а должно по идее быть ответственностью самих продуктовых команд.

#Software #Architecture #SoftwareArchitecture #SystemDesign #DistributedSystems #Management