16.6. Семантика вызовов
16.6. Семантика вызовов
В листинге 15.24 мы привели пример клиента интерфейса дверей, повторно отсылавшего запрос на сервер при прерывании вызова door_call перехватываемым сигналом. Затем мы показали, что при этом процедура сервера вызывается дважды, а не однократно. Потом мы разделили процедуры сервера на две группы: идемпотентные, которые могут быть вызваны произвольное количество раз без возникновения ошибок, и неидемпотентные, наподобие вычитания определенной суммы из банковского счета.
Вызовы процедур могут быть разбиты на три группы:
1. «Ровно один раз» означает, что процедура была выполнена только один раз. Такого трудно достичь ввиду ненулевой вероятности сбоев в работе сервера.
2. «Не более одного раза» означает, что процедура вовсе не была выполнена или что она была выполнена один раз. Если вызвавшему процессу возвращается результат, мы знаем, что процедура была выполнена. Если процессу возвращается сообщение об ошибке, мы не знаем, была ли процедура выполнена хотя бы один раз или не была выполнена вовсе.
3. «По крайней мере один раз» означает, что процедура была выполнена один раз, а возможно, и больше. Это не вызывает проблем для идемпотентных процедур — клиент продолжает передавать запросы до тех пор, пока не получит правильный ответ. Однако если клиент отправит несколько запросов, существует вероятность, что процедура будет выполнена больше одного раза.
При возвращении из локальной процедуры мы можем быть уверены, что она была выполнена ровно один раз. Однако если процесс завершает работу после вызова процедуры, мы не знаем, успела она выполниться или нет. Для удаленных вызовов процедур возможно несколько ситуаций.
? Если используется протокол TCP и получен ответ, мы можем быть уверены, что удаленная процедура была вызвана ровно один раз. Однако если ответ не был получен (сервер вышел из строя), мы уже не можем сказать, была процедура выполнена или нет. Обеспечение семантики «ровно один раз» при учете возможности досрочного завершения работы сервера и неполадок в сети требует системы обработки транзакций, что лежит за границами возможностей RPC.
? Если используется UDP без серверного кэша и был получен ответ, мы можем быть уверены, что процедура была вызвана по крайней мере один раз, но возможно, и несколько.
? Если используется UDP с серверным кэшем и был получен ответ, мы можем быть уверены, что процедура была вызвана ровно один раз. Однако если ответ не был получен, мы оказывается в ситуации «не более одного раза» аналогично сценарию с TCP.
? Если вы стоите перед выбором:
? TCP,
? UDP с кэшем повторных ответов,
? UDP без кэша повторных ответов —
мы можем порекомендовать следующее:
? всегда используйте TCP, если только для приложения не важны накладные расходы на обеспечение надежности;
? используйте систему обработки транзакций для неидемпотентных процедур, корректное выполнение которых важно (работа с банковскими счетами, бронирование авиабилетов и т. п.);
? для неидемпотентных процедур использование TCP предпочтительно по сравнению с UDP и кэшем, поскольку TCP был изначально ориентирован на надежность, а добавление кэша к приложению, использующему UDP, вряд ли даст то же самое, что и использование TCP (см., например, раздел 20.5 [24]);
? для идемпотентных процедур можно использовать UDP без кэша;
? для неидемпотентных процедур использование UDP без кэша опасно.
В следующем разделе будут рассмотрены дополнительные преимущества использования TCP.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
5. Семантика
5. Семантика HTML не дает нам огромного количества элементов для работы. Тот ассортимент, что у нас есть, скорее похож на ассортимент магазинчика на углу, а не гипермаркета.У нас есть абзацы, списки и заголовки, но нет событий, репортажей и рецептов. HTML дает нам элемент,
Волшебство сеомантики, или Семантика в SEO
Волшебство сеомантики, или Семантика в SEO Даже тот, кого оптимизация затрагивала хотя бы по касательной, знаком с термином «семантическое ядро», а о профессионалах и говорить нечего. Однако с годами это удачное словосочетание закаменело, из него, как из карстовой породы,
Семантика вызова
Семантика вызова Вызов локальной процедуры однозначно приводит к ее выполнению, после чего управление возвращается в головную программу. Иначе дело обстоит при вызове удаленной процедуры. Невозможно установить, когда конкретно будет выполняться процедура, будет ли она
Семантика сигналов POSIX
Семантика сигналов POSIX Сведем воедино следующие моменты, относящиеся к обработке сигналов в системе, совместимой с POSIX.? Однажды установленный обработчик сигналов остается установленным (в более ранних системах обработчик сигналов удалялся каждый раз по
Семантика параметров
Семантика параметров До этого мы имели дело с синтаксисом передачи параметров и получили механизм синтаксического анализа для его обработки. Сейчас мы должны рассмотреть семантику, т.е. действия, которые должны быть предприняты когда мы столкнемся с параметрами. Это
4.1. Синтаксис и семантика
4.1. Синтаксис и семантика Прежде чем двигаться дальше, введем базовые определения. Языком мы будем называть множество строк (в большинстве случаев это будет бесконечное множество). Каждое выражение (в некоторых источниках вместо "выражение" употребляются термины
1.2. Базовый синтаксис и семантика Ruby
1.2. Базовый синтаксис и семантика Ruby Выше мы отметили, что Ruby — настоящий динамический объектно-ориентированный язык.Прежде чем переходить к обзору синтаксиса и семантики, упомянем некоторые другие его особенности.Ruby — прагматичный (agile) язык. Он пластичен и поощряет
18.5.2. Специальная семантика инициализации
18.5.2. Специальная семантика инициализации Наследование, в котором присутствует один или несколько виртуальных базовых классов, требует специальной семантики инициализации. Взгляните еще раз на реализации Bear и Raccoon в предыдущем разделе. Видите ли вы, какая проблема
Семантика паттернов
Семантика паттернов Остановимся подробнее на вопросе — что же означает "соответствие узла некоторому паттерну".Прежде всего, заметим, что любой паттерн является также и XPath-выражением. Тогда строгое определение соответствия узла паттерну можно дать следующим
Глава 2 Синтаксис и семантика Пролог-программ
Глава 2 Синтаксис и семантика Пролог-программ В данной главе дается систематическое изложение синтаксиса и семантики основных понятий Пролога, а также вводятся структурные объекты данных. Рассматриваются следующие темы:• простые объекты данных (атомы, числа,
Оптимизация вызовов
Оптимизация вызовов На уровнях 2 и 3 неизбежно использование явных вызовов процедуры подобных my_polygon.set_size (5) для изменения значения атрибута. Существует опасение, что использование такого стиля на уровне 4 негативно скажется на производительности. Тем не менее компилятор
Семантика использования псевдонимов
Семантика использования псевдонимов Неприятным последствием применения псевдонимов (и статических, и динамических) является воздействие операций на сущности, даже не упоминаемые в операциях.Модель вычислений без псевдонимов обладает приятным свойством: приведенный
Инварианты класса и семантика ссылок
Инварианты класса и семантика ссылок ОО-модель, разрабатываемая до сих пор, включала два частично не связанных аспекта, оба из которых полезны:[x]. Понятие инварианта класса, введенное в этой лекции.[x]. Гибкая модель периода выполнения, детально рассмотренная в начальных
Цепочка вызовов
Цепочка вызовов Обсуждая механизм обработки исключений, полезно иметь ясную картину последовательности вызовов, приведших в итоге к исключению. Это понятие уже появлялось при рассмотрении механизма языка Ada. Рис. 12.1. Цепочка вызововПусть r0 будет корневой процедурой
Фиксированная семантика компонентов copy, clone и equality
Фиксированная семантика компонентов copy, clone и equality Чаще всего замороженные (frozen) компоненты применяются в операциях общего назначения, подобных тем, что входили в состав класса GENERAL. Так, есть две версии базовой процедуры копирования:copy, frozen standard_copy (other: ...) is-- скопировать