пятница, 30 декабря 2016 г.

В чем разница между CACHE HIT и BYTE HIT

Мои маленькие мохнатые друзья, поскольку меня уже сугубо задолбало объяснять, в чем заключаются различия между CACHE HIT и BYTE HIT применительно к различным системам кэширования - язык до крови стер и на пальцах кровавые мозоли - пришла пора на пальцах объяснить между ними разницу и раз и навсегда закрыть эту тему.

CACHE HIT

Данный показатель является значимым в следующих случаях:
  1. Размер кэшируемых объектов (единиц кэширования) одинаков или очень близок. Пример: страницы оперативной памяти, кластеры файловой системы, блоки базы данных.
  2. Размер кэшируемых объектов не имеет значения с точки зрения конкретной подсистемы и конкретного показателя эффективности этой системы.  Пример: Кэш DNS.
Фактическая расчетная формула для показателя:

(Количество единиц кэширования, давших HIT/Общее количество запрошенных единиц кэширования)*100

BYTE HIT

Данный показатель значим в одной и только одной ситуации:
  1. Размер кэшируемых объектов значительно отличается (на порядок и более). Пример: Прямой или реверсивный кэш веб-контента.
Фактическая расчетная формула для показателя:

(Объем единиц кэширования в байтах, давших HIT/ Общий объем запрошенных единиц кэширования)*100

Примеры и выводы

Конкретные пример на пальцах. 

У вас есть 10 файлов по 1 Кб. CACHE HIT равен 90%. Это значит, что вы кэшировали 9 Кб, а для 1 Кб зафиксирован промах. Это означает, что эффективность кэширования в точности равна 90%. Для этого же случая - если BYTE HIT равен 90%, это означает, что 9 Кб попали в кэш и дали HIT, а 1 KB - нет. Очевидно, что в данном конкретном случае показатели CACHE HIT и BYTE HIT идентичны. То есть, если размер единиц кэширование идентичен, показатели совпадают и в применении показателя BYTE HIT нет смысла.

Обратный пример.

У вас есть 9 файлов по 1 Кб, и 1 файл 1 Гб. CACHE HIT равен 90%, при этом закэшированы файлы 1 Кб, а файл 1 Гб - нет. Что это означает? Это означает, что фактическая эффективность вашего кэша - нет, не 90% - а менее 1%. 9 Кб вы взяли из кэша, а 1 Гб - нет. В этом же примере, если BYTE HIT равен 99%, то есть файл 1 Гб дал HIT, а 9 файлов по 1 Кб дали MISS, то эффективность превосходна, несмотря на то, что CACHE HIT в этом случае будет 10%. Таким образом, чем больше разброс величин единиц кэширования, тем больше вероятность того, что корреляция между CACHE HIT и BYTE HIT будет в большей степени стремиться в разные стороны.

Я не говорю, что вышесказанное - закон природы. Однако это закономерность, характерная для приведенных выше примеров.

Что следует из вышесказанного?

Из вышесказанного следует, что, в случае, скажем, кэширующего прокси, CACHE HIT как таковой, ничего общего с эффективностью работы не имеет. От слова "совсем". И единственным показателем в этом случае является только BYTE HIT. Поскольку чем он выше, тем меньше данных мы запрашиваем из интернета (по объему) и тем больше получаем их из кэша.

Q.E.D.