НАДЕЖНАЯ ПЕРЕДАЧА СООБЩЕНИЙ С ИСПОЛЬЗОВАНИЕМ ТАКТОВЫХ СИГНАЛОВ С СИНХРОНИЗИРОВАННЫМИ ЧАСТОТАМИ
RELIABLE TRANSMISSION OF MESSAGES USING CLOCK SIGNALS WITH SYNCHRONISED FREQUENCIES

Область техники
Настоящее изобретение относится к электронной передаче сообщений, в частности к надежной передаче сообщений с использованием тактовых сигналов с синхронизированными частотами.
Предшествующий уровень техники
Компьютерные системы и связанные с ними технологии оказывают влияние на многие аспекты жизни общества. Реально, способность компьютерных систем обрабатывать информацию трансформировала наш образ жизни и деятельности. Компьютерные системы в настоящее время выполняют огромное множество задач (например, обработку текстов, планирование, управление базами данных), которые до внедрения компьютерных систем выполнялись вручную. Позже компьютерные системы стали связывать друг с другом и с другими электронным устройствами для формирования как проводных, так и беспроводных сетей, по которым компьютерные системы и другие электронные устройства могли передавать электронные данные. В результате множество задач, выполняемых в компьютерной системе (например, речевая связь, доступ к электронной почте, управление бытовыми электронными устройствами, просмотр Web-страниц и распечатка документов), включает в себя обмен электронными сообщениями между рядом компьютерных систем и/или других электронных устройств через проводные и/или беспроводные компьютерные сети.
Сети стали в действительности настолько разносторонними, что простая сетевая вычислительная система может осуществлять информационный обмен с любой одной из миллионов других вычислительных систем, распространенных по всему миру, через конгломерат сетей, часто определяемый понятием «Интернет». Такие вычислительные системы могут включать в себя настольные, портативные или планшетные персональные компьютеры, персональные цифровые помощники (PDA), телефоны или любые другие компьютеры, способные осуществлять связь через цифровую сеть.
Для осуществления информационного обмена через сеть одна вычислительная система (упоминаемая здесь как «передающая вычислительная система») формирует или иным образом получает доступ к электронному сообщению и передает электронное сообщение по сети к другой вычислительной системе (упоминаемой здесь как «приемная вычислительная система»). Электронное сообщение может считываться человеком-пользователем, если электронное сообщение представляет собой, например, сообщение электронной почты или сообщение службы мгновенного обмена сообщениями, или может считываться вместо этого приложением, исполняемым на принимающей вычислительной системе. Электронное сообщение может формироваться приложением, исполняемым на передающей вычислительной системе, возможно, с участием человека-пользователя.
Хотя такой электронный обмен сообщениями предпочтительным образом позволяет вычислительным системам обмениваться информацией, сети иногда не могут доставить электронное сообщение. В зависимости от важности электронного сообщения, это может оказаться пагубным, а иногда иметь катастрофические последствия. Соответственно, разрабатываются технологии надежной электронной передачи сообщений.
Цель технологий надежной электронной передачи сообщений состоит в доставке электронного сообщения от источника к адресату по коммуникационной сети, которая может терять, дублировать, переупорядочивать и задерживать сообщения. Некоторые электронные сообщения могут доставляться и обрабатываться многократно без какого-либо ущерба. Однако это не имеет места для всех сообщений. Самый надежный способ состоит в том, чтобы гарантировать, что сообщение будет доставлено однократно или не будет доставлено совсем.
Некоторые надежные технологии передачи сообщений реализуют сообщения подтверждения приема (квитирования). Например, протокол управления передачей (в числе других транспортных протоколов) реализует надежную передачу сообщений на основе подтверждений. Более конкретно, когда принимающая вычислительная система принимает электронное сообщение от передающей вычислительной системы, то принимающая вычислительная система передает сообщение подтверждения (квитирования) приема в передающую вычислительную систему. После приема сообщения квитирования передающая вычислительная система может надежным образом предпринимать соответствующие действия при условии знания того, что принимающая вычислительная система действительно приняла электронное сообщение. В противном случае, если передающая вычислительная система не приняла сообщения квитирования, то передающая вычислительная система может предпринять соответствующие действия, такие как повторная передача электронного сообщения. Однако передача сообщения квитирования на каждое принятое электронное сообщение может привести в результате к большому числу сообщений квитирования, что может весьма вероятно привести к ненужным затратам ширины полосы системы.
Для уменьшения количества сообщений квитирования, которые необходимо передавать, разработано совокупное подтверждение. При совокупном подтверждении передающая вычислительная система присваивает последовательный номер каждому электронному сообщению в сессии. Последовательный номер для данного электронного сообщения в типовом случае получает приращение на единицу по сравнению с предшествующим электронным сообщением в сессии. Совокупное подтверждение, возвращаемое к передающей вычислительной системе, включает в себя последний последовательный номер непрерывной последовательности последовательных номеров, представляющих успешно принятые сообщения. Например, предположим, что принимающая вычислительная система приняла электронные сообщения, имеющие последовательные номера от 1 до 50 и от 55 до 99, но не приняла сообщения, имеющие последовательные номера от 51 до 54. Принимающая вычислительная система может возвратить совокупное сообщение подтверждения приема, идентифицирующее только принятые последовательности.
Однако, если передающая вычислительная система не смогла принять сообщение подтверждения приема (как индивидуальное, так и совокупное), то для передающей вычислительной системы может оказаться невозможным определить, была ли безуспешной доставка электронного сообщения или доставка сообщения подтверждения приема. То есть передающая вычислительная система находится в «сомнении», приняла ли принимающая вычислительная система электронное сообщение. В некоторых средах может быть приемлемой доставка и обработка электронных сообщений много раз. Таким образом, в этих средах (например, в связанных с передачей статического контента на Web-основе) передающая вычислительная система может повторно передавать электронное сообщение, если соответствующее сообщение подтверждения приема не принято. Однако в других средах, может оказаться неприемлемым многократно доставлять и/или обрабатывать электронные сообщения. Таким образом, в этих средах (например, в связи с передачей банковских транзакций) передающая вычислительная система не будет повторно передавать электронное сообщение, если соответствующее сообщение подтверждения приема не принято.
Для освобождения передающей вычислительной системы от обязанности принятия решения о повторной передаче, которое может оказаться некорректным, разработаны механизмы обнаружения дублирования. Механизмы обнаружения дублирования снижают вероятность обработки принимающей вычислительной системой одного и того же сообщения (или последовательности сообщений) более чем один раз. Для реализации механизмов обнаружения дублирования многие принимающие вычислительные системы сохраняют информацию состояний, связанную с передающими вычислительными системами. Например, приемная вычислительная система может сохранять индикацию (например, в базе данных или в списке) всех предшествующих сообщений (или последовательности сообщений), которые были ранее обработаны (например, идентифицированы посредством IP-адреса передающей вычислительной системы и номером последовательности). Таким образом, если принятое сообщение присутствует в списке (т.е. сообщение было ранее принято), то принятое сообщение игнорируется, и повторная обработка этого сообщения исключается. Приемные вычислительные системы в типовом случае сохраняют информацию о состоянии в течение длительных периодов времени, таких, например, как длительность сессии (потенциально бесконечно длительный период времени), чтобы существенно увеличить шансы обнаружения дублирования.
Ввиду числа вычислительных систем и числа сообщений, обмениваемых по сетям (например, по Интернету), ресурсы, требуемые для реализации обнаружения дублирования, могут быть довольно большими. Например, в любой данный момент времени в сети Интернет миллионы компьютерных систем обмениваются электронными сообщениями. Даже в одной принимающей компьютерной системе (например, некрупном сервере) не является чем-то необычным взаимодействие с тысячами или даже десятками тысяч различных передающих вычислительных систем ежедневно. Таким образом, чтобы реализовать обнаружение дублирования, эти принимающие вычислительные системы могут сохранять в течение длительных периодов времени указания для каждого сообщения, которое было принято от каждой передающей вычислительной системы. Поскольку каждая передающая вычислительная система потенциально может посылать тысячи сообщений в качестве части транзакции, то принимающей вычислительной системе может потребоваться поддерживать состояние для больших количеств (например, миллионов или десятков миллионов) сообщений.
Некоторые другие надежные технологии передачи сообщений используют часы, которые синхронизированы с абсолютным временем. Однако синхронизация часов с абсолютным временем требует протокола синхронизации и высокой связности. В некоторых сетях, таких как, например, Интернет, высокая связность, по существу, невозможна, поскольку компьютерные системы часто соединяются с сетью и отсоединяются от сети. Кроме того, надежные технологии передачи сообщений с использованием часов с абсолютно синхронизированным временем могут быть более дорогостоящими для реализации. Соответственно, надежные технологии передачи сообщений, которые поддерживают состояние, используются более часто и часто требуются, когда невозможно обеспечение согласованности с более строгими операционными параметрами синхронизации с абсолютным временем. Таким образом, многие сетевые компьютерные системы требуются для распределения потенциально значительных ресурсов для поддержания состояния, связанного с информационным обменом с другими компьютерными системами. Поэтому выгодными были бы системы, способы и компьютерные программные продукты, которые облегчают надежную передачу сообщений более ресурсосберегающим способом.
Краткая сущность изобретения
Вышеуказанные проблемы, свойственные предшествующему уровню техники, преодолены с помощью принципов настоящего изобретения, которые направлены на создание способов, систем и компьютерных программных продуктов для надежной передачи сообщений с использованием тактовых сигналов с синхронизированными частотами. В некоторых вариантах осуществления адресат сообщения обрабатывает первую копию сообщения, имеющего идентификатор (ID) сообщения и значение TTL («время жизни»). Адресат сообщения обновляет кэш взаимодействия для указания, что сообщение, имеющее ID сообщения, обработано. Адресат сообщения получает вторую копию сообщения (также имеющую ID сообщения) после обработки первой копии сообщения и перед истечением времени таймера обратного отсчета, основанного на значении TTL. Адресат сообщения отклоняет вторую копию сообщения на основе кэша взаимодействия, указывающего, что сообщение, имеющее ID сообщения, уже обработано.
В других вариантах осуществления адресат сообщения обрабатывает первую копию сообщения, имеющую ID взаимодействия, ID сообщения и значение TTL. Адресат сообщения удаляет и продвигает информацию, связанную с ID взаимодействия, из своего кэша взаимодействия в ответ на истечение последнего времени таймера обратного отсчета, основанного на значении TTL, определенного в обрабатываемых сообщениях. Адресат сообщения принимает вторую копию сообщения после истечения времени таймера обратного отсчета. Адресат сообщения посылает запрос на указание продвижения ID взаимодействия соответствующему источнику сообщения, который имеет частоту тактового сигнала, которая синхронизирована с частотой тактового сигнала адресата сообщения. Адресат сообщения получает указание, что взаимодействие продвинуто в такой степени, что сообщение, имеющее ID сообщения, может игнорироваться. Адресат сообщения игнорирует вторую копию сообщения.
В других вариантах осуществления адресат сообщения получает первую копию сообщения, которая соответствует ID предыдущего экземпляра. Затем адресат сообщения обрабатывает первую копию сообщения в экземпляре процессора сообщения, который был инициализирован, чтобы иметь ID предыдущего экземпляра. Адресат сообщения обнаруживает, что содержимое памяти, используемой компьютерной системой адресата, было непреднамеренно потеряно. Адресат сообщения повторно инициализирует экземпляр процессора сообщения для получения ID обновленного экземпляра, отличающегося от ID прежнего экземпляра. Адресат сообщения получает вторую копию сообщения после повторной инициализации экземпляра процессора сообщения, причем вторая копия сообщения соответствует ID прежнего экземпляра. Адресат сообщения отклоняет вторую копию сообщения, поскольку вторая копия сообщения соответствует ID экземпляра, который отличается от ID обновленного экземпляра.
В дополнительных вариантах осуществления источник сообщения посылает первую копию сообщения, которая имеет ID взаимодействия, ID сообщения и значение TTL, адресату сообщения, который имеет частоту тактового сигнала, которая синхронизирована с частотой тактового сигнала источника сообщения. Источник сообщения посылает вторую копию сообщения, имеющего ID взаимодействия, ID сообщения и обновленное значение TTL, в компьютерную систему адресата вслед за посылкой первой копии сообщения. Обновленное значение TTL вычисляется из значения TTL, определенного в первой копии сообщения, за вычетом времени, прошедшего с момента посылки первой копии сообщения. Источник сообщения обнаруживает, что время, определяемое значением TTL сообщения, истекло. Источник сообщения обновляет кэш взаимодействия для указания, что сообщение больше не требует подтверждения приема.
Эти и другие задачи и признаки настоящего изобретения поясняются в последующем описании и формуле изобретения или могут быть изучены при практической реализации изобретения, как изложено ниже.
Краткое описание чертежей
Для дальнейшего пояснения вышеуказанных и других преимуществ и признаков настоящего изобретения более конкретное описание изобретения представлено ниже со ссылками на его конкретные варианты осуществления, которые показаны на чертежах. Эти чертежи иллюстрируют только типовые варианты осуществления изобретения и поэтому не должны рассматриваться как ограничивающие объем изобретения. Изобретение описано и объяснено ниже с дополнительной конкретизацией и деталями, как показано на чертежах, на которых представлено следующее:
Фиг.1 - пример компьютерной архитектуры, которая обеспечивает надежную передачу сообщений с использованием тактовых сигналов с синхронизированными частотами.
Фиг.2 - первый приведенный для примера поток сообщений, обеспечивающий надежную обработку передачи сообщений, когда ID сообщения поддерживается в кэше взаимодействия в адресате сообщения.
Фиг.3 - второй приведенный для примера поток сообщений, обеспечивающий надежную обработку сообщения, когда ID сообщения перекачивается из кэша взаимодействия в адресате сообщения.
Фиг.4 - третий приведенный для примера поток сообщений, обеспечивающий надежную обработку сообщения, когда адресат сообщения испытывает непреднамеренные потери данных в памяти.
Фиг.5 - подходящая операционная среда, соответствующая принципам настоящего изобретения.
Фиг.6 - примерная блок-схема способа, используемого источником сообщения для надежной доставки сообщения.
Фиг.7 - примерная блок-схема способа, используемого адресатом сообщения для надежной обработки сообщения.
Детальное описание предпочтительных вариантов осуществления изобретения
Описанные выше проблемы, свойственные предшествующему уровню техники, преодолеваются с помощью принципов настоящего изобретения, которое направлено на способы, системы и компьютерные программные продукты для надежной передачи сообщений с использованием тактовых сигналов с синхронизированными частотами. В некоторых вариантах осуществления адресат сообщения обрабатывает первую копию сообщения, имеющего ID сообщения и значение TTL. Адресат сообщения обновляет кэш взаимодействия для указания, что сообщение, имеющее ID сообщения, обработано. Адресат сообщения принимает вторую копию сообщения (также имеющую ID сообщения) вслед за обработкой первой копии сообщения и перед истечением времени таймера обратного отсчета, соответствующего значению TTL. Адресат сообщения отклоняет вторую копию сообщения на основе кэша взаимодействия, указывающего, что сообщение, имеющее ID сообщения, было ранее обработано.
В других вариантах осуществления адресат сообщения обрабатывает первую копию сообщения, имеющую ID взаимодействия, ID сообщения и значение TTL. Адресат сообщения удаляет информацию продвижения, связанную с ID взаимодействия, из кэша взаимодействия в ответ на истечение последнего времени таймера обратного отсчета, соответствующего значению TTL, определенному в обработанных сообщениях. Адресат сообщения принимает вторую копию сообщения вслед за истечением времени таймера обратного отсчета. Адресат сообщения посылает запрос на указание продвижения ID взаимодействия соответствующему источнику сообщения, который имеет частоту тактового сигнала, синхронизированную с частотой тактового сигнала адресата сообщения. Адресат сообщения принимает указание на то, что взаимодействие продвинулось настолько, что сообщение, имеющее ID сообщения, может игнорироваться. Адресат сообщения игнорирует вторую копию сообщения.
В других вариантах осуществления адресат сообщения принимает первую копию сообщения, которая соответствует ID предыдущего экземпляра. Затем адресат сообщения обрабатывает первую копию сообщения экземпляром процессора сообщений, который был инициализирован для получения ID предыдущего экземпляра. Адресат сообщения обнаруживает, что содержание памяти, используемой компьютерной системой адресата, было непреднамеренно потеряно. Адресат сообщения повторно инициализирует экземпляр процессора сообщений для получения ID обновленного экземпляра, отличающегося от ID предыдущего экземпляра. Адресат сообщения принимает вторую копию сообщения вслед за повторной инициализацией экземпляра процессора сообщения, причем вторая копия сообщения соответствует ID предыдущего экземпляра. Адресат сообщения отклоняет вторую копию сообщения, поскольку вторая копия сообщения соответствует ID экземпляра, который отличается от ID обновленного экземпляра.
В других вариантах осуществления источник сообщения посылает первую копию сообщения, которая имеет ID взаимодействия, ID сообщения и значение TTL, адресату сообщения, который имеет частоту такового сигнала, которая синхронизирована с частотой тактового сигнала источника сообщения. Источник сообщения посылает вторую копию сообщения, которая имеет ID взаимодействия, ID сообщения и обновленное значение TTL, в компьютерную систему адресата вслед за посылкой первой копии сообщения. Обновленное значение TTL вычисляется из значения TTL, определенного в первой копии сообщения, путем вычитания времени, прошедшего от момента времени посылки первой копии сообщения. Источник сообщения обнаруживает, что время, соответствующее значению TTL сообщения, истекло. Источник сообщения обновляет кэш взаимодействия для указания, что сообщение больше не требует подтверждения приема.
Варианты осуществления, в рамках объема изобретения, включают в себя машиночитаемые носители для хранения исполняемых компьютером команд или структур данных. Такие машиночитаемые носители могут представлять собой любые доступные носители, доступ к которым может осуществляться универсальной или специализированной компьютерной системой. К примеру, но не в качестве ограничения, машиночитаемые носители могут содержать физические носители для хранения информации, такие как оперативная память (RAM, ОЗУ), постоянная память (ROM, ПЗУ), электронно-стираемая программируемая постоянная память (EEPROM, ЭСППЗУ), ПЗУ на компакт-дисках (CD-ROM) или иные устройства памяти на оптических дисках, устройства памяти на магнитных дисках или иные магнитные устройства памяти, или любые иные носители, которые могут быть использованы для хранения желательного средства программного кода в форме исполняемых компьютером команд, машиночитаемых команд или структур данных, и к которым может получать доступ универсальная или специализированная компьютерная система.
В этом описании в последующей формуле изобретения термин «сеть» определяется как один или более каналов передачи данных, которые обеспечивают возможность транспортировки электронных данных между компьютерными системами и/или модулями. Когда информация передается или обеспечивается по сети или по другому коммуникационному соединению (проводному, беспроводному или комбинации проводного или беспроводного соединений) на компьютерную систему, соединение надлежащим образом рассматривается как машиночитаемый носитель (среда передачи). Таким образом, любое соединение надлежащим образом определяется как машиночитаемый носитель. Комбинации вышеуказанного также должны быть включены в объем машиночитаемых носителей. Исполняемые компьютером команды содержат, например, команды и данные, которые обуславливают исполнение универсальной компьютерной системой или специализированной компьютерной системой некоторой функции или группы функций. Исполняемые компьютером команды могут быть, например, командами в двоичном формате, в промежуточном формате, например, на языке ассемблера или даже в форме исходного кода.
В этом описании и в последующей формуле изобретения термин «компьютерная система» определен как один или более модулей программного обеспечения, один или более модулей аппаратных средств или как комбинации указанного, которые работают совместно для исполнения операций над электронными данными. Например, определение компьютерной системы включает в себя компоненты аппаратных средств персонального компьютера, а также модули программного обеспечения, такие как операционная система персонального компьютера. Физическая конфигурация модулей не важна. Компьютерная система может включать в себя один или более компьютеров, связанных через сеть. Аналогичным образом, компьютерная система может включать в себя одиночное физическое устройство (такое как мобильный телефон или PDA), где внутренние модули (такие как память и процессор) работают вместе для выполнения операций над электронными данными.
Специалистам в данной области техники должно быть понятно, что изобретение может быть реализовано в сетевых вычислительных средах с множеством типов конфигураций компьютерных систем, включая персональные компьютеры, портативные компьютеры, карманные устройства, мультипроцессорные системы, микропроцессорную или программируемую бытовую электронику, сетевые РС, миникомпьютеры, компьютеры-мэйнфреймы, мобильные телефоны, PDA, пейджеры и т.п. Изобретение также может быть реализовано в средах распределенных систем, где локальные и удаленные компьютерные системы, которые связаны (проводными каналами передачи данных, беспроводными каналами передачи данных или комбинацией проводных или беспроводных каналов передачи данных) через сеть, выполняют задачи. В среде распределенной системы программные модули могут находиться как в локальных, так и в удаленных устройствах памяти.
В этом описании и в последующей формуле изобретения термин «источник сообщения» определен как инициатор надежного обмена при передаче сообщений. Источник сообщения может представлять как приложение, которое создало сообщение, подлежащее надежной доставке, так и инфраструктуру, которая управляет надежным обменом. В модели обработки протокола SOAP (Простой протокол доступа к объектам) источником является первоначальный отправитель.
В этом описании и в последующей формуле изобретения термин «адресат сообщения» определен как цель надежного обмена при передаче сообщений. Адресат сообщения может представлять как приложение, которое использует сообщение, так и инфраструктуру, которая управляет надежным обменом. В модели обработки протокола SOAP адресатом является конечный получатель.
В этом описании и в последующей формуле изобретения термин «источник сообщения» и «адресат сообщения» имеют «синхронизированную частоту тактового сигнала», когда частота тактовых импульсов источника сообщения и адресата сообщения находится в пределах определенного верхнего предела для допустимого ухода частот.
Уход (дрейф) может быть определен различными способами. По отношению к всемирному универсальному времени дрейф может быть определен следующим образом:
Дрейф = |(S2 - S1) - (D2 - D1)|/(C2 - C1),
а верхний предел может быть определен как
верхний предел = Min (задержка одностороннего распространения) /Max (TTL).
Здесь S1 и D1 являются значениями тактового сигнала в источнике и в адресате, соответственно, в случае, когда универсальное время имеет значение C1, и S2, и D2 являются значениями тактового сигнала в источнике и в адресате, соответственно, в следующем случае, когда универсальное время имеет значение C2. Дрейф является допустимым (то есть тактовые сигналы источника и адресата могут рассматриваться как имеющие синхронизированные частоты), когда Дрейф < Верхнего предела.
Задержка одностороннего распространения измеряется от адресата к источнику (например, определяется задержкой сообщения “REQACKACK”, инициированного адресатом для неизвестного источника). Значение TTL представляет собой TTL, определенное для сообщения, например, как некоторое целое кратное задержки двустороннего распространения. Таким образом, большие значения TTL для конкретного сообщения приводят в результате к более жестким требованиям к скорости дрейфа тактовых сигналов источника и адресата. С другой стороны, меньшие значения TTL для конкретного сообщения приводят в результате к менее жестким требованиям к скорости дрейфа тактовых сигналов источника и адресата.
Относительно всемирного универсального времени дрейф, с точки зрения источника, может быть выражен следующим образом:
Дрейф Источника = (D2 - D1)/(S2 - S1).
Дрейф, с точки зрения адресата, может быть выражен следующим образом:
Дрейф Адресата = (S2 - S1)/(D2 - D1),
И верхний предел может быть выражен следующим образом:
Верхний Предел = Min (задержка одностороннего распространения) /Max (TTL).
Вышеуказанное предполагает, что оба тактовых сигнала увеличивают свою частоту. То есть S2>S1 и D2>D1. В некоторых случаях, например когда тактовый сигнал адресата увеличивает свою частоту, может иметь место соотношение, когда Дрейф Источника >1 и Дрейф Адресата <1. Дрейф допустим (то есть тактовые сигналы источника и адресата могут рассматриваться как имеющие синхронизированные частоты), когда Дрейф Адресата < Верхнего Предела. Задержка одностороннего распространения измеряется от адресата к источнику. Значение TTL представляет собой величину TTL, определенную по сообщению, например, как некоторое кратное значение задержки двустороннего распространения.
Понятно, что варианты осуществления изобретения не требуют, чтобы тактовые сигналы были синхронизированы с абсолютным временем.
Архитектура передачи сообщений
На фиг.1 представлен пример компьютерной архитектуры 100, которая обеспечивает надежную передачу сообщений с использованием тактовых сигналов с синхронизированными частотами. Как показано в компьютерной архитектуре 100, компьютерные системы 102, 103, 104, 106 и 107 соединены с сетью 101. Сеть 101 может представлять собой локальную сеть (LAN), сеть широкого охвата (WAN) или даже Интернет. Компьютерные системы, соединенные с сетью 101, могут принимать данные от других компьютерных систем и посылать данные к другим компьютерным системам, соединенным с компьютерной архитектурой 101. Соответственно, компьютерные системы 102, 103, 104, 106 и 107, а также другие подсоединенные компьютерные системы, могут обмениваться по сети 101 данными, связанными с сообщениями (например, дейтаграммами IP-протокола и других протоколов более высокого уровня, таких как Протокол управления передачей (TCP), Протокол пересылки гипертекста (HTTP), Простой протокол пересылки почты (SMTP) и т.д.).
Компьютерные системы 102, 103, 104, 106 и 107 включают в себя соответствующие кэши 122, 123, 124, 126 и 127 взаимодействия, соответственно. Каждый из кэшей 122, 123, 124, 126 и 127 взаимодействия может поддерживать списки идентификаторов (ID) взаимодействия, соответствующих последовательностям взаимодействия с другими компьютерными системами и ID сообщений, которые обрабатывались для каждой последовательности взаимодействия. Каждый из кэшей 122, 123, 124, 126 и 127 взаимодействия также может поддерживать значения «времени жизни» (TTL) для каждого сообщения. Значение TTL может указывать на длительность времени, в течение которого источник пытается доставить сообщение адресату. Если время, соответствующее значению TTL, истекает в источнике, то источник может указать, что сообщение больше не требует подтверждения приема (например, в результате того, что источник рассматривает его как потерянное). Если время, соответствующее значению TTL, истекает в адресате, то адресат может затем удалить соответствующий ID сообщения и/или ID взаимодействия из кэша взаимодействия (при этом освобождая ресурсы системы).
Компьютерные системы 102, 103, 104, 106 и 107 включают в себя соответствующие часы (источники тактовых сигналов) 112, 113, 114, 116 и 117, соответственно. Каждые из часов 112, 113, 114, 116 и 117 могут иметь синхронизированные частоты. То есть часы идут во времени, по существу, с одной и той же частотой. Например, может иметься общая согласованность для часов 112, 113, 114, 116 и 117 в определении секунд, минут, часов, дней, месяцев, лет и т.д. Таким образом, даже если абсолютное время множества часов не синхронизированы, относительные изменения во времени между множеством часов могут быть согласованными.
Соответственно, когда, спустя некоторый период времени, первые часы уходят вперед на несколько минут, будет иметь место весьма высокая вероятность того, что вторые часы (имеющие частоту, синхронизированную с первыми часами) уйдут вперед на то же самое число минут. Например, может быть так, что первые часы имеют абсолютное время 5:05 РМ, а вторые часы имеют абсолютное время 5:07 РМ. Если, спустя шесть минут первые часы покажут время 5:11 РМ, то будет весьма вероятно, что вторые часы покажут время 5:13 РМ.
Кроме того, понятно, что может иметь место некоторый дрейф в частотах часов относительно друг друга, и часы все равно будут рассматриваться как часы с синхронизированными частотами. Например, особенно предпочтительны варианты осуществления изобретения, в которых частоты дрейфа между часами во взаимодействующих компьютерных системах меньше, чем задержка двустороннего распространения между взаимодействующими компьютерными системами.
В некоторых вариантах осуществления адресат может забыть, что он обрабатывал некоторое сообщение (например, в результате удаления данных взаимодействия сообщения из памяти) после того, как источник принял решение, что сообщение (А) было обработано или (В) было потеряно. На практике событие (А) может возникнуть, когда адресат принимает заголовок АСКАСК (от источника), содержащий соответствующий ID сообщения. На практике событие (В) может возникнуть, когда время, соответствующее значению TTL, истекло. То есть адресат знает, что источник рассматривает сообщение как потерянное, если его время, соответствующее значению TTL, истекло. В некоторых вариантах осуществления сообщения квитируются спустя минимальное время задержки двустороннего распространения (путем посылки сообщения вслед за приемом подтверждения). Таким образом, значение TTL может быть установлено на величину, превышающую задержку двустороннего распространения. На практике значение TTL устанавливается на некоторое кратное значение задержки двустороннего распространения для поддержки некоторых повторных передач (или на бесконечную величину для обеспечения точной доставки).
Может иметь место ситуация, когда компьютерная система 107 включает в себя сервер (например, Web-сервер), который принимает электронные сообщения от большого количества клиентов (например, Web-браузеров), включая клиентов на компьютерных системах 102, 103, 104 и 106. Соответственно, компьютерная система 107 может выполнить процесс обработки сообщения (например, экземпляр 137 процесса обработки сообщения), который осуществляет обработку сообщений, принятых от любого из клиентов.
Алгоритм источника сообщений
Фиг.6 иллюстрирует примерную блок-схему способа 600 для источника сообщений, обеспечивающего надежную доставку сообщения. Способ 600 включает в себя действие добавления ID взаимодействия, номера последовательности и значения TTL к сообщению. Например, компьютерная система 106 может добавить ID 152 взаимодействия, отсчет 153 и значение 154 TTL к сообщению 151. Соответственно, сообщение будет иметь формат Msg(ID, N, TTL, Data), в котором данные подкрепляются информацией отслеживания, используемой инфраструктурой надежной передачи сообщений.
Идентификатор ID уникальным образом идентифицирует взаимодействие между источником сообщения и адресатом сообщения. Номер N сдвига сообщения может представлять собой целочисленное значение, идентифицирующее сдвиг (например, порядковый ранг) сообщения во взаимодействии между источником сообщения и адресатом сообщения. Совместно ID взаимодействия и номер N сдвига сообщения могут уникальным образом идентифицировать надежное сообщение. Значение TTL идентифицирует длительность, в течение которой источник сообщения будет пытаться доставить сообщение надежным образом.
Способ 600 включает в себя действие запуска таймера обратного отсчета с длительностью, равной значению TTL (действие 602). Например, компьютерная система 106 может начать обратный отсчет с длительностью значения 154 TTL. Способ 600 включает в себя действие передачи сообщения. Например, компьютерная система 106 (источник сообщения) может передать сообщение 151 к компьютерной системе 107 (адресату сообщения).
Может иметь место ситуация, когда источник сообщения устанавливает значение TTL на величину, равную кратному значению задержки двустороннего распространения между источником сообщения и адресатом сообщения. В течение определенного интервала (например, равного задержке двустороннего распространения) источник сообщения может попытаться повторно передать сообщение (например, сообщение 151). Например, если задержка двустороннего распространения между компьютерными системами 106 и 107 равна 10 мс, то значение 154 TTL может быть установлено на 60 мс. Установка значения 154 TTL на 60 мс позволила бы осуществить, по меньшей мере, шесть повторных передач (в зависимости от конкретного интервала).
Способ 600 включает в себя действие обнаружения истечения интервала повторной передачи (действие 604). Например, компьютерная система 106 может обнаружить истечение интервала повторной передачи, соответствующего сообщению 151.
Способ 600 включает в себя действие определения того, было ли квитировано сообщение (блок 605 принятия решения). Если сообщение было квитировано («да» в блоке 605 принятия решения), то в способе 600 выполняется действие 607. Например, компьютерная система 106 может принять сообщение подтверждения АСК 161, указывающее ID 152 взаимодействия и отсчет 153, от компьютерной системы 107. Соответственно, подтверждение приема может иметь форму ACK(ID,N), где подтверждение указывает, что сообщение N (или одно или более диапазонов сдвига сообщения, представленных посредством N, например, (1-6, 10-14, 16)) взаимодействия, идентифицированное ID взаимодействия, поступило в адресат сообщения. Когда источник сообщения принимает подтверждение приема ACK, источник сообщения может обновить соответствующий кэш взаимодействия (например, кэш 126 взаимодействия) для указания на то, что сообщение (например, сообщение 151) больше не требует подтверждения приема.
С другой стороны, если сообщение не было квитировано («нет» в блоке 605 принятия решения), то в способе 600 принимается решение в блоке 606 принятия решения. Таким образом, способ 600 может включать в себя определение, истекло ли время обратного отсчета таймера (блок 606 принятия решения). Например, компьютерная система 106 может определить, истекло ли время обратного отсчета таймера, основанное на значении 154 TTL. Если время обратного отсчета таймера истекло («да» в блоке 606 принятия решения), то в способе 600 выполняется действие 607. С другой стороны, если время обратного отсчета таймера не истекло («нет» в блоке 606 принятия решения), то в способе 600 выполняется действие 608.
Способ 600 включает в себя действие повторного вычисления значения TTL и времени обратного отсчета таймера (действие 608). Например, компьютерная система 106 может повторно вычислить значение TTL и время обратного отсчета таймера после обнаружения интервала повторной передачи. Таким образом, если исходное значение TTL было равно 60 мс, а интервал повторной передачи составлял 10 мс, то новое значение TTL может быть установлено на 50 мс перед сообщением 151 повторной передачи.
Способ 600 включает в себя действие указания, что сообщение больше не требует подтверждения приема (действие 607). Например, компьютерная система 106 может обновить кэш 126 взаимодействия для указания, что сообщение 151 больше не требует подтверждения приема. Таким образом, компьютерная система 106 прекращает любые повторные передачи сообщения 151 как после приема квитирования от компьютерной системы 107, так и по истечении времени таймера обратного отсчета.
Время от времени или в ответ на запрос из адресата сообщения источник сообщения может передать сообщение Квитирования-Квитирования (АСКАСК), чтобы указать адресату сообщения, что источник сообщения больше не требует квитирования сообщения. Например, компьютерная система 106 может послать сообщение АСКАСК 171, включающее в себя ID 152 взаимодействия и отсчет 153, в компьютерную систему 107. Соответственно, Квитирование-Квитирование может быть в форме сообщения ACKACK(ID, N), где Квитирование-Квитирование указывает, что источник сообщения больше не требует квитирования сообщения N (или одного или более диапазонов сдвига сообщения, представленных посредством N, например, (1-3, 5, 8-12)) для взаимодействия, идентифицированного идентификатором ID. Сообщение ACKACK может также включать в себя ID экземпляра, который идентифицирует экземпляр процесса сообщения в адресате сообщения. Например, сообщение ACKACK 171 включает в себя ID 172 экземпляра, который соответствует последнему экземпляру 137 процесса сообщения, о котором была уведомлена компьютерная система 106.
Запрос из адресата сообщения может представлять собой сообщение Квитирования Квитирования Запроса (не показано на фиг. 1), которое указывает, что адресат сообщения нуждается в продолжении взаимодействия. Соответственно сообщение Квитирования Квитирования Запроса может быть в форме REQACKACK(ID), где сообщение Квитирования Квитирования Запроса указывает, что адресат сообщения нуждается в продолжении взаимодействия, идентифицированного идентификатором ID, перед обработкой. Периодически и после приема REQACKACK(ID) источник может послать сообщение ACKACK(ID, N) адресату.
Алгоритм адресата сообщения
На фиг.7 представлена примерная блок-схема способа 700 для адресата, обеспечивающего надежную доставку сообщения. Способ 700 включает в себя действие приема сообщения. Например, компьютерная система 107 может принять сообщение 151 (действие 701). Способ 700 включает в себя определение того, согласуется ли ID принятого экземпляра, если он имеется, с ID текущего экземпляра. Например, компьютерная система 107 может определить, согласуется ли ID 172 экземпляра с ID текущего экземпляра для экземпляра 137 процесса сообщения. Компьютерная система 106 может факультативно включать ID 172 экземпляра в сообщение 151 (не показано). Однако может потребоваться, чтобы компьютерная система 106 включила его в сообщение АСКАСК, которое она посылает в ответ на REQACKACK. Например, после приема сообщения 151 компьютерная система 107 может послать сообщение REQACKACK(ID 152 взаимодействия) в компьютерную систему 106. Компьютерная система 106 может ответить сообщением ACKACK(ID 152 взаимодействия, номер сдвига сообщения (который может отличаться от отсчета 153), ID 172 экземпляра)).
Если ID принятого экземпляра не согласуется с ID текущего экземпляра («нет» в блоке 702 принятия решения), то способ 700 выполняет действие 708. С другой стороны, если ID принятого экземпляра согласуется с ID текущего экземпляра («да» в блоке 702 принятия решения), то способ 700 выполняет принятие решения в блоке 703 принятия решения.
Способ 700 включает в себя определение того, требует ли сообщение квитирования (блок 703 принятия решения). Например, компьютерная система 107 может определить, требует ли сообщение 151 квитирования. Компьютерная система 107 может проверить кэш 127 взаимодействия для определения того, было ли сообщение АСКАСК ранее принято для сообщения 151. Если сообщение АСКАСК было ранее принято, то сообщение 151 больше не требует подтверждения. Может оказаться, что кэш 127 взаимодействия не включает в себя взаимодействия, идентифицированного ID 151 взаимодействия. Тогда компьютерная система 107 может послать REQACKACK(ID 151 взаимодействия) в компьютерную систему 106. В ответ компьютерная система может получить сообщение АСКАСК от компьютерной системы 106. Компьютерная система 107 может обновить кэш 127 взаимодействия информацией продвижения (например, номером сдвига сообщения и ID экземпляра) в АСАКАСК.
Способ 700 включает в себя действие посылки квитирования (действие 704). Например, компьютерная система 107 может послать сообщение АСК 161, включающее в себя ID 152 взаимодействия и отсчет 153, в компьютерную систему 106 для подтверждения приема сообщения 151.
Способ 700 также включает в себя определение того, следует ли обрабатывать сообщение. Например, компьютерная система 107 может определить, следует ли обрабатывать сообщение 151. Если сообщение 151 не следует обрабатывать («нет» в блоке 705 принятия решения), то способ 700 выполняет действие 708. С другой стороны, если сообщение следует обрабатывать («да» в блоке 705 принятия решения), то способ 700 выполняет действие 706.
Способ 700 включает в себя действие инициирования таймера обратного отсчета (действие 706). Например, после приема сообщения 151 компьютерная система 107 может инициировать таймер обратного отсчета, значение которого основано на значении 154 TTL. Компьютерная система 107 должна поддерживать ID 152 взаимодействия и отсчет 153 до истечения времени таймера или приема соответствующего сообщения АСКАСК. Способ 700 включает в себя действие обработки сообщения (действие 707). Например, компьютерная система 107 может доставить сообщение 151 в экземпляр 137 процесса сообщения, который, в свою очередь, обрабатывает сообщение.
Способ 700 включает себя действие обновления кэша взаимодействия (действие 709). Например, компьютерная система 107 может обновить данные кэша 127 взаимодействия. Кэш взаимодействия может быть обновлен вслед за приемом сообщения АСКАСК (например, АСКАСК 171) или вслед за истечением времени таймера обратного отсчета (значение которого основано, например, на значении 154 TTL). Таким образом, компьютерная система 107 может периодически очищать кэш 127 взаимодействия от взаимодействий, для которых истекло время таймеров обратного отсчета и ID взаимодействия которых не используются в течение определенного периода времени.
Способ 700 включает себя действие игнорирования сообщения (этап 708). Например, компьютерная система 107 может игнорировать сообщение 151. Сообщение может игнорироваться, если ID экземпляров не совпадают, для сообщения ранее было принято АСКАСК, сообщение было ранее обработано или для сообщения истекло время таймера обратного отсчета.
Взаимодействие источника сообщения и адресата сообщения
Способ 600 (с позиции источника сообщения) и способ 700 (с позиции адресата сообщения) могут взаимодействовать для обеспечения надежной передачи сообщений. В некоторых вариантах осуществления перед обработкой сообщения исходной последовательности устанавливаются различные предварительные условия. Например, источник сообщения получает ссылку на конечный пункт, которая уникальным образом определяет экземпляр конечного пункта адресата сообщения (например, экземпляр 137 обработки сообщения), и корреляции между сообщениями, адресованными экземпляру конечного пункта адресата сообщения, которые имеют смысл. Адресат может переустанавливать ID экземпляра (например, в момент начальной загрузки без изменения состояния) каждый раз, когда инициализируется экземпляр конечного пункта адресата сообщения. Кроме того, источник сообщения может иметь информацию о стратегиях адресата сообщения (если они существуют) и может формулировать сообщение, которое придерживается определенных стратегий (например, обеспечивается посредством WS-Metadata Exchange (обмен метаданными)). Кроме того, если требуется защищенный обмен сообщениями, источник сообщения и адресат сообщения могут устанавливать защищенный контекст (например, обеспечивается посредством WS-SecureConversation (защищенный диалог)).
Другие механизмы для защиты информации последовательности надежной передачи сообщений также возможны, даже если адресат периодически удаляет информацию последовательности надежной передачи сообщений из памяти. Например, адресат сообщения может зашифровать ключ сессии (или совместно используемый ключ) секретным ключом (например, парой открытого/секретного ключей) и послать зашифрованный ключ сессии (например, в маркере доступа) к источнику сообщения. Источник сообщения принимает маркер и может сохранить маркер для последующего использования. Источник сообщения также может дешифрировать зашифрованный ключ сессии с использованием соответствующего открытого ключа (или пары открытого/секретного ключей) для получения расшифрованного ключа сессии. Последующие сообщения, включенные во взаимодействие, могут быть защищены с использованием ключа сессии.
Время от времени адресат сообщения может принимать сообщение для взаимодействия, о котором адресат сообщения мог забыть (т.е. ID взаимодействия и т.д., которые были удалены из соответствующего кэша взаимодействия). В ответ адресат сообщения может послать сообщение REQACKACK источнику сообщения с запросом информации отслеживания для взаимодействия. В ответ на сообщение REQACKACK (и, возможно, с включением в АСКАСК) источник сообщения может послать ранее принятый маркер для взаимодействия адресату сообщения. Адресат сообщения может дешифрировать маркер (он знает свою собственную пару открытого/секретного ключей) для обнаружения незашифрованной сессии или совместно используемого ключа, соответствующего взаимодействию. Последующие сообщения, включенные во взаимодействие, могут быть защищены с использованием ключа сессии.
Если источник сообщения не может обеспечить маркер (и, следовательно, не может обеспечить соответствующую сессию или совместно используемый ключ) для взаимодействия, то адресат сообщения начинает новое взаимодействие с новым ID взаимодействия и с ID сообщения, соответствующим 1. Адресат сообщения может затем послать новый маркер источнику сообщения для установления нового контекста защиты для нового взаимодействия. Соответственно, варианты осуществления настоящего изобретения могут быть использованы для снижения вероятности и, возможно, предотвращения возможности пиратства по отношению к надежной передаче сообщений.
Кроме того, могут быть установлены различные инварианты протоколов для гарантирования надежной передачи сообщений. Например, источник сообщений может инициализировать номер сдвига сообщения (N) на 1 и увеличивать номер сдвига сообщения на 1 для каждого последующего сообщения во взаимодействии. Кроме того, квитирование может включать в себя диапазон или диапазоны номеров последовательности для каждого сообщения, либо успешно принятого адресатом сообщения, либо определенного в сообщении АСКАСК, и исключить номера сдвигов сообщений для сообщений, которые еще не приняты. Дополнительно, АСКАСК, выданные из источника сообщения, могут включать в себя диапазон или диапазоны квитирований для номеров сдвигов сообщений по каждому сообщению, для которых было принято сообщение АСК, или время TTL которых истекло. Если время TTL истекло, то адресат знает, что источник рассматривает сообщение (или диапазон сообщений) как потерянное. Соответственно, адресат может закрыть квитирование для диапазона сообщений в отношении этого сообщения (или диапазона сообщений).
Соответственно, доставка максимально однократно по отношению к экземпляру обработки сообщения гарантируется, когда множество копий сообщения принимается во множестве различных условий. Например, доставка максимально однократно гарантируется, когда ID сообщения и соответствующее определенное взаимодействие поддерживаются в кэше взаимодействия в адресате сообщения (перед или после истечения времени TTL), когда ID сообщения (и, возможно, соответственно определенное взаимодействие) был очищен из кэша взаимодействия в адресате сообщения, и когда в адресате сообщения произошла непреднамеренная потеря памяти.
Когда сообщение принимается адресатом сообщения, адресат сообщения определяет, включат ли в себя принятое сообщение ID экземпляра. Если принятое сообщение не включат в себя ID экземпляра, и ID взаимодействия, определенный сообщением, не присутствует в кэше взаимодействия, то адресат сообщения посылает сообщение REQACKACK источнику сообщения. Источник сообщения отвечает сообщением АСКАСК, которое (на основе установленных инвариантов протокола) включает в себя ID экземпляра. ID принятого экземпляра (включенный либо в сообщение, либо в АСКАСК) является ID экземпляра, который был указан источнику сообщения как ID текущего экземпляра для соответствующего экземпляра процесса сообщения в некоторое предыдущее время (на основе установленных предварительных условий). Источник сообщения сравнивает ID принятого экземпляра с ID текущего экземпляра соответствующего процессора сообщения. Если ID принятого экземпляра и ID текущего экземпляра не совпадают (потенциально указывая на то, что у адресата сообщения произошла непреднамеренная потеря памяти в процессе конкретного взаимодействия), сообщение отклоняется, и конкретное взаимодействие оказывается безуспешным.
С другой стороны, если ID принятого экземпляра и ID текущего экземпляра совпадают (и, следовательно, адресат сообщения поддерживал кэш взаимодействия в течение конкретного взаимодействия), то проверяется другая отслеживаемая информация из принятого сообщения. Адресат сообщения проверяет соответствующий кэш взаимодействия для определения того, были ли обработаны ранее ID сообщения и ID взаимодействия для принятого сообщения. Поскольку адресат сообщения может периодически очищать соответствующий кэш взаимодействия (но не обязательно непосредственно после того, как истечет время TTL), кэш взаимодействия может поддерживать (по меньшей мере, в течение некоторого интервала времени) отслеживаемую информацию даже для прекративших существование сообщений. Таким образом, соответствующий кэш взаимодействия может указать, что сообщение ранее было обработано в результате доставки принятого сообщения в экземпляр процесса сообщения. Если соответствующий кэш взаимодействия указывает, что принятое сообщение было ранее обработано, то принятое сообщение игнорируется.
Однако может иметь место ситуация, когда кэш взаимодействия не содержит отслеживаемой информации для сообщения. Если соответствующий кэш взаимодействия не содержит отслеживаемой информации для сообщения, то адресат сообщения посылает сообщение REQACKACK источнику сообщения. Например, может иметь место ситуация, когда принятое сообщение ранее было обработано адресатом. Если кэш взаимодействия адресата не содержит отслеживаемой информации для ID взаимодействия, определенного принятым сообщением, то время таймера обратного отсчета должно истечь для всех сообщений, которые являются частью конкретного взаимодействия в адресате сообщения. В противном случае, обработка сообщения адресата не очистила бы конкретное взаимодействие из кэша взаимодействия. Это означает, что время таймера обратного отсчета сообщения должно также истечь в источнике сообщения, поскольку источник сообщения должен запустить таймер обратного отсчета перед передачей сообщения, и источник сообщения, и адресат сообщения имеют синхронизированные тактовые частоты.
В источнике сообщения либо при приеме предыдущего АСК, либо при истечении времени таймера обратного отсчета источник сообщения указывает (в возвращенном АСКАСК), что квитирование сообщения больше не требуется (даже если сообщение было послано последний раз после истечения времени таймера обратного отсчета). Адресат сообщения принимает АСКАСК и сравнивает отслеживаемую информацию из АСКАСК с отслеживаемой информацией, включенной в сообщение. Поскольку АСКАСК указывает, что квитирование сообщения больше не требуется, адресат сообщения игнорирует сообщение.
На фиг.2 показан первый примерный поток 200 сообщений, который обеспечивает надежную передачу сообщений, когда ID сообщения поддерживается в кэше взаимодействия в адресате сообщения. Поток 200 сообщений обеспечивает доставку максимально однократно, когда вторая копия сообщения принимается ранее, чем истечет время TTL.
Как изображено для потока 200 сообщений, источник 201 и адресат 202 обмениваются электронными сообщениями. Может иметь место ситуация, когда источник 201 представляет собой одну из компьютерных систем 102, 103, 104 и 106, а адресат 202 представляет собой компьютерную систему 107. Источник 201 и адресат 202 имеют часы, которые отсчитывают время с синхронизированной тактовой частотой 203. Таким образом, имеется очень высокая вероятность того, что относительные изменения в значениях времени в источнике 201 и адресате 202 будут согласованными. Например, если спустя некоторый период времени часы в источнике 201 отсчитают время 10 минут и 12 секунд, то с весьма высокой вероятностью соответствующие часы в адресате 202 также отсчитают время 10 минут и 12 секунд спустя тот же период времени.
Поток 200 сообщений включает в себя действие источника 201 сообщения (например, Web-браузера), посылающего сообщение 204. Сообщение 204 включает в себя ID 214 взаимодействия, ID 224 сообщения, значение 234 TTL и данные 244. ID 214 взаимодействия идентифицирует сообщение 204 как соответствующее конкретному взаимодействию между источником 201 сообщения и адресатом 202 сообщения. ID 224 сообщения идентифицирует положение сообщения 204 в последовательности сообщений, обмен которыми производится в качестве части конкретного взаимодействия (соответственно ID 214 взаимодействия). Данные 244 представляют собой часть данных (например, данные приложения), которые должны передаваться к модулю (например, экземпляр 236 процессора сообщения) в адресате 202. Значение 234 TTL указывает интервал времени, в течение которого источник 201 будет пытаться доставить сообщение 204.
На основе значения 234 TTL источник 201 сообщения может установить таймер 239 на длительность 241 таймера.
Адресат 202 сообщения (например, Web-сервер) может принять сообщение 204. После приема сообщения 204 адресат 202 сообщения может доставить данные 244 в экземпляр 236 процессора сообщения, который, в свою очередь, обрабатывает данные 244. Кэш 237 взаимодействия может быть обновлен для указания, что сообщение 204 было обработано. Например, кэш 237 взаимодействия может быть обновлен для указания, что сообщение, имеющее ID 224 сообщения, было обработано для взаимодействия, идентифицированного ID 214 взаимодействия. На основе значения 234 TTL таймер 249 может установить длительность 251 времени таймера. Длительность 251 времени таймера истекает в некоторый момент, спустя длительность 241 времени таймера (например, по меньшей мере, к моменту задержки сообщения для сообщения 204).
Адресат 202 сообщения может послать сообщение 208 АСК, включающее в себя ID 214 взаимодействия, ID 224 сообщения, чтобы указать, что сообщение 204 было обработано. Однако источник 201 сообщения может не принять сообщение 208 АСК (например, ввиду ошибок связи в сети, которая соединяет источник 201 сообщения и адресат 203 сообщения). Таким образом, если интервал повторной передачи истекает, то источник 201 сообщения может передать дополнительную копию сообщения 204 в адресат 202 сообщения. Как указано, значение 235 TTL, источник 201 сообщения может повторно вычислить значение TTL для сообщения 204 как время, оставшееся до момента истечения времени таймера 239.
Адресат 202 может принять дополнительную копию сообщения 204 вслед за обработкой более ранней копии сообщения 204. Адресат 202 сообщения может идентифицировать дополнительную копию сообщения из ID 214 взаимодействия и ID 224 сообщения. Адресат 202 сообщения может проверить кэш 237 взаимодействия и определить, что сообщение, имеющее ID 224 сообщения и соответствующее определенному взаимодействию, идентифицированному ID 214 взаимодействия (т.е. сообщение 204), было ранее обработано. Соответственно, адресат 202 сообщения может игнорировать дополнительную копию сообщения 204 на основе кэша 237 взаимодействия, указывающего, что сообщение, имеющее ID 224 сообщения, было ранее обработано.
Поток 200 сообщений может также гарантировать доставку максимально однократно, если вторая копия сообщения прията после того, как время TTL истекло. Например, значение 234 TTL может, альтернативно, вызвать установку таймера 239 на длительность 242 времени таймера и вызвать установку таймера 249 на длительность 252 времени таймера. Длительность 252 времени таймера истекает спустя некоторое время после длительности 242 времени таймера (например, по меньшей мере, к моменту времени задержки сообщения 204).
Таким образом, как показано на фиг.2, адресат 202 сообщения может принять дополнительную копию сообщения 204 после того, как длительность 252 времени таймера истекла. Однако адресат 202 сообщения может ожидать некоторое время, прежде чем он очистит ID 214 взаимодействия и ID 224 сообщения из памяти. Таким образом, когда принята дополнительная копия сообщения 204, кэш 237 взаимодействия все еще включает в себя ID 214 взаимодействия и ID 224 сообщения, даже если длительность 252 сообщения истекла. Таким образом, адресат 202 сообщения может отклонить дополнительную копию сообщения 204 на основе кэша 237 взаимодействия, указывающего на то, что сообщение, имеющее ID 224 сообщения, уже было ранее обработано. Соответственно максимально однократная доставка гарантируется, когда кэш взаимодействия содержит ID сообщения.
На фиг.3 показан второй примерный поток сообщений, который обеспечивает надежную обработку сообщения, когда ID сообщения был очищен из кэша взаимодействия в адресате сообщения. Поток 300 сообщений гарантирует максимально однократную доставку, если вторая копия сообщения принимается после того, как соответствующий сдвиг сообщения очищается из памяти.
Как иллюстрируется потоком 300 сообщений, источник 301 сообщения и адресат 302 сообщения обмениваются электронными сообщениями. Может иметь место ситуация, когда источник 301 представляет собой одну из компьютерных систем 102, 103, 104 и 106, а адресат 302 представляет собой компьютерную систему 107. Источник 301 и адресат 302 имеют часы, которые отсчитывают время с синхронизированной тактовой частотой 303. Таким образом, имеется очень высокая вероятность того, что относительные изменения в значениях времени в источнике 301 и адресате 302 будут согласованными. Например, если спустя некоторый период времени часы в источнике 301 отсчитают время 8 минут и 24 секунды, то с весьма высокой вероятностью соответствующие часы в адресате 302 также отсчитают время 8 минут и 24 секунды спустя тот же период времени.
Источник 301 сообщения (например, Web-браузер) посылает сообщение 304. Сообщение 304 включает в себя ID 314 взаимодействия, ID 324 сообщения, значение 334 TTL и данные 344. ID 314 взаимодействия идентифицирует сообщение 304 как соответствующее конкретному взаимодействию с адресатом 302 сообщения. ID 324 сообщения идентифицирует положение сообщения 304 в последовательности сообщений, обмен которыми производится в качестве части конкретного взаимодействия (соответственно ID 314 взаимодействия). Данные 344 представляют собой часть данных (например, данные приложения), которые должны передаваться к модулю (например, экземпляру 336 процессора сообщения) в адресате 302. Значение 334 TTL указывает интервал времени, в течение которого источник 301 будет пытаться доставить сообщение 304.
На основе значения 334 TTL источник 301 сообщения может установить таймер 339 на длительность 341 времени таймера.
Адресат 302 сообщения (например, Web-сервер) может принять сообщение 304. После приема сообщения 304 адресат 302 сообщения может доставить данные 344 в экземпляр 336 процессора сообщения, который, в свою очередь, обрабатывает данные 344. Кэш 337 взаимодействия может быть обновлен для указания, что сообщение 304 было обработано. Например, кэш 337 взаимодействия может быть обновлен для указания, что сообщение, имеющее ID 324 сообщения, было обработано для взаимодействия, идентифицированного посредством ID 314 взаимодействия. На основе значения 334 TTL таймер 349 может установить длительность 351 времени таймера. Длительность 351 времени таймера истекает в некоторый момент спустя длительность 341 времени таймера (например, по меньшей мере, к моменту задержки сообщения для сообщения 304).
Адресат 302 сообщения может послать сообщение 308 АСК, включающее в себя ID 314 взаимодействия, ID 324 сообщения, чтобы указать, что сообщение 304 было обработано. Однако источник 301 сообщения может не принять сообщение 308 АСК (например, ввиду ошибок связи в сети, которая соединяет источник 301 сообщения и адресат 303 сообщения). Таким образом, если интервал повторной передачи истекает, то источник 301 сообщения может передать дополнительную копию сообщения 304 адресату 302 сообщения. Как указано значением 335 TTL, источник 301 сообщения может повторно вычислить значение TTL для сообщения 304 как время, оставшееся до момента истечения времени таймера 339.
Вслед за истечением длительности 351 времени таймера ID 324 сообщения (и, возможно, ID 314 взаимодействия) удаляется (очищается) из кэша 337 взаимодействия. Как показано для потока 300 сообщений, дополнительная копия сообщения 304 посылается от источника 301 сообщения прежде, чем истечет длительность 341 времени таймера, и принимается в адресате 302 сообщения после истечения длительности 351 времени таймера. Адресат 302 сообщения также принимает дополнительную копию сообщения 304 после того, как ID 324 сообщения (и, возможно, ID 314 взаимодействия) был удален из кэша 337 взаимодействия. Таким образом, если дополнительная копия принята адресатом 302 сообщения, то кэш 337 взаимодействия не включает в себя отслеживаемую информацию для сообщения 304.
Соответственно, адресат 302 сообщения может послать сообщение REQACKACK 306, включающее в себя ID 314 взаимодействия, источнику 301 сообщения. Сообщение REQACKACK 306 является запросом для указания продолжения взаимодействия, идентифицированного посредством ID 314 взаимодействия. Кроме того, спустя некоторое время после того, как дополнительная копия сообщения 304 послана, длительность времени таймера (длительность 341 или эквивалентная величина) истекает, и источник 301 сообщения обновляет кэш 327 взаимодействия для указания, что сообщение 104 больше не требует квитирования. Например, кэш 327 взаимодействия может быть обновлен для указания, что сообщение, имеющее ID 324 сообщения, больше не требует квитирования для взаимодействия, идентифицированного посредством ID 314 взаимодействия. Таким образом, в ответ на сообщение 306 REQACKACK источник 301 сообщения посылает сообщение 307 ACKACK, включающее в себя ID 314 взаимодействия и сдвиг 324 сообщения, адресату 302 сообщения. Сообщение ACKACK 307 указывает, что взаимодействие, идентифицированное ID 314 взаимодействия, продолжается, так что сообщение, имеющее ID 324 сообщения, может быть игнорировано (то есть не требует квитирования). Таким образом, адресат 302 сообщения игнорирует дополнительную копию сообщения 304.
Адресат 302 сообщения конфигурируется для удаления информации отслеживания, относящейся к взаимодействию, из памяти (т.е. чтобы забыть информацию отслеживания) без завершения участия во взаимодействии. Если адресат 302 сообщения принимает сообщение, соответствующее взаимодействию, которое не включено в кэш 337 взаимодействия, то адресат 302 сообщения посылает сообщение REQACKACK соответствующему источнику сообщения (например, источнику 301 сообщения). Источник сообщения отвечает возвратом соответствующего сообщения ACKACK, включающего в себя релевантную информацию отслеживания для взаимодействия, адресату 302 сообщения. Таким образом, соответствующий источник сообщения может обновить адресат сообщения подходящей информацией отслеживания. Соответственно, доставка максимально однократно гарантируется, даже если кэш взаимодействия был очищен.
Фиг.4 иллюстрирует третий примерный поток 400 сообщений, который обеспечивает надежную обработку сообщения, если в адресате сообщения произошла непреднамеренная потеря памяти. Поток 400 сообщений гарантирует максимально однократную доставку, когда вторая копия сообщения принимается после непреднамеренной потери памяти.
Как изображено потоком 400 сообщений, источник 401 сообщения и адресат 402 сообщения обмениваются электронными сообщениями. Может иметь место ситуация, когда источник 401 сообщения представляет собой одну из компьютерных систем 102, 103, 104 и 106, а адресат 402 сообщения представляет собой компьютерную систему 107. Источник 401 и адресат 402 имеют часы, которые отсчитывают время с синхронизированной тактовой частотой 403. Таким образом, имеется очень высокая вероятность того, что относительные изменения в значениях времени в источнике 401 сообщения и адресате 402 сообщения будут согласованными. Например, если спустя некоторый период времени часы в источнике 401 сообщения отсчитают время 8 минут и 24 секунды, то, с весьма высокой вероятностью, соответствующие часы в адресате 402 сообщения также отсчитают время 8 минут и 24 секунды спустя тот же период времени.
Источник 401 сообщения (например, Web-браузер) посылает сообщение 404. Сообщение 404 включает в себя ID 414 взаимодействия, ID 424 сообщения, данные 444 и факультативно включает в себя (как показано пунктирной линией) ID 452 экземпляра. ID 414 взаимодействия идентифицирует сообщение 404 как соответствующее конкретному взаимодействию с адресатом 402 сообщения. ID 424 сообщения идентифицирует положение сообщения 404 в последовательности сообщений, обмен которыми производится в качестве части конкретного взаимодействия (соответственно ID 414 взаимодействия). Данные 444 представляют собой часть данных (например, данные приложения), которые должны передаваться к модулю (например, экземпляру 451 процессора сообщения) в адресате 402 сообщения. ID 452 экземпляра является ID экземпляра, который был указан источнику сообщения как экземпляр 451 процессора сообщения с ID текущего экземпляра в некоторый предыдущий момент времени (на основе установленных предварительных условий).
Адресат 402 сообщения (например, Web-сервер) принимает сообщение 404, которое соответствует ID 452 экземпляра. После обнаружения, что ID экземпляра в сообщении 404 совпадает с ID текущего экземпляра для экземпляра 451 процесса сообщения (т.е. ID 452 экземпляра), адресат 402 сообщения выполняет другие проверки в отношении отслеживаемой информации. Если необходимо, адресат 402 сообщения доставляет данные 444 в экземпляр 451 процессора сообщения, который, в свою очередь, обрабатывает данные 444. Кэш 437 взаимодействия может быть обновлен для указания, что сообщение 404 было обработано. Например, кэш 437 взаимодействия может быть обновлен для указания, что сообщение, имеющее ID 424 сообщения, было обработано для взаимодействия, идентифицированного посредством ID 314 взаимодействия.
После обработки сообщения 404 в адресате 402 сообщения может иметь место непреднамеренная потеря памяти (включая содержимое кэша 437 взаимодействия). Таким образом, адресат 402 сообщения обнаруживает (например, в процессе последовательности перезагрузки), что содержимое памяти, использованное адресатом 402 сообщения, было непреднамеренно потеряно. Соответственно, адресат 402 сообщения может повторно инициализировать экземпляр 451 процессора сообщения, чтобы иметь ID 462 обновленного экземпляр, который отличается от ID 352 первоначального экземпляра.
Поскольку источник 401 сообщения не принял квитирование сообщения 404, то источник 401 сообщения может попытаться повторно передать дополнительную копию сообщения 404 (например, когда истекает интервал повторной передачи). Адресат 402 сообщения может принять дополнительную копию сообщения 404 вслед за повторной инициализацией процессора сообщения. Как показано, дополнительная копия сообщения 404 факультативно включает в себя ID 452 экземпляра. Адресат 402 сообщения сравнивает ID экземпляра, включенный в дополнительную копию сообщения 404 (ID 452 экземпляра), с ID текущего экземпляра для экземпляра 451 процессора сообщения (ID 462 экземпляра). Адресат 402 сообщения отклоняет сообщение (и взаимодействие, соответствующее ID 414 взаимодействия, должно быть безуспешным), поскольку дополнительная копия сообщения 404 соответствует ID 451 экземпляра вместо ID 462 экземпляра.
Если ID экземпляра не включено в сообщение 404, то адресат 402 сообщения может факультативно послать REQACKACK 406 для запроса продолжения взаимодействия, соответствующего ID 414 взаимодействия. Источник 401 сообщения может ответить сообщением АСКАСК 407, которое включает в себя ID 414 взаимодействия, ID 424 сообщения и ID 462 экземпляра. Из сообщения АСКАСК 407 адресат 402 сообщения может определить, что дополнительная копия сообщения 404 должна быть отклонена (и взаимодействие, соответствующее ID 414 взаимодействия, должно быть безуспешным). Кроме того, сообщение REQACKACK 406 может факультативно включать в себя ID 462 экземпляра. Таким образом, источник 401 сообщения может проанализировать ID экземпляра для экземпляра 451 процессора сообщения в начале нового взаимодействия. То есть, если сообщение REQACKACK содержит ID экземпляра адресата, то источник может обнаружить, что в адресате имела место перезагрузка. Соответственно доставка максимально однократно гарантируется в случае, когда в адресате имела место непреднамеренная потеря памяти.
В общем случае, понятно, что множество ID сдвигов сообщений может быть включено в квитирования (АСК и АСКАСК). Например, квитирование может включать в себя диапазон сдвигов (например, 19-23) во взаимодействии, список сдвигов сообщений (например, 1, 4, 17) во взаимодействии или комбинацию диапазонов и списков сдвигов сообщений (например, 3, 7, 14-19, 22, 24-26) во взаимодействии. Также понятно, что АСК и REQACKACK могут быть определены как заголовки сообщений (например, как в случае модели обработки SOAP), так что они могут быть присоединены к любому сообщению, передаваемому от адресата к источнику. Аналогичным образом, АСКАСК может быть определено как заголовок сообщения, так что оно может быть присоединено к любому сообщению, передаваемому от источника к адресату.
Кроме того, поскольку сообщение АСКАСК указывает адресату сообщения те сообщения, которые не требуют подтверждения (либо ввиду того, что соответствующее сообщение АСК было принято, либо поскольку для сообщений было превышено время ожидания), то сообщения АСКАСК могут быть использованы для исключения промежутков между диапазонами квитирования. То есть использование сообщения АСКАСК может вызвать в адресате сообщения объединение диапазонов квитирования и списков в один диапазон. Например, источник сообщения может принять сообщение АСК, квитирующее ID сообщений в диапазонах 1-10, 13-15 и 17-20. Затем для ID сообщений 11 и 12 может истечь время ожидания. Таким образом, в ответ на сообщение REQACKACK, принятое после истечения времени ожидания для ID сообщений 11 и 12, посланное АСКАСК может указать, что ID сообщений 1-15 и 17-20 больше не требуют квитирования. Таким образом, сообщения АСКАСК могут ограничить размер квитирований так, что размер квитирований не может непрерывно увеличиваться для длительно существующих взаимодействий.
Варианты осуществления настоящего изобретения могут, таким образом, быть использованы для точно однократной доставки, например, если значения TTL являются бесконечными и ID экземпляров не используются.
Кроме того, следует иметь в виду, что потоки 200, 300 и 400 сообщений могут быть реализованы в сети между множеством компьютерных систем в любое заданное время. Например, каждая из компьютерных систем 102, 103, 104 и 106 (а также другие компьютерные системы, соединенные с сетью 101) может обмениваться сообщениями (возможно, одновременно), частично реализуя потоки 200, 300 и 400 сообщений, с компьютерной системой 107. Каждая из компьютерных систем 102, 103, 104 и 106 (а также другие компьютерные системы, соединенные с сетью 101) может реализовать потоки 200, 300 и 400 сообщений в одно и то же или в разное время, как это необходимо. Кроме того, каждая из компьютерных систем 102, 103, 104 и 106 (а также другие компьютерные системы, соединенные с сетью 101) может реализовать множество потоков 200, 300 и 400 сообщений с компьютерной системой 107. Может иметь место ситуация, когда каждый экземпляр потока 200, 300 и 400 соответствует отличающемуся ID взаимодействия.
На фиг.5 представлена подходящая операционная среда для реализации принципов изобретения, включающая в себя универсальное вычислительное устройство в форме компьютерной системы 520, содержащей блок 521 обработки, системную память 522 и системную шину 523, которая связывает различные системные компоненты, включая системную память 522, с блоком 521 обработки. Блок 521 обработки может исполнять исполняемые компьютером команды, предназначенные для реализации признаков компьютерной системы 520, включая признаки настоящего изобретения. Системная шина 523 может быть любой из различных типов шинных структур, включая шину памяти или контроллер памяти, шину периферийных устройств, локальную шину, использующую любую из разнообразных шинных архитектур. Системная память включает в себя постоянную память (ROM, ПЗУ) 524 и оперативную память (RAM, ОЗУ) 525. Базовая система ввода/вывода (BIOS) 526, содержащая базовые подпрограммы, которые способствуют переносу информации между элементами в компьютерной системе 520, например, при запуске, в типовом случае сохранена в ПЗУ 524.
Компьютерная система 520 может также включать в себя накопитель 527 на магнитном жестком диске для считывания с магнитного жесткого диска и записи на него, накопитель 528 на магнитном диске для считывания со съемного магнитного диска 529 и записи на него и накопитель 530 на оптическом диске для считывания со съемного оптического диска 531 или записи на оптический диск, такой как, например, CD-RW или иные оптические носители записи. Накопитель 527 на жестком диске, накопитель 528 на магнитном диске и накопитель 530 на оптическом диске соединены с системной шиной 523 посредством интерфейса 532 накопителя на жестком диске, интерфейса 533 накопителя на магнитном диске и интерфейса 534 накопителя на оптическом диске соответственно. Накопители и связанные с ними машиночитаемые носители обеспечивают хранение считываемых компьютером команд, структур данных, программных модулей и других данных для компьютерной системы 520. Хотя в описываемой среде используются магнитный жесткий диск 539, съемный магнитный диск 529 и съемный оптический диск 531, могут быть использованы и другие типы машиночитаемых носителей, включая магнитные кассеты, карты флэш-памяти, многоцелевые цифровые диски, картриджи Бернулли, ОЗУ, ПЗУ и т.д.
Средство программного кода, содержащее один или более программных модулей, может быть сохранено на жестком диске 539, магнитном диске 529, оптическом диске 531, ПЗУ 524 или ОЗУ 525, включая операционную систему 535, одну или более прикладных программ 536, другие программные модули 537 и программные данные 538. Пользователь может вводить команды и информацию в компьютерную систему 520 посредством клавиатуры 540, координатно-указательного устройства 542 или других устройств ввода (не показаны), таких как микрофон, джойстик, игровая панель, спутниковая параболическая антенна, сканер и т.п. Эти и другие устройства ввода могут быть соединены с блоком 521 обработки через интерфейс 546 ввода/вывода, связанный с системной шиной 523. Интерфейс 546 ввода/вывода логически представляет любой из различных интерфейсов, таких, как, например, интерфейс последовательного порта, интерфейс PS/2, интерфейс параллельного порта, универсальная последовательная шина (USB) или интерфейс IEEE 1394 (т.е. интерфейс брандмауэра), или может даже логически представлять комбинацию различных интерфейсов.
Монитор 547 или иное устройство отображения также соединено с системной шиной 523 через видеоинтерфейс 548. Другие периферийные устройства вывода, например громкоговорители и принтер, могут быть также соединены с компьютерной системой 420.
Компьютерная система 520 может соединяться с сетями, такими как, например, офисная компьютерная сеть или компьютерная сеть предприятия, домашняя сеть, интранет и/или Интернет. Компьютерная система 520 может обмениваться данными с внешними источниками, такими как, например, удаленные компьютерные системы, удаленные приложения и/или удаленные базы данных, посредством сетей.
Компьютерная система 520 содержит сетевой интерфейс 553, через который компьютерная система 520 получает данные от удаленных источников и/или передает данные к удаленным источникам. Как показано на фиг.5, сетевой интерфейс 553 обеспечивает обмен данными с удаленной компьютерной системой 583 по каналу 551. Сетевой интерфейс 553 может логически представлять один или более модулей программного обеспечения и/или аппаратных средств, например карту сетевого интерфейса и соответствующий стек Спецификации интерфейса сетевого драйвера (NDIS). Канал 551 представляет часть сети (например, сегмент сети Ethernet), а удаленная компьютерная система 583 представляет узел сети.
Аналогичным образом, компьютерная система 520 включает в себя интерфейс 546 ввода/вывода, через который компьютерная система 520 получает данные от внешних источников и/или передает данные к внешним источникам. Интерфейс 546 ввода/вывода связан с модемом 554 (например, стандартным модемом, кабельным модемом или модемом цифровой абонентской линии (DSL)) посредством канала 559, с помощью которого компьютерная система 520 принимает данные от внешних источников и/или передает данные к внешним источникам. Как показано на фиг. 5, интерфейс 546 ввода/вывода и модем 554 обеспечивают обмен данными с удаленной компьютерной системой 593 по каналу 552. Канал 552 представляет собой часть сети, а удаленная компьютерная система 493 представляет узел сети.
Хотя фиг.5 представляет подходящую операционную среду для настоящего изобретения, принципы настоящего изобретения могут быть использованы в любой системе, которая имеет возможность, при подходящих модификациях, в случае необходимости, реализовать принципы настоящего изобретения. Среда, показанная на фиг.5, представлена только для примера, и не представляет даже малую часть из широкого разнообразия сред, в которых могут быть реализованы принципы настоящего изобретения.
В соответствии с настоящим изобретением модули, включающие в себя экземпляры процессора сообщения и часы, а также ассоциированные данные, включая ID взаимодействия, ID сообщения, значения TTL, ID экземпляра, отсчеты, данные и кэши взаимодействия, могут быть сохранены, и к ним может быть обеспечен доступ из любого из машиночитаемых носителей, связанных с компьютерной системой 520. Например, части таких модулей и частей ассоциированных программных данных могут быть включены в операционную систему 535, прикладные программы 536, программные модули 537 и/или программные данные 538 для хранения в системной памяти 522.
Если устройство массовой памяти, такое как, например, магнитный жесткий диск 539, связано с компьютерной системой 520, такие модули и ассоциированные программные данные могут быть также сохранены в устройстве массовой памяти. В сетевой среде программные модули, изображенные по отношению к компьютерной системе 520, или их части могут быть сохранены в удаленных устройствах памяти, например в системной памяти и/или устройствах массовой памяти, связанных с удаленной компьютерной системой 583 и/или удаленной компьютерной системой 593. Исполнение таких модулей может осуществляться в распределенной среде, как описано выше.
Настоящее изобретение может быть реализовано в других конкретных формах без отклонения от сущности или его существенных характеристик. Описанные варианты осуществления должны рассматриваться во всех аспектах только как иллюстративные, но не ограничительные. Поэтому объем изобретения определяется формулой изобретения, но не предшествующим описанием. Все изменения, которые находятся в пределах значения и области эквивалентности формулы изобретения, должны включаться в ее объем.