Балансировка нагрузки и APC - PullRequest
       3

Балансировка нагрузки и APC

6 голосов
/ 12 декабря 2011

Меня интересует сценарий, когда веб-серверы, обслуживающие приложение PHP, настраиваются с помощью балансировщика нагрузки.

Будет несколько веб-серверов с APC за балансировщиком нагрузки. Все запросы должны пройти через балансировщик нагрузки, который затем отправит его на один из веб-серверов для обработки.

Я понимаю, что memcached следует использовать для распределенного кэширования, но я думаю, что наличие кэша APC на каждой машине кэширует такие вещи, как конфигурации приложений и другие объекты, которые NOT будут отличаться на любом из серверов, что приведет к еще лучшая производительность.

Существует также область администратора для этого приложения. Доступ к нему также осуществляется через балансировщик нагрузки (например, site.com/admin). В таком случае, как я могу вызвать apc_clear_cache, чтобы очистить кеш объекта APC на ALL серверах?

1 Ответ

6 голосов
/ 12 декабря 2011

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

Решение, которое мне нравится, состоит в том, чтобы иметь возможность нажимать на один URL и делать все, например, http://www.mywebsite/clearcache.php или что-то в этом роде.,Если вам это нравится, читайте дальше.Помните, что вы можете пройти аутентификацию, если хотите, чтобы ваш админ мог поразить это или как бы вы ее не защищали.

Вы можете создать логику, в которой вы можете внешне сделать один запрос на очистку кеша на всех серверах.Какой бы сервер ни получал запрос на очистку кэша, он будет использовать одну и ту же логику для связи со всеми серверами, чтобы очистить их кэш.Это звучит странно и немного откровенно, но здесь идет логика, предполагая, что у нас есть 3 сервера с IP-адресами 10.232.12.1, 10.232.12.2, 10.232.12.3 внутри:

1) All servers would have two files called "initiate_clear_cache.php" and "clear_cache.php" that would be the same copies for all servers.

2) "initiate_clear_cache.php" would do a file_get_contents for each machine in the network calling "clear_cache.php" which would include itself
for example: 
file_get_contents('http://10.232.12.1/clear_cache.php');
file_get_contents('http://10.232.12.2/clear_cache.php');
file_get_contents('http://10.232.12.3/clear_cache.php');

3) The file called "clear_cache.php" is actually doing the cache clearing for its respective machine.

4) You only need to make a single request now such as http://www.mywebsite/initial_clear_cache.php and you are done.

Дайте мне знать, если это работает для вас.Я сделал это в .NET и Node.js аналогично, но еще не пробовал это в PHP, но я уверен, что концепция та же самая.:)

...