Ну, вы могли бы написать об этом книги, но основной принцип заключается в том, что есть несколько разных подходов.
Самый распространенный и разумный подход для кэширования - это шардинг.Это означает, что данные размещаются только на одном сервере, и для определения того, какой это сервер, используется какой-то метод.Таким образом, он может быть получен с этого самого сервера и задействован только один сервер.
Это, очевидно, хорошо работает в средах ключ / значение, таких как memcached.
Обычной практикой является использование криптографического хэшаключ.Вычислите число хеш-модов серверов, и в результате вы получите сервер, который будет хранить и извлекать данные.
Эта процедура обеспечивает более или менее равное распределение.
Как это точно сделано в memcached, я не знаю, но какой-то хэш точно.
Но будьте осторожны, эта техника не очень доступна.Таким образом, если один сервер не работает, записи пропадают.Таким образом, вы, очевидно, можете использовать это только для целей кэширования.
Другие методы, где, например, необходима высокая доступность ресурсов, для расчета которых требуется много времени и которые автоматически подогреваются на заднем плане, включают репликацию.
Наиболее распространенной формой в средах кэширования является репликация мастер-мастер с последним разрешением конфликтов с отметками времени.Это означает, что каждый сервер получает данные от каждого сервера, который еще не находится на локальном сервере (это делается с использованием журналов репликации и смещений байтов).Если возникает конфликт, используется последняя версия (незначительное смещение времени между серверами игнорируется).
Но в других средах, где, например, пишется очень мало, а много читается, часто возникает каскад, гдезадействован только один или несколько главных серверов, а остальные - просто репликация чтения.
Но эти настройки очень редки, потому что разделение, как описано выше, дает лучшую производительность, а в средах кэширования потеря данных в большинстве случаев допустима.поэтому его также по умолчанию для memcached.