Применение метода предварительного создания в сервере без установления логического соединения

Опубликовано в Технологии > Серверные технологии

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

Система Linux позволяет осуществлять в сервере без установления логического соединения предварительное создание ведомых процессов с использованием такого же метода предварительного создания, который применяется в серверах с установлением логического соединения. Схема организации процессов приведена на рис. 16.3. На этом рисунке показано три ведомых процесса, выполняющих чтение из сокета для общепринятого порта. Каждый входящий запрос передается только одному ведомому процессу. Рассказ о работе новой сбербанк онлайн личный кабинет года. Можешь найти на сайте corx.ru.

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

Как показано на этом рисунке, каждый ведомый процесс наследует сокет общепринятого порта. Поскольку связь происходит без установления логического соединения, все ведомые процессы могут использовать один и тот же сокет не только для приема входящих запросов, но и для передачи ответов. В ведомом процессе для получения адреса отправителя, а также дейтаграммы от него вызывается функция recvfrom; для передачи ответа вызывается функция sendto.

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

16.8.5. Метод предварительного создания, неравномерный трафик и система NFS

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

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

Метод предварительного создания используется для предотвращения потери дейтаграмм во многих версиях системы NFS. Изучение успешно работающих систем NFS показывает, что в них предусмотрен целый ряд предварительно созданных серверных процессов, выполняющих чтение из одного и того же сокета UDP. По существу, именно в зависимости от того, используется ли в конкретной реализации NFS метод предварительного создания, можно судить, является ли данная реализация работоспособной.