Как работает кеш, когда MySQL удалён? - PullRequest
1 голос
/ 28 сентября 2019

Я работал над переносом сервера унаследованного приложения электронной коммерции с использованием PHP 5.6.
В коммутаторе использовались два выделенных 32 сервера от Linode.
Один сервер предназначен для NginX + PHP, а другой - только для MySQL..
Устаревшее приложение использует memcached.

После переключения я вижу интенсивный внутренний трафик, вызванный частными входящими и исходящими соединениями.
До сих пор этот элемент не вызывал проблем напроизводительность.

Однако у меня сложилось впечатление, что запросы будут кэшироваться на локальном компьютере, а не на удаленном.
Потому что, если запрос кэшируется на удаленном хосте, он долженпередать набор результатов по частной сети, вместо извлечения из ОЗУ или локального SSD.

Я предполагаю, что это неправильно?

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

1 Ответ

2 голосов
/ 29 сентября 2019

MySQL имеет функцию под названием Query Cache, но она кэширует наборы результатов запросов в процессе сервера mysqld, а не на клиенте.Если вы снова выполните тот же самый запрос после того, как результат был кэширован в кеше запросов, он скопирует результат из кеша запросов и позволит избежать затрат на повторный запуск запроса.Но это не поможет избежать времени на передачу результата по сети из mysqld в ваше PHP-приложение.

Также имейте в виду, что MySQL Query Cache устарел и устарел .

Кроме того, ваше приложение может хранить данные из результатов запроса в memcached, но обычно это делается кодом приложения (я знаю, что есть UDF для чтения и записи memcached из триггеров MySQL, но это плохая идея).

Если ваша служба memcached не находится на том же хосте, что и ваш PHP-код, это приведет к сетевой передаче дважды : один раз при первом запросе данных из MySQL, а затем снова передачаданные в memcached, затем каждый раз, когда вы извлекаете кэшированные данные out из memcached.

PHP также имеет некоторые функции для кэширования в памяти, такие как APCu .У меня нет никакого опыта в этом, и это не ясно из краткого сканирования документации , где хранит кэшированные данные.

PHP разработан, чтобы быть языком "ничего общего",Каждый PHP-запрос имеет свои собственные данные, и данные обычно не сохраняются до следующего запроса.Вот почему кеш обычно не хранится в памяти PHP.Приложения полагаются либо на memcached, либо на саму базу данных, потому что они будут хранить данные дольше, чем один PHP-запрос.

Если у вас достаточно быстрая сеть, извлечение элементов изкеш по сети.Архитекторы производительности на моей прошлой работе развили эту мудрость:

«Удаленная память быстрее, чем локальное хранилище».

Они означали, чтоесли данные находятся в оперативной памяти на сервере, то чтение их из оперативной памяти даже с дополнительными накладными расходами на их передачу по сети обычно лучше, чем чтение данных из постоянного (дискового) хранилища на локальном хосте.

...