Если серверы с 1 по 3 находятся в одной сети, вы можете без проблем установить memcache на каждом из серверов приложений, поскольку Memcache предназначен для кластерной архитектуры.Это просто означает, что вы можете запускать как МНОГО экземпляров так, как вам хочется, но ваше приложение «видит» их как гигантский кеш-память 1.
Перефразируя из проекта вики memcached :
//in your configuration file:
$MEMCACHE_SERVERS = array(
"10.1.1.1", //web1
"10.1.1.2", //web2
"10.1.1.3", //web3
);
//at the 'bootstrapping' phase of your app somewhere:
$memcache = new Memcache();
foreach($MEMCACHE_SERVERS as $server){
$memcache->addServer ( $server );
}
Ваш вопрос связан с масштабированием?Если так:
Я видел, как некоторые люди говорили, что ваш сервер кеша находится на самом сервере БД.ИМХО, это не очень эффективно, так как вы хотели бы предоставить вашему серверу БД столько физической памяти, сколько вы можете себе позволить (в зависимости от того, насколько велико ваше веб-приложение с точки зрения трафика и нагрузки).
Я бы выделил часть памяти на каждом из серверов приложений (сервер 2 и сервер 3) для целей кэширования.Таким образом, если вы хотите масштабироваться, вы просто предоставляете еще один сервер приложений, извлекаете исходный код и добавляете его в свою сеть.Таким образом, размер вашего кэша памяти будет расти линейным образом (более или менее) при добавлении серверов приложений в пул серверов.
Все вышеперечисленное предполагает, что все серверы находятся в одной сети.