Обмен данными между узлами (серверами приложений) в облаке

Я создаю веб-приложение Python / Pylons, которое до сих пор обслуживалось одним сервером, Теперь я хочу исследовать, как он будет масштабироваться среди нескольких серверов с каким-то балансировщиком нагрузки впереди.

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

Для сессий я мог бы использовать сессии на основе файлов cookie: http: //beaker.groovie.org/sessions.html#cookie-based

для загруженных пользователем данных и кеша (оба в настоящее время хранятся в локальной файловой системе) мне нужен другой подход, и я не уверен, какой из них будет наилучшим , Некоторые из вариантов, которые я рассмотрел:

  • В частности, Amazon S3, поскольку я нацеливаюсь на Amazon в качестве облачного провайдера. Тем не менее, я бы хотел, чтобы мой код не становился слишком специфичным для поставщика, поэтому позднее возможно изменение поставщика облака.
  • [распределенное] хранилище значений ключей, потребовало бы переписать / абстрагировать части моего кода, предполагающие, что все данные попадают в файловую систему. узлы, которые имеют необходимые пользовательские данные / кэш локально. Подождите, это называется шардингом, верно?
  • Доступная по сети файловая система, в частности NFS: каталог NFS экспортирован на один (возможно выделенный) узел, все остальные монтируют его. Возможные проблемы, о которых я могу думать:
    • Пропускная способность для хоста NFS может стать узким местом
    • Условия гонки, когда несколько клиентов пытаются получить доступ к одним и тем же файлам одновременно.
  • В настоящее время я рассматриваю возможность использования NFS - это, кажется, самое простое решение, которое может возможно работа. Но опять же, может быть, есть еще предостережения, о которых я не знаю, принимая это близорукое решение? Каков ваш опыт, какие формы хранения и обмена данными вы использовали для приложений, размещенных в облаке и которые, как ожидается, будут масштабироваться горизонтально?

    1
    задан Pēteris Caune 9 August 2010 в 14:14
    поделиться

    1 ответ

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

    1
    ответ дан 2 September 2019 в 22:19
    поделиться
    Другие вопросы по тегам:

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