Squeak.ru - шаблоны программирования

Автономный веб-сервер против Apache/IIS

Я разрабатываю довольно сложное приложение как с win32, так и с веб-доступом. Реализация на стороне сервера является индивидуальной, и она будет размещаться в нашей компании. HTTP-сервер может быть реализован как автономный Indy (или другой) HTTP-сервер или более традиционно с Apache/IIS.

Я хотел бы знать, каковы преимущества / недостатки автономного HTTP-сервера по сравнению с Apache / IIS с точки зрения безопасности или чего-либо еще, что вы считаете важным.


Ответы:


1

Я бы сказал, что это зависит от ваших потребностей и ожиданий. Это большая разница, если вы пишете собственный простой http-сервер, возможно, даже с поддержкой ISAPI и т. Д., Или вы пишете узкоспециализированный http-сервер / прокси / и т. д., который выполняет только узкие специализированные задачи. Например, у меня есть такой специализированный прокси и специализированная структура обработки модулей ISAPI. Плюсов, я бы сказал, не так уж и мало. Итак, плюсы:

  1. Простота развертывания. Попробуйте развернуть apache с вашим приложением на каждой машине
  2. Лучшая производительность, меньший объем памяти. Попробуйте использовать apache на слабых ноутбуках
  3. Лучшая безопасность. Поскольку вы выполняете только узкие задачи, шансы взлома намного меньше. Apache делает все это, поэтому шансы взлома намного выше.
  4. Полный контроль над работой такого сервера и над кодом. Если вам нужно немного другое поведение или новые функции, вы их получили.
  5. Если вы запускаете модули ISAPI, как я, вы можете помещать их в изолированные процессы и добиваться большей стабильности. Если один модуль/запрос выйдет из строя, остальные не пострадают.

Минусы:

  1. Пишем еще один http-сервер
  2. Изучение протоколов и внутренней работы с нуля
  3. Гораздо больше ошибок и выше вероятность ошибок, потому что код еще не закален в боях. Этому нужно время, чтобы освоиться.
  4. Поскольку у вас узкая направленность, вы не так универсальны, как Apache для сравнения. Не обязательно плохо, как говорилось ранее.

Мой вердикт будет таким. Если вам просто нужен простой http-сервер для обслуживания некоторого контента, и вы будете размещать его дома, на одном или нескольких серверах, выберите Apache. Если вы делаете специализированный фрагмент кода для обработки http, который будет часто устанавливаться и вам нужен контроль, тогда разработайте свой собственный. Поверьте мне, это стоит потраченного времени. Я так рад сейчас, что я придерживался этого тогда, когда мы решали одно и то же. Сейчас у меня на многих ноутбуках установлено довольно сложное программное обеспечение, и я не могу себе представить установку Apache на каждый ноутбук. А затем настроить его так, чтобы он работал так, как мне нужно.

И Indy (со всеми его заморочками и причудами) зарекомендовал себя как очень стабильный веб-сервер из коробки. ICS здесь, вероятно, такой же, но я еще не использовал его для этого, поэтому не могу сказать. Настройка HTTP-сервера Indy смехотворно проста.

Просто мои пять копеек ;)

10.01.2010

2

Под «автономным веб-сервером» вы подразумеваете встроенный в ваше приложение? Я никогда не использовал Indy, но работал над несколькими приложениями Java, используя библиотеку Jetty. Основными преимуществами этого по сравнению с прокси-сервером Apache/IIS для сервера приложений являются более простое развертывание и настройка, поскольку веб-служба тесно интегрирована в приложение и не требует дополнительной установки.

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

Другие соображения:

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

Производительность: встроенный сервер, вероятно, немного более эффективен, но менее масштабируем. Ваши кодовые решения сильно влияют на это, а со встроенными серверами легко все испортить.

Разработка: мне кажется, что со встроенными серверами намного проще работать, поскольку я могу запускать их как простые Java-приложения, а не веб-приложения, например. представление Eclipse Java вместо представления J2EE с интеграцией Tomcat.

Я знаю, что это ответ с точки зрения Java, но я надеюсь, что общие идеи применимы к Delphi.

10.01.2010
  • Они делают. Концепции те же, просто технология, лежащая в основе, другая. И вы добавили несколько моментов, которые я упустил :) 10.01.2010

  • 3

    IIS и Apache — хорошо известные http-серверы.

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

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

    Хотя минусов хватает

    • вы пишете код, который уже был написан
    • вам нужно будет обосновать и объяснить новым разработчикам, почему IIS и Apache не подходят
    • вам нужно будет задокументировать и обучить других, как использовать такой http-сервер. например, ожидается, что новые разработчики будут знать, как настроить SSL-сертификат или сжатие GZIP на IIS/Apache, однако им придется узнать у вас, как это сделать на вашем http-сервере и поддерживается ли эта функция вообще.
    • если это ваш первый http-сервер для написания, вам нужно будет потратить много времени на изучение и изучение различных стандартов и соглашений, которые находятся за пределами вашей основной бизнес-области, на которую действительно нацелено ваше приложение.
    10.01.2010

    4

    Обычно я разрабатываю отдельно, чтобы получить лучший опыт отладки, а затем развертываю как ISAPI dll.

    10.01.2010

    5

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

    Я также работал над некоторыми реализациями IInternetProtocol, чтобы позволить Internet Explorer работать с альтернативными схемами URL.

    Поэтому некоторое время назад я начал проект с открытым исходным кодом: http://xxm.sourceforge.net/.

    Это позволяет вам свободно переключаться между расширением ISAPI, автономным сервером и, возможно, более позднее. (Модуль Apache и обработчик протокола Firefox находятся в разработке.)

    Код Delphi и HTML объединены в одни и те же исходные файлы, как и другие языки веб-скриптов, но для создания библиотек, используемых для запуска веб-сайта, используется (быстрый) компилятор Delphi.

    10.01.2010

    6

    Я написал несколько приложений, реализующих Indy HTTP Stack и предоставляющих веб-сервисы. Это может быть как легко, так и сложно. Сложность возникает, когда вы начинаете работать с потоками, поскольку вам нужно знать, как Indy создает потоки для HTTP-запросов. Таким образом, интеграция его с кодом вашего сервера может потребовать некоторых размышлений, особенно если сервер подключается к источнику данных или общим элементам управления какого-либо типа.

    Кроме того, вам нужно управлять всей безопасностью, доступом к файлам и почти всем остальным, что обычный веб-сервер будет делать самостоятельно. Здесь вы можете запутаться, потому что примеров для Indy немного.

    Сказав это, я обнаружил, что HTTP-сервер Indy 10 является надежным и работает очень хорошо, если вы ориентируетесь на конкретные требования, например, просто обслуживаете XML на основе того, что делает ваше приложение. У вас есть полный контроль над тем, что делает сервер, и вы можете выбрать различные модели развертывания — служба Windows, автономное приложение и т. д.

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

    12.01.2010

    7

    Я всегда сосредотачиваюсь на ISAPI и использую IDDebugger для отладки этого процесса. Это дает вам лучшее из обоих миров, вашу отладку против той же версии, которую вы в конечном итоге развертываете. К сожалению, я не разрабатываю для Apache, поэтому не могу говорить о простоте его разработки.

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

    Слишком много вещей, о которых нужно беспокоиться, чтобы даже подумать об использовании автономного веб-сервера с выходом в Интернет. Гораздо лучше доверить это беспокойство (и многолетний опыт) IIS/Apache.

    11.01.2010
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...