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

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

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

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

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

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

2
задан 2 October 2017 в 09:50
1 ответ

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

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

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

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

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

3
ответ дан 3 December 2019 в 10:34

Теги

Похожие вопросы