Где мы кэшируем данные? Данные кэшируются везде, от внешнего интерфейса до серверного! Воспользуйтесь принципом локальности ссылки: недавно запрошенные данные, скорее всего, будут запрошены снова. Существуют на всех уровнях архитектуры, но часто встречаются на уровне, ближайшем к внешнему интерфейсу.
На этой диаграмме показано, где мы кэшируем данные в типичной архитектуре.
В потоке есть несколько слоев.
- Клиентские приложения
- Ответы HTTP могут кэшироваться браузером.
- Мы запрашиваем данные по HTTP в первый раз, и они возвращаются с политикой истечения срока действия в заголовке HTTP; мы снова запрашиваем данные, и клиентское приложение сначала пытается получить данные из кеша браузера.
2. CDN
- CDN — это сеть серверов, которая распространяет контент с «исходного» сервера по всему миру путем кэширования контента рядом с местом, где каждый конечный пользователь выходит в Интернет через устройство с доступом в Интернет.
- CDN кэширует статические веб-ресурсы. Клиенты могут получать данные с ближайшего узла CDN.
3. Балансировщик нагрузки
- Балансировщик нагрузки также может кэшировать ресурсы. Кэширование контента повышает производительность веб-сайта за счет временного хранения данных, к которым недавно обращались.
- Балансировщик нагрузки обслуживает кэшированные запросы вместо того, чтобы делать еще один запрос к веб-серверу, стоящему за ним.
4. Инфраструктура обмена сообщениями
- Брокеры сообщений сначала сохраняют сообщения на диске, а затем потребители извлекают их в своем собственном темпе. В зависимости от политики хранения данные кэшируются в кластерах Kafka на определенный период времени.
5. Кэширование сервисов/приложений
- В службе есть несколько уровней кеша. Если данные не кэшируются в кеше ЦП, служба попытается извлечь данные из памяти. Иногда служба имеет кэш второго уровня для хранения данных на диске.
6. Распределенный кэш
- Распределенный кеш — это кеш, данные которого распределены по нескольким узлам в кластере, а также по нескольким кластерам в нескольких центрах обработки данных, расположенных по всему миру.
- Распределенный кеш, такой как Redis, хранит пары ключ-значение для нескольких служб в памяти. Он обеспечивает гораздо лучшую производительность чтения/записи, чем база данных.
7. Полнотекстовый поиск
- Иногда нам нужно использовать полнотекстовый поиск, такой как Elastic Search, для поиска документов или поиска по журналам. Копия данных также индексируется в поисковой системе.
8. База данных —Даже в базе данных у нас есть разные уровни кеша:
- WAL (журнал опережающей записи):данные сначала записываются в WAL перед построением индекса B-дерева.
- Bufferpool: область памяти, выделенная для кэширования результатов запроса.
- Материализованное представление. Предварительно вычисляйте результаты запросов и сохраняйте их в таблицах базы данных для повышения производительности запросов.
- Журнал транзакций: запись всех транзакций и обновлений базы данных.
- Журнал репликации: используется для записи состояния репликации в кластере базы данных.
9. Кэш диска:
- В то время как кэши ЦП обычно полностью управляются аппаратным обеспечением, другие кэши управляются различным программным обеспечением.
- Кэш страниц в основной памяти, который является примером дискового кеша, управляется ядром операционной системы9.
10. Кэширование DNS
- Помогает повысить скорость доступа к веб-страницам, сохраняя IP-адрес доменного имени в кеше. Другими словами, вместо того, чтобы каждый раз выполнять DNS-запрос, IP-адрес можно быстро извлечь из кеша.
Для получения дополнительной информации перейдите по ссылке
Не забывайте нажимать кнопки «Аплодисменты» и «Подписаться», чтобы помочь мне написать больше подобных статей.