Inetd или нет inetd... когда я должен использовать inetd для моей программы сетевого сервера?

Кто-нибудь может дать краткий набор реальных соображений, которые повлияют на выбор того, использовать ли inetd для управления программой, которая действует как сетевой сервер?

(Если используется inetd, я думаю, что это меняет требования к сетевому коду в программе, поэтому я думаю, что это определенно связано с программированием, а не с общими ИТ)

Вопрос основан на реализации, которую я видел, которая использует управляющую программу, управляемую inetd, для запуска сетевого прослушивателя, который затем работает вечно и принимает постоянную и большую нагрузку. Это не показалось мне подходящим для профиля использования учебника inetd (по требованию, редко используется, легкий) и заинтересовало меня более общим вопросом.

5 ответов

Решение

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

Если ваш демон более тяжелый или более часто используемый, вам, вероятно, лучше написать его автономно. Вы можете так же легко написать init.d сценарий и некоторые conf.d Конфигурация, чтобы пойти с ним, и это будет не сложнее для администратора. Большинство языков программирования в наши дни имеют простые в использовании библиотеки сокетов, поэтому во многих случаях сетевой код может даже не быть таким сложным.

По своему опыту я обнаружил, что немногие администраторы в наши дни знакомы с inetd. Большинство демонов просто предоставляют свой собственный скрипт инициализации. На самом деле, из нескольких сотен систем, которыми я управляю, я не могу придумать ни одной, которая вообще запускает что-либо через inetd. Это то, что стоит рассмотреть.

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

РЕДАКТИРОВАТЬ: лично я никогда не использую inetd и всегда выбираю писать серверные процессы в качестве автономных демонов.

Я думаю, что еще один фактор, который стоит учитывать при принятии решения об использовании inetd, это то, сколько памяти занимает процесс, обрабатывающий запрос в среднем? Если это довольно много, то при высокой нагрузке вы рискуете исчерпать память (так как inetd разветвляется). Один и тот же сервер может быть реализован многопоточным способом или методом выборочного опроса, возможно, позволяя увеличить нагрузку / меньше памяти на соединение.

Вы можете использовать inetd для предоставления возможностей TCP / UDP простым программам, которые работают через stdin / stdout.

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

Какую альтернативную стратегию вы рассматриваете?

inetd - это хороший способ обеспечить запуск вашего сервера при загрузке ОС на соответствующем уровне запуска. Даже если вы спроектируете свой сервер так, чтобы у него был какой-то другой механизм управления, inetd все равно может просто обернуть все команды. В конце концов, это всего лишь сценарии оболочки.

Другие вопросы по тегам