У меня есть сервер с несколькими доменами и приложениями, запущенными через Apache. На данный момент все хорошо, но у меня есть планы разработать какое-то очень ресурсоемкое веб-приложение (использующее C ++ с CPPCMS), начиная с моего сервера для тестирования, возможно, получив отдельный сервер только для этого приложения, как только оно будет готово.
В любом случае, я много слышал о NGinx, который кажется более производительным, чем Apache, поэтому я спрашивал себя, стоит ли с ним работать для этого нового проекта. Я не совсем понимаю, потому что не знаю, какое именно узкое место в производительности NGinx устраняет.
Я не опытный пользователь Apache, я плохой администратор Linux и не очень много разрабатываю веб-приложения (но у меня есть представления). Я в основном посвящен написанию программного обеспечения, поэтому часть веб-сервера иногда очень неясна для меня. Каждый раз, когда мне приходится настраивать веб-сайт через apach, мне нужно много времени просматривать документ, чтобы убедиться, что я не нарушаю все.
Тем не менее, я думаю, что я становлюсь намного лучше с этой стороны, но все еще нуждаюсь в совете. Я видел некоторые файлы конфигурации nginx, и это кажется гораздо более понятным, чем файлы Apache, но, возможно, я ошибаюсь?
Из информации, которую я собрал, NGinx будет лучшим выбором, когда вы хотите распределить нагрузку, так что если ваше приложение распределено на несколько машин, верно? Поскольку я думаю о своем приложении для scalling (и производительности), похоже, что это то, что мне нужно, но, возможно, мне нужно знать больше о том, когда интересно перейти с Apache на NGinx. Стоит ли переходить на NGinx для всех моих текущих приложений? Сколько это стоит? (Я имею в виду, дорого ли по времени переключаться с одного на другое?) Могу ли я без проблем использовать Apache и NGinx на одном компьютере?
Примечание : пожалуйста, не советуйте мне использовать интерпретируемые языки вместо C ++, это не связано с вопросом. См. Страницу обоснования CPPCSM, чтобы узнать, какое приложение может извлечь из этого пользу. Я прекрасно понимаю недостатки (по сравнению с приложениями на Ruby и Python, которые я уже использую для менее энергоемких веб-приложений), и я в порядке.
источник
Nginx, говоря очень ( очень ) в целом, может получить намного более высокую пропускную способность, чем Apache, благодаря другому архитектурному подходу к проблеме подачи страниц в Интернет. Nginx также был построен в основном как обратный прокси-сервер, и он отлично справляется с этой ролью (это бит балансировки нагрузки, на который вы ссылались); Апач, с другой стороны, был создан для обслуживания веб-страниц, а позже получил возможность прокси.
Тем не менее, есть почти наверняка области, в которых Apache будет последовательно превосходить Nginx, в то время как есть другие, где Nginx будет так же стабильно превосходить Apache.
Короткий ответ: если Apache работает на вас, переключаться не нужно. (И я говорю это как бывший пользователь Apache, который стал полностью преобразованным учеником Nginx.) Только когда трафик на ваш сервер начинает достигать уровней, когда Apache становится вашим узким местом (это порядка нескольких тысяч одновременных соединений, но будет сильно различаться в зависимости от характеристик вашего сервера и нагрузки на другой сервер), или если вы пытаетесь запустить Apache в среде с ограниченными ресурсами, где он едва ли подходит, переключение на Nginx даст вам солидную выгоду.
Тем не менее, если вы хотите переключиться на Nginx (что я действительно поощряю!), То сделайте это. Вы увидите какую-нибудь выгоду? 9 раз из 10: нет, не будешь. Но вы упомянули, что вам больше нравится язык конфигурационных файлов Nginx, так что если вам удобнее настраивать Nginx, чем Apache, это будет для вас преимуществом! (Лично я считаю, что конфигурации Apache легче читать в целом, но это может быть из-за того, что я потратил много-много лет на их чтение, а на Nginx было потрачено всего несколько коротких месяцев!)
На заметку: Вы упомянули о своем желании создать веб-приложение на C ++. Ради вашего здравого смысла я настоятельно призываю вас использовать язык более высокого уровня, такой как PHP, Python или даже Java. Затем профилируйте свой код и подумайте о создании модулей на основе C ++ для устранения конкретных узких мест (и Python, и PHP оба позволяют это довольно легко; не знают о Java). Если вас беспокоит общая производительность, учтите следующее: EVE Online, единственная в мире неосколенная MMORPG, построена на варианте Python (Stackless Python), в котором только ключевые компоненты (например, графические библиотеки) написаны на C ++. Если Python может справиться с этим, конечно, он может обрабатывать ваше веб-приложение?
источник
Никто не может ответить на часть «когда я должен переключиться» - это будет зависеть от вашей нагрузки, производительности вашего собственного кода приложения и т. Д.
nginx использует один процесс (или очень небольшое количество рабочих процессов) для обработки всех клиентских подключений с использованием четного ввода-вывода. В Apache доступно несколько «модулей многопроцессорной обработки» , но все они больше склоняются ко многим многим процессам / многим потокам. В результате Apache, как правило, потребляет больше оперативной памяти и ЦП, чем nginx, для базовой обработки HTTP-соединений. Вы можете получить обзор различных подходов к обработке соединений на странице Kegel C10K .
Я настоятельно рекомендую рассмотреть возможность создания базового веб-приложения на языке более высокого уровня (Python, или, может быть, Ruby, Scala) и использовать очередь сообщений для отправки рабочих билетов на рабочие машины, которые асинхронно обрабатывают «ресурсоемкие» задачи.
nginx - хороший балансировщик нагрузки; но есть много вариантов в этом пространстве .
Да. Просто запустите их на разных номерах IP-портов и / или IP-адресах.
источник