Считается ли, что протоколы без сохранения состояния лучше использовать над протоколами с контролем состояния?

StackOverflow https://stackoverflow.com/questions/626914

  •  06-07-2019
  •  | 
  •  

Вопрос

Я вижу, что протоколы с отслеживанием состояния приводят к менее испорченному «эмулированному состоянию», как файлы cookie.

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

Считается ли лучшей практикой всегда использовать протоколы без сохранения состояния или они действительно специфичны для конкретного домена?

Я думаю, что аутентификация становится проще при работе с протоколами с отслеживанием состояния, но есть ли другие причины, по которым вам следует использовать протокол с отслеживанием состояния?

Это было полезно?

Решение

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

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

Другие советы

Преимущества лиц без гражданства:

<Ол>
  • Высокая масштабируемость (вы можете отправить запрос на любой узел, вы можете добавить узлы в любое время)
  • Высокая доступность (если происходит сбой одного узла, нет потерянного состояния, просто отправьте запрос другому узлу)
  • Высокая скорость (поскольку состояние отсутствует, результаты кэшируются)
  • Я бы посчитал это специфичным для домена Если вы пишете моральный эквивалент пинга, протокол без гражданства является правильным выбором. С другой стороны, если вы пишете VNC, отслеживание состояния - это, безусловно, верный путь.

    Что касается того, когда выбирать, какие из них следует учитывать. Во-первых, хотя варианты реализации либо / или, проблемное пространство является континуумом. У всех задач в реальном мире есть хотя бы небольшое состояние, вопрос в том, сколько их стоит, и стоит ли их преодолевать, стоит того, чтобы отслеживать их с обеих сторон. И второе, вы обычно имеете дело со стеком протоколов, а не с одним протоколом; убедившись, что все живет на должном уровне, можно значительно упростить ситуацию.

    Протокол без сохранения состояния проще кластеризовать, поскольку при последующих запросах состояние не нужно передавать с одного сервера на другой.

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

    Несколько минут поиска в Google показывает несколько статей и блогов, рассказывающих о состоянии NFSv4; это должно быть интересным чтением для некоторых проблем дизайна.

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

    Stateful лучше. Тогда вам не нужно отправлять состояние все время. Протокол становится проще.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top