План занятия
00:00:00Сегодня мы узнаем о кэшировании. Мы рассмотрим, что такое кэширование, когда оно бесполезно, а также его внутренние и внешние аспекты. Мы обсудим преимущества и недостатки различных типов кэширования и когда использовать каждый тип.
Что такое кэширование
00:01:03Кэширование для более быстрого реагирования Кэширование - это процесс хранения данных во временной области хранения для сокращения времени отклика. Его можно использовать для сокращения времени отклика служб и минимизации нагрузки на внешние службы за счет повторного использования ранее вычисленных или извлеченных данных. Кроме того, кэширование помогает стабилизировать работу системы во время кратковременных сбоев.
Оптимизация использования процессора Кэш может оптимизировать использование процессора за счет хранения и извлечения предварительно вычисленных результатов, таких как математические или физические формулы, уменьшая необходимость в повторных вычислениях. Это повышает производительность и стабильность приложений при обращении к внешним системам, которые могут испытывать временные сбои.
Основные термины кэширования
00:03:18Терминология кэширования Терминология кэширования объяснена во избежание путаницы. Включает определения "пропуск кэша", "попадание в кэш" и "коэффициент попадания".
Горячая клавиша "Горячая клавиша" определяется как наиболее часто запрашиваемый элемент, часто связанный с популярным контентом или пользователями.
Процесс прогрева кэша Процесс заполнения кэша тестовыми данными или данными, созданными пользователем с нуля, известен как прогрев кэша.
Аннулирование кэшированных данных "Аннулирование" объясняется как удаление кэшированных данных из-за потенциальной потери точности или актуальности.
Какие данные кэшировать
00:04:55Кэширование данных выгодно для пользователей, поскольку сокращает время загрузки и отображения информации. Однако разработчикам необходимо учитывать исключения, когда данные меняются часто, например, каждые несколько секунд или минут. Редко изменяющиеся данные можно кэшировать, не влияя на работу пользователя.
Кэширование ошибок
00:06:02Пользователи, особенно программисты, упускают из виду тот факт, что кэширование может использоваться не только для данных, но и для ошибок. Представьте себе приложение, которое кэширует данные пользователей. Когда в кэш поступает запрос, а пользователь не найден, мы проверяем базу данных, но ничего не предпринимаем, если его по-прежнему там нет. Это экономит ненужные запросы к базе данных при работе с несуществующими пользователями.
Как предотвратить cache miss attack
00:07:13Предотвращение атак с пропуском кэша Чтобы предотвратить атаки с пропуском кэша, важно иметь возможность обрабатывать загрузку без кэша. Даже в случае сбоя кэша база данных должна продолжать обрабатывать загрузку. Концепция кэша заключается в ускорении ответов, а не в удержании всей загрузки базы данных.
Аннулирование кэша и удаление данных Процесс прогрева кэшей с популярными типами данных постепенно подготавливает их к полной загрузке или взаимодействию с пользователем. Использование std::map в качестве внутреннего кэша может быть полезным при обсуждении различий между методами внутреннего и внешнего кэширования.
Эффективность кэширования
00:10:34Оценка эффективности кэширования Эффективность кэширования можно оценить с помощью формулы, которая учитывает среднее время доступа к базе данных, частоту пропусков кэширования и время доступа к базе данных и кэшу. Если частота пропусков в кэше высока (выше 0,8) при более длительном времени доступа к данным в кэше, чем в базе данных, кэширование может оказаться невыгодным.
Показатели многомерного кэширования Полезность кэширования зависит от различных факторов, таких как требования к рабочей нагрузке и стабильность системы. Для измерения времени доступа к базам данных и кэшам используются различные показатели, помогающие определить, полезно ли кэширование в зависимости от конкретных сценариев.
Внутреннее кэширование
00:12:56Понимание двух типов кэширования: внутреннего и внешнего. Внутреннее кэширование обеспечивает высокую скорость, устраняет сетевые запросы и сокращает использование памяти.
Внешнее кэширование
00:14:41Преимущества внешнего кэширования Внешнее кэширование используется для хранения данных вне основного сервиса, что позволяет увеличить емкость хранилища и распределение ресурсов. Оно обеспечивает конкурентный доступ к кэшу и гарантирует, что кэшированные данные не будут потеряны даже в случае сбоя сервиса.
Проблемы внешнего кэширования Аннулирование во внешнем кэшировании требует ручного удаления устаревших данных из всех экземпляров, что может снизить производительность по сравнению с внутренним кэшированием. Взаимодействие с кэшами зависит от требований приложения и шаблонов использования.
Типы и настройка Различные типы кэширования включают в себя различные способы хранения данных, такие как репликация или сегментирование. Может потребоваться написание пользовательских решений для кэширования, основанных на конкретных потребностях, а не полагаться исключительно на сторонних поставщиков или существующие варианты инфраструктуры.
Cache Aside
00:19:23Стратегия отложения кэша Стратегия обхода кэширования предполагает, что приложение координирует запросы к кэшу и базе данных, решая, откуда извлекать данные. Это может быть реализовано как отложенное кэширование или сквозная запись. Отложенное кэширование означает сначала чтение из кэша, а затем обращение к базе данных, если данные не найдены; сквозная запись означает сохранение в обоих местах при операции записи.
Синхронное и асинхронное кэширование Кэширование может выполняться синхронно или асинхронно. Синхронное кэширование сохраняет данные сразу по запросу, в то время как асинхронное кэширование собирает несколько запросов перед обновлением кэша, сокращая операции записи за счет накопления результатов определенных операций.
Cache Through
00:21:32Кэш обновляет данные в кэше. Все запросы от приложения проходят через кэш, который считывает из него данные и сохраняет их. Сервис работает только с кэшем, упрощая логику приложения.
Cache Ahead
00:23:16Кэширование и чтение Когда делается запрос на чтение данных, он всегда отправляется в кэш, а не непосредственно в базу данных. Кэшированные данные могут время от времени обновляться внешним модулем или службой.
Соображения при кэшировании Разработчики комбинируют различные подходы в зависимости от своих задач и характеристик рабочей нагрузки. Важно учитывать обновления данных при выборе стратегии кэширования и сбалансировать характеристики нагрузки.
Аннулирование данных и тестирование производительности Крайне важно решить, требуется ли строгая согласованность данных в кэше. Редко изменяющиеся, но часто запрашиваемые данные могут кэшироваться без проблем с производительностью при надлежащем тестировании.
Алгоритмы вытеснения данных из кэша
00:29:33Алгоритмы замены данных в кэше предназначены для управления ограниченным пространством кэша путем замены существующих элементов новыми. Когда для нового элемента нет места, алгоритм решает, какой существующий элемент удалить и заменить новым.
Random алгоритм
00:30:01Случайный алгоритм используется в ситуациях, когда необходим простой и практичный подход. Он предполагает случайный выбор кого-либо или чего-либо, не беспокоясь о сложности.
FIFO алгоритм
00:30:23Алгоритм FIFO взаимодействует с очередью путем добавления случайных данных. Он решает проблему определения приоритетов более рационального использования, как в обычных очередях. Давайте разберемся в этом на примере: у меня были операции по добавлению пользователя 1, пользователя 2, пользователя 3, а затем пользователя 4 в первой строке. Затем происходит добавление пятого пользователя; FIFO - это система очередей, аналогичная обслуживанию клиентов в банке или управлению запасами.
LIFO алгоритм
00:30:49Алгоритм LIFO означает, что пользователь в верхней части экрана заменяется новым пользователем, освобождая место для другого. Это создает стек, в который пользователи добавляются и удаляются сверху.
LRU алгоритм
00:31:16Алгоритм LRU, или наименее недавно используемый, заменяет элемент, к которому был осуществлен последний доступ. Когда добавляется новый элемент и пользователь 1 был недавно использован, он заменяется новым элементом на позиции Пользователя 2, потому что к пользователю 2 больше не было доступа.
MRU алгоритм
00:32:06Алгоритм MRU определяет приоритет элемента, который использовался последним, даже в особых случаях. Важно иметь это в виду, поскольку это может понадобиться неожиданно, например, при добавлении пятого элемента после операции типа "Получить пользователя 3".
LFU алгоритм
00:32:29Алгоритм LFU Алгоритм LFU вычисляет частоту доступа к каждому элементу и удаляет наименее часто используемый элемент. Это базовый алгоритм удаления, который определяет приоритеты элементов на основе частоты их использования.
LRU против LFU В LRU удаляется наименее недавно используемый элемент, в то время как в LFU удаляется наименее часто используемый элемент. Выбор между ними зависит от того, что важнее - установить приоритет менее частых или менее недавних обращений.
Усовершенствованные алгоритмы выселения Существуют продвинутые алгоритмы удаления, такие как MRU и WF, которые учитывают различные факторы, такие как высокочастотная поддержка или случайная замена для оптимизации кэша. Эти алгоритмы используются редко, но могут быть полезны в конкретных сценариях, критически важных для производительности.
Алгоритм Белади (OPT)
00:37:11Алгоритм Белади, также известный как OPT или оптимальный алгоритм, является теоретическим алгоритмом перемещения данных. Он предсказывает будущую схему доступа к кэшу, но непрактичен для реализации в реальном времени из-за своей чисто теоретической природы.
Second Chance алгоритм
00:38:13Алгоритм второго шанса - популярный метод управления виртуальной памятью, используемый в Linux. Он решает проблему невозможности предоставить элементу второй шанс, если на него не было ссылки. Алгоритм добавляет бит (US) к каждому элементу, и когда элемент добавляется, его бит US устанавливается равным 0. Если при следующем доступе бит US будет равен 1 для всех элементов, то они сбрасываются и повторно оцениваются с самого начала.
Clock алгоритм
00:39:56Алгоритм Clock является модификацией алгоритма FIFO, специально используемого в Linux для виртуальной памяти и подкачки. Он устраняет ненужные операции, применяя ту же логику, что и алгоритм FIFO, но без перемещения элементов.
2Q алгоритм
00:40:40Алгоритм FIFO управляет двумя очередями, fifo1 и fifo2. Элементы, запрошенные из fifo1, остаются на месте, в то время как элементы из fifo2 перемещаются, освобождая место для новых. Этот конкретный случай полезен, когда вероятны будущие запросы к данным.
SLRU алгоритм
00:41:42Алгоритм SLRU представляет собой комбинацию алгоритмов LRU и LFU, при которых элементы сначала помещаются в холодный кэш LRU. При повторном обращении к элементу он перемещается в теплый кэш LRU на основе алгоритма LRU. Это обеспечивает частотный доступ и эффективное удаление менее используемых элементов.
TLRU алгоритм
00:42:49Алгоритм LRU конкретно посвящен тому, как узнать больше обо всем этом в дальнейшем. Время работы LRU абсолютно точно такое же, как у LRU. Кроме того, данные могут быть удалены в соответствии с алгоритмом LRU.
LRU-k алгоритм
00:43:17Алгоритм LRU-K Алгоритм LRU-K удаляет элемент, который использовался наименее недавно, основываясь на времени доступа к нему в прошлом. Это полезно в ситуациях, когда важно рассмотреть второй или третий доступ к объекту, прежде чем удалять его.
Аннулирование кэша и гибридное кэширование Прежде чем перейти к аннулированию данных кэша, давайте обсудим гибридное кэширование. Хотя у меня нет личного опыта работы с гибридным кэшированием, известно, что оно используется в системах Linux и может быть настроено на основе конкретных требований, таких как учет размера элементов при удалении.
Инвалидация данных в кэше
00:47:24Проверка данных в кэше необходима для предотвращения проблем. Например, если у Вовы есть 1000 рублей в базе данных и 1000 рублей в кэше, но написано, что у Вовы сейчас 1500 рублей, существует необходимость в проверке данных.
Инвалидация по TTL
00:47:41Аннулирование TTL происходит, когда кэшированные данные автоматически удаляются по истечении установленного срока службы, что создает проблемы при выборе подходящего кэша. Сокращение срока службы кэша приводит к меньшему количеству кэшированных данных, но лучшей согласованности данных, в то время как увеличение срока службы может привести к тому, что в кэше останутся устаревшие элементы.
Jitter
00:48:35TTL может одновременно сделать данные недействительными, вызывая потенциальные проблемы с источниками данных. Например, при продаже на Amazon кэшированные товары могут устареть по окончании продажи из-за одновременного признания записей недействительными. Это может привести к несоответствиям на сервере, но все равно приводит к одновременным запросам к базе данных.
Thundering herd problem
00:49:40Проблема thundering herd возникает, когда несколько процессов одновременно запрашивают один и тот же ключ из кэша, что приводит к внезапному увеличению количества одновременных запросов к базе данных и хранилищу кэша. Это может усложниться в архитектуре микросервисов с несколькими экземплярами, требуя тщательной обработки одновременных запросов к одному и тому же элементу кэша.
Инвалидация по событию
00:51:13Аннулирование на основе событий обычно решается как задача. Когда происходит событие A, все данные сначала попадают в кэш. Затем Криштиану Роналду заменяет недействительные данные, и все проверяют, чего не хватает в кэше, прежде чем извлекать из базы данных.
Версионирование кэша
00:52:41Кэширование во внешнем интерфейсе Кэширование необходимо для оптимизации производительности. При изменении значения его необходимо обновить в кэше, чтобы пользователи могли видеть самый свежий контент. Однако чрезмерное кэширование может привести к проблемам с устаревшими данными и увеличению нагрузки на серверы.
Управление версиями и аннулирование кэша Аннулирование кэша становится решающим при работе с несколькими версиями кэшированных данных. Используя номера версий или уникальные идентификаторы, мы можем эффективно управлять обновлениями кэша, не влияя на работу пользователей. Такой подход гарантирует, что пользователи получают самый актуальный контент при минимизации нагрузки на сервер.
Тегирование кэша
00:56:11Организация кэширования данных Основная идея заключается в организации различных типов данных, таких как новости, погода и курсы валют, в одном кэше. Потенциальной проблемой здесь является несогласованность синхронизации данных внутри кэша.
Аннулирование и синхронизация данных Обсуждаемый здесь вопрос касается поддержания согласованности между различными типами данных, хранящихся в одном и том же кэше. Возникают вопросы о том, как обрабатывать аннулирование и синхронизацию при поступлении новой информации или обновлении существующих записей.
Функции и транзакции базы данных В этой главе рассматриваются функции баз данных, связанные с системами кэширования. В ней рассматриваются такие темы, как параллельный доступ к кэшированным данным, уровни изоляции транзакций, очистка устаревших записей из кэша при обеспечении согласованного чтения во время одновременных операций записи.
Многомерный кэш
01:03:37Арно объяснил концепцию многомерного кэширования, где кэширование выполняется на разных уровнях, таких как кэш браузера, кэш прокси-сервера, внутренний кэш приложения, внешние кэши, такие как Redis, и кэши базы данных. Он подчеркнул важность правильного структурирования всего процесса кэширования для достижения низкой частоты пропусков.
Курс по System Desing
01:05:46Введение в курс системного проектирования Курс готовит разработчиков, системных администраторов, архитекторов и менеджеров проектов к повседневной практике проектирования больших и устойчивых систем. Он охватывает широкий спектр тем, включая типы архитектуры, балансировку нагрузки, репликацию, сегментирование, механизмы хранения и шаблоны.
Фундаментальные концепции систем баз данных Рассматриваются основы систем баз данных, таких как поисковые системы (например, Google), механизмы сохранения, такие как индексы и деревья (B-деревья и R-деревья), концепции распределенного хранения данных, такие как репликация и сегментирование. Также обсуждается, как применять эти концепции при проектировании крупномасштабных систем для таких платформ, как Telegram или ВКонтакте.
Подробности трехнедельной программы обучения Программа обучения рассчитана на 3 недели с практическими занятиями в Google Meets, охватывающими различные аспекты от базовых компьютерных архитектур до передовых принципов проектирования. Курс делает упор на командную работу, назначая партнеров для совместных проектов системного проектирования, которые могут быть представлены в виде портфолио работ во время собеседований при приеме на работу.
Отзывы о курсе и дополнительные ресурсы "Положительные отзывы, полученные от предыдущих участников о привлекательном характере содержания курса". Предлагает скидки на вступительные взносы, а также доступ к ценным материалам, включая книги, видео, информационные ресурсы и статьи, связанные с подготовкой к проектированию систем.