Назад | Перейти на главную страницу

Что мне делать, чтобы сохранить общий сервер файлового кеша? NFS - хорошая идея?

Я не специалист по сетям или DevOps, но я должен делать это для своей компании, потому что моя компания не может себе этого позволить, так что простите меня за ошибки.

у меня есть веб-приложение размещен в облако Google и Я использую балансировщик нагрузки предоставляется облаком Google, в серверной части У меня 2 экземпляра для веб-приложения. Проблема в том, что я использую кеширование файлов, и кеширование выполняется отдельно для обоих серверов. Это не HTTP-кеширование или что-то в этом роде, это внутреннее кеширование из веб-приложения, а не из nginx.

Мои серверы работают под управлением Ubuntu 16.04 LTS.

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

Я много исследовал в Интернете, и именно здесь я услышал о NFS.

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

Чтобы порекомендовать решение, нужно знать гораздо больше об архитектуре вашей системы. Я могу дать несколько предложений, которые могут работать или не работать в зависимости от вашей архитектуры.

  1. Убедитесь, что ваши экземпляры могут отвечать на все запросы, даже если виртуальная машина кеша не отвечает. Если кеши предназначены только для повышения производительности, экземпляры, вероятно, могут реагировать, не полагаясь на кеши, но не так эффективно.
  2. Разбейте кеш. Если вы можете вычислить хэш идентификатора кэшируемого ресурса и использовать его для выбора между несколькими виртуальными машинами с кешем, ваш проект будет более масштабируемым. И, используя тот же хеш, вы по-прежнему можете получать выгоду от ваших бэкэндов LB, имеющих доступ к результатам, кэшированным другими экземплярами.
  3. Кэширование и на бэкэндах LB. Даже если у вас есть общий кеш, рекомендуется также кэшировать на бэкэндах LB. Он может защитить от «горячих» точек на ваших виртуальных машинах с кешем и сделать вашу службу более устойчивой, если одна из виртуальных машин с кешем недоступна.

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

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