Apache vs Nginx: практический взгляд / Хабр
Введение
Apache и Nginx — 2 самых широко распространенных веб-сервера с открытым исходным кодом в мире. Вместе они обслуживают более 50% трафика во всем интернете. Оба решения способны работать с разнообразными рабочими нагрузками и взаимодействовать с другими приложениями для реализации полного веб-стека.Несмотря на то, что у Apache и Nginx много схожих качеств, их нельзя рассматривать как полностью взаимозаменямые решения. Каждый из них имеет собственные преимущества и важно понимать какой веб-сервер выбрать в какой ситуации. В этой статье описано то, как каждый из этих веб-серверов ведет себя при различных условиях.
Общий обзор
Прежде чем погрузиться в различия между Apache и Nginx давайте бегло взглянем на предысторию каждого из этих проектов.Apache
Apache HTTP Server был разработан Робертом Маккулом в 1995 году, а с 1999 года разрабатывается под управлением Apache Software Foundation — фонда развития программного обеспечения Apache.Веб-север Apache был самым популярным веб-сервером в интернете с 1996 года. Благодаря его популярности у Apache сильная документация и интеграция со сторонним софтом.
Администраторы часто выбирают Apache из-за его гибкости, мощности и широкой распространенности. Он может быть расширен с помощью системы динамически загружаемых модулей и исполнять программы на большом количестве интерпретируемых языков программирования без использования внешнего программного обеспечения.
Nginx
В 2002 году Игорь Сысоев начал работу над Nginx для того чтобы решить проблему C10K — требование к ПО работать с 10 тысячами одновременных соединений. Первый публичный релиз был выпущен в 2004 году, поставленная цель была достигнута благодаря асинхронной event-driven архитектуре.Nginx начал набирать популярность с момента релиза благодаря своей легковесности (light-weight resource utilization) и возможности легко масштабироваться на минимальном железе. Nginx превосходен при отдаче статического контента и спроектирован так, чтобы передавать динамические запросы другому ПО предназначенному для их обработки.
Администраторы часто выбирают Nginx из-за его эффективного потребления ресурсов и отзывчивости под нагрузкой, а также из-за возможности использовать его и как веб-сервер, и как прокси.
Архитектура обработки соединений
Одно из самых существенных отличий между Apache и Nginx состоит в том как они обрабатывают соединения и отвечают на различные виды трафика.Apache
Apache предоставляет несколько модулей мультипроцессинга (multi-processing modules, MPM), которые отвечают за то как запрос клиента будет обработан. Это позволет администраторам определять политику обработки соединений. Ниже представлен список MPM-модулей Apache:- mpm_prefork — этот модуль создает по одному процессу с одним потоком на каждый запрос. Каждый процесс может обрабатывать только одно соединение в один момент времени.
. - mpm_worker — этот модуль создает процессы, каждый из которых может управлять несколькими потоками. Каждый поток может обрабтывать одно соединение. Потоки значительно более эффективны чем процессы, что означает что mpm_worker масштабируется значительно лучше чем mpm_prefork. Так как потоков больше чем процессов это означает, что новое соединение может быть сразу обработано свободным потоком, а не ждать пока освободится процесс.
- mpm_event — этот модуль похож на mpm_worker, но оптимизрован под работу с keep-alive соединениями. Когда используется mpm_worker соединение будет удерживать поток вне зависимости от того активное это соединение или keep-alive. Mpm_event выделяет отдельные потоки для keep-alive соединений и отдельные потоки для активных соединений. Это позволяет модулю не погрязнуть в keep-alive соединениях, что необходимо для быстрой работы. Этот модуль был отмечен как стабильный в Apache версии 2.4.
Nginx
Nginx появился на сцене позднее Apache, по этой причине, его разработчик был лучше осведомлен о проблемах конкурентности, с которыми сталкиваются сайты при масштабировании. Благодаря этим знаниям Nginx изначально был спроектирован на базе асинхронных неблокирующих event-driven алгоритмов.Nginx создает процессы-воркеры каждый из которых может обслуживать тысячи соединений. Воркеры достигают такого результата благодаря механизму основанному на быстром цикле, в котором проверяются и обрабатываются события. Отделение основной работы от обработки соединений позволяет каждому воркеру заниматься своей работой и отвлекаться на обработку соединений только тогда когда произошло новое событие.
Каждое соединение, обрабатываемое воркером, помещается в event loop вместе с другими соединениями. В этом цикле события обрабатываются асинхронно, позволяя обрабатывать задачи в неблокирующей манере. Когда соединение закрывается оно удаляется из цикла.
Этот подход к обработке соединений позволяет Nginx’у невероятно масштабироваться при ограниченных ресурсах. Поскольку сервер однопоточный и он не создает процессы под каждое соединение, использование памяти и CPU относительно равномерно, даже при высоких нагрузках.
Статический и динамический контент
Если рассматривать жизненные примеры, то основные различия между Apache и Nginx в том как они обрабатывают запросы к статическому и динамическому контенту.Apache
Apache может раздавать статический контент используя стандартные file-based методы. Производительность таких операций зависит от выбранного MPM.Apache также может раздавать динамический контент встраивая интерпретатор нужного языка в каждого воркера. Это позволяет обрабатывать запросы к динамическому содержимому средствами самого веб-сервера и не полагаться на внешние компоненты. Интерпретаторы языков могут быть подключены к Apache с помощью динамически загружаемых модулей.
Возможность обрабатывать динамический контент средствами самого Apache упрощает конфигурирование. Нет необходимости настраивать взаимодействие с дополнительным софтом, динамический модуль может быть легко отключен в случае изменившихся требований.
Nginx
Nginx не имеет возможности самостоятельно обрабатывать запросы к динамическому контенту. Для обработки запросов к PHP или другому динамическому контенту Nginx должен передать запрос внешнему процессору для исполнения, подождать пока ответ будет сгенерирован и получить его. Затем результат может быть отправлен клиенту.Для администраторов это означает, что нужно настроить взаимодействие Nginx с таким процессором используя один из протоколов, который известен Nginx’у (http, FastCGI, SCGI, uWSGI, memcache). Это может немного усложнить процесс настройки, в особенности когда вы будете пытаться предугадать какое число соединений разрешить, так как будет использоваться дополнительное соединение с процессором на каждый пользовательский запрос.
Однако, этот метод имеет и свои преимущества. Так как интерпретатор не встроен в каждого воркера, то оверхед, связанный с этим, будет иметь место только при запросах к динамическому контенту. Статический контент будет возвращен клиенту простым способом и запросы к интерпретатору будут выполняться только тогда когда они нужны. Apache тоже может работать в такой манере, но тогда это лишит его всех преимуществ описанных в предыдущем разделе.
Распределенная конфигурация против централизованной
Для администраторов одним из очевидных отличий этих двух веб-серверов является наличие у Apache возможности задавать конфигурацию на уровне директории.Apache
Apache имеет опцию, которая позволяет включить конфигурирование на уровне директорий. Если эта опция включена, то Apache будет искать конфигурационные директивы в директориях с контентом в специальных скрытых файлах, которые называются.htaccess
.Так как такие конфигурационные файлы находятся в директриях с контентом, Apache вынужден при обработке каждого запроса проверять не содержит ли каждый компонент запрашиваемого пути файл
и исполнять директивы в найденных файлах. Это позволяет децентрализовать конфигурирование веб-сервера, что позволяет реализовать на уровне директорий модификацию URL’ов (URL rewrite), ограничения доступа, авторизацию и аутентификацию и даже политики кеширования.
Несмотря на то, что все описанное выше может быть настроено и в основном конфигурационном файле Apache, файлы .htaccess
имеют ряд преимуществ. Во-первых, эти файлы интерпретируются как только они найдены по запрашиваемому пути, что позволяет менять конфигурацию на лету не перезагружая веб-сервер. Во вторых, это позволяет дать возможность непривилегированным пользователям контролировать определынные аспекты собственных веб-приложений с помощью .htaccess
.
Это дает простой способ таким приложениям как системы управления контентом (CMS) конфигурировать собственное окружение не имея доступа к конфигурационному файлу веб-сервера. Это также может быть использовано шаред хостингами, чтобы сохранить контроль над основным конфигурационным файлом и дать клиентам контроль над конфигурацией определенных директорий.
Nginx
Nginx не интерпретирует файлы.htaccess
и не предоставляет механизм конфигурирования на уровне директорий за пределами основного конфигурационного файла. Этот подход может показаться менее гибким чем в случае с Apache, но он имеет свои преимущства.Основное преимущество перед использованием .htaccess
— это улучшенная производительность. Типичная установка Apache позволяет использовать файлы .htaccess
в любой директории, поэтому веб-сервер при каждом запросе вынужден проверять наличие этого файла во всех родительских директориях запрошенного файла. Если найден один или более таких файлов, то все они должны быть прочитаны и интерпретированы.
Так как Nginx не позволяет переопределять конфиги на уровне директорий, он может обрабатывать запросы быстрее, ведь ему достаточно сделать один directory lookup и прочитать один конфигурационный файл на каждый запрос (предполагается, что файл найден там где он должен быть по соглашению).
Второе преимущество связано с безопасностью. Распределенная конфигурация на уровне директорий в Apache возлагает ответственность за безопасность на обычных пользователей, которые вряд ли способны решить эту задачу качественно. То что администратор контролирует весь сервер предотвращает ошибки безопасности, которые могут возникнуть если дать пользователям доступ к конфигурации.
Имейте ввиду, что вы можете отключить поддержку .htaccess
в Apache, если сказанное выше произвело на вас впечатление.
Интерпретация базирующаяся на файлах и URI
То как веб-сервер интерпретирует запрос и сопоставляет его с ресурсом в системе это еще одна отличительная особенность в этих двух серверах.Apache
Apache имеет возможность интерпретировать запрос как физический ресурс в файловой системе или как URI, который требует дополнительной обработки. Первый тип запросов использует конфигурационные блоки<Directory>
или <File>
, второй — блоки <Location>
.Так как Apache изначально был спроектирован как веб-сервер, он по умолчанию интерпретирует запросы как ресурсы в файловой системе. Он берет document root веб-сервера и дополняет его частью запроса, которая следует за именем хоста и номером порта, чтобы найти запрашиваемый файл. В общем случае, иерархия файловой системы представленная в вебе доступна как дерево документов.
Apache предоставляет ряд альтернатив на случай когда запрос не соответствует файлу в файловой системе. Использование блоков <Location>
это метод работы с URI без отображения на файловую систему. Также возможно использовать регулярные выражения, которые позволяют задать более гибкие настройки для всей файловой системы.
Так как Apache может оперировать и c файловой системой, и с webspace, то он в основном опирается на методы работы с файловой системой. Это видно в некоторых решениях в дизайне архитектуры веб-сервера, например, в использовании файлов .htaccess
для конфигурирования на уровне директорий. Документация к Apache не рекомендует использовать URI-блоки для ограничения доступа для запросов к файловой системе.
Nginx
Nginx создан, чтобы работать и в качестве веб-сервера, и в качестве прокси-сервера. По этой причине он работает в первую очередь с URI, транслируя их при необходимости в запросы к файловой системе.Эта особенность прослеживается в том как для Nginx конструируются и интерпретируются конфигурационные файлы. В Nginx нет способа создать конфигурацию для заданной директории, вместо этого он парсит URI.
Например, основными конфигурационными блоками в Nginx являются <server>
и <location>
. В блоке <server>
определяется хост, который будет обслуживаться, блок <location>
отвечает за обработку части URI, которая идет после имени хоста и номера порта. Таким образом, запрос интерпретируется как URI, а не как путь в файловой системе.
В случае запросов к статическим файлам все запросы должны быть отображены (mapped) на путь в файловой системе. Сначала Nginx выбирает блоки server и location, которые будут использованы для обработки запроса и затем объединяет document root с URI, в соответствии с конфигурацией.
Эти подходы (интерпретация запроса как пути в файловой системе и как URI) могут показаться похожими, но тот факт что Nginx рассматривает запросы как URI, а не как пути в файловой системе позволяет ему легче справляться одновременно и с ролью веб-сервера, и с ролью прокси. Nginx конфигурируется так, чтобы отвечать на различные шаблоны запросов. Nginx не обращается к файловой системе до тех пор пока он не готов обслужить запрос, что объясняет почему он не реализует ничего похожего на файлы .htaccess
.
Модули
И Apache, и Nginx могут быть расширены при помощи системы модулей, но способы реализации модульной системы принципиально отличаются.Apache
Система модулей Apache позволяет динамически загружать и выгружать модули, чтобы удовлетворить ваши потребности, в то время как ваш сервер запущен. Ядро Apache всегда доступно, в то время как модули можно включать и выключать, чтобы добавить или удалить функциональность из основного сервера.Apache использует эту функциональность для решения широкого круга задач. Благодаря зрелости платформы существует огромное множество модулей, которые могут изменять ключевые особенности сервера, например модуль mod_php
позволяет включать PHP-интерпретатор в кажого воркера.
Использование модулей не ограничивается лишь обработкой динамических запросов. Среди других возможностей модулей: изменение URL’ов (URL rewrite), аутентификация клиентов, защита сервера, логгирование, кеширование, сжатие, проксирование, ограничение частоты запросов, шифрование. Динамические модули могут значительно расширить функцональность ядра.
Nginx
Nginx тоже имеет систему модулей, но она сильно отличается от подхода используемого в Apache. В Nginx модули загружаются не динамически, а должны быть выбраны и скомпилированы с ядром сервера.Для многих пользователей по этой причине Nginx кажется менее гибким. Это особенно относится к пользователям, кто имеет мало опыта ручной сборки приложений и предпочитают использовать системы управления пакетами. Обычно разработчики дистрибутивов стремятся создать пакеты для всех часто используемых модулей, но если вам нужен какой-то нестандартный модуль вам придется собрать его из исходников самостоятельно.
Тем не менее, модули в Nginx очень полезны и востребованы, вы можете определить чего вы хотите от сервера и включить только те модули, что вам нужны. Некоторые пользователи считают такой подход более безопасным так как произвольные модули не могут быть подключены к серверу.
Модули Nginx реализуют те же возможности, что и модули Apache: проксирование, сжатие данных, ограничение частоты запросов, логгирование, модификация URL’ов, гео-локация, аутентификация, шифрование, потоковое вещание, почтовые функции.
Поддержка, совместимость, экосистема и документация
В процессе использования приложения важными являются экосистема созданная вокруг него и возможность получения поддержки.Apache
Так как Apache пользуется популярностью такое длительное время с поддержкой у него нет проблем. Легко можно найти большое количество документации как от разработчиков Apache, так и от сторонних авторов. Эта документация покрывает все возможные сценарии использования Apache, включая взаимодействие с другими приложениями.Существует много инструментов и веб-проектов идущих в комплекте со средствами запуска самих себя из под Apache. Это относится как к самим проектам, так и к системам управления пакетами.
В общем случае Apache будет иметь больше поддержки в сторонних проектах просто потому он доступен на рынке длительное время. Администраторы также обычно имеют больше опыта работы с Apache, так как большинство людей начинают работу с шаред-хостингов где Apache более популярен из-за поддержки файлов . htaccess
.
Nginx
Nginx обычно используется там, где предъявляются повышенные требования к производительности и в некоторых областях он все еще является догоняющим.В прошлом было сложно найти вменяемую поддержку по этому веб-серверу на английском языке, так как на ранних этапах разработка и документация велись на русском языке. Вместе с ростом интереса к проекту документация была переведена на английский и теперь можно найти достаточное количество документации и от разработчиков веб-сервера, и от сторонних авторов.
Разработчики стороннего ПО также начинают поддерживать работу с Nginx и некоторые из них уже предлагают на выбор пользователя конфиги для работы или с Apache, или с Nginx. И даже без поддержки приложением работы с Nginx не составляет большого труда написать свой конфиг для интеграции приложения с Nginx.
Совместное использование Apache и Nginx
После того как вы ознакомились с плюсами и минусами Apache и Nginx у вас должно появиться представление того, какой из серверов больше подходит под ваши задачи. Однако, можно достигнуть лучших результатов используя оба сервера вместе.Распространенной схемой использования является размещение Nginx перед Apache в качестве реверс-прокси. В такой конфигурации Nginx называют фронтендом, а Apache — бэкендом. При таком подходе Nginx будет обслуживать все входящие запросы клиентов и мы получим выигрыш из-за его возможности обрабатывать множество конкурентных запросов.
Nginx будет самостоятельно обслуживать статический контент, а для динамического контента, например для запросов к PHP-страницам, будет передавать запрос к Apache, который будет рендерить страницу, возвращать ее Nginx’у, а тот в свою очередь будет передавать ее пользователю.
Такая конфигурация очень популярна, Nginx используется в ней для сортировки запросов. Он обрабатывает сам те запросы которые может и передает Apache только запросы, которые не может обслужить сам, снижая таким образом нагрузку на Apache.
Эта конфигурация позволяет горизонтально масштабировать приложение: вы можете установить несколько бэкенд серверов за одним фронтендом и Nginx будет распределять нагрузку между ними, увеличивая тем самым отказоустойчивость приложения.
Заключение
Как вы можете видеть и Apache, и Nginx — это мощные, гибкие и функциональные инструменты. Для того чтобы выбрать сервер под ваши задачи необходимо определиться с требованиями к нему и провести тесты на всех возможных паттернах использования вашего приложения.Между этими проектами есть значительные различия, которые могут оказать влияние на производительность, возможности и время реализации необходимое для внедрения и запуска каждого из решений. Выбор является серией компромиссов и не стоит пренебрегать тестами. В конечном итоге, не существует одного универсального веб-сервера под все возможные задачи, поэтому важно найти решение максимально соответствующее вашем задачам и целям.
подробнее о таблицах Iceberg – AWS
Что такое Apache Iceberg?
Apache Iceberg – это распределенный, управляемый сообществом формат таблиц данных с лицензией Apache 2.0 и полностью открытым исходным кодом, который упрощает обработку больших массивов данных, хранящихся в озерах данных. Инженеры по обработке данных используют Apache Iceberg, потому что он работает быстро, эффективно и надежно в любом масштабе и ведет учет изменений наборов данных с течением времени. Apache Iceberg предлагает простую интеграцию с популярными фреймворками обработки данных, такими как Apache Spark, Apache Flink, Apache Hive, Presto и другими.
Что такое озеро транзакционных данных?
Озеро данных – это централизованное хранилище, в котором можно хранить все структурированные и неструктурированные данные в любом масштабе. Транзакция данных – это серия обменов данными, выполняемых за одну операцию. Например, когда клиент снимает деньги с банковского счета, банк одновременно выполняет несколько обменов данными в рамках одной транзакции данных: проверяет достаточность баланса, личность и списывает средства со счета. Озеро транзакционных данных – это озеро данных, которое не только хранит данные в нужном масштабе, но и поддерживает транзакционные операции, обеспечивает точность и согласованность данных, а также дает возможность отслеживать изменения данных и структуры данных с течением времени. Эти свойства в совокупности известны как атомарность, согласованность, изоляция и надежность (ACID).
- Атомарность гарантирует, что каждая транзакция – это отдельное событие, которое либо успешно, либо полностью провалилось; промежуточного статуса не существует.
- Согласованность обеспечивает достоверность всех записанных данных в соответствии с определенными правилами озера данных, а также их точность и надежность.
- Изоляция обеспечивает одновременное выполнение нескольких транзакций так, чтобы эти процессы не влияли друг на друга и были независимыми.
- Надежность означает, что данные не теряются или не повреждаются после отправки транзакции. Данные можно восстановить в случае сбоя системы, например отключения электроэнергии.
Каковы преимущества использования Apache Iceberg?
Ниже приведены некоторые из ключевых преимуществ использования Apache Iceberg для транзакционных озер данных.
- Схожесть с SQL. Язык структурированных запросов (SQL) – популярный язык запросов, который часто используется во всех типах приложений. Аналитики данных и разработчики изучают и используют SQL, потому что он хорошо интегрируется с различными языками программирования, а также довольно прост в освоении, поскольку в его формулировках используются общие английские ключевые слова. Apache Iceberg позволяет любому, кто знаком с языком структурированных запросов (SQL), создавать озера данных и выполнять большинство операций с озерами данных без необходимости изучать новый язык.
- Консистенция данных. Apache Iceberg обеспечивает согласованность данных, гарантируя, что любой пользователь, читающий и записывающий данные, видит одну и ту же информацию.
- Структура данных. Apache Iceberg позволяет легко вносить изменения в структуру данных, что также называется эволюцией схемы. Это означает, что пользователи могут добавлять, переименовывать или удалять столбцы из таблицы данных, не нарушая работу базовых данных.
- Управление версиями данных. Apache Iceberg поддерживает управление версиями данных, благодаря чему пользователи могут отслеживать изменения данных со временем. Это позволяет использовать функцию путешествий во времени, благодаря которой пользователи могут получать доступ к историческим версиям данных, запрашивать их и анализировать изменения, внесенные в результате действий обновления и удаления.
- Кроссплатформенная поддержка. Apache Iceberg поддерживает множество различных систем хранения и движков запросов, включая Apache Spark, Apache Hive и Presto. Это упрощает использование Iceberg в различных средах обработки данных.
- Инкрементная обработка. Iceberg поддерживает инкрементную обработку, благодаря чему пользователи могут обрабатывать только те данные, которые изменились с момента последнего запуска. Она также известная как CDC (Change Data Capture). Это может помочь повысить эффективность и производительность обработки данных.
Каковы распространенные варианты использования Apache Iceberg?
Apache Iceberg подходит для многих вариантов использования озер данных, в том числе нижеследующих.
- Таблицы данных в озерах данных, требующие частого удаления, например, для соблюдения законов о конфиденциальности данных.
- Таблицы данных в озере данных, требующие обновления на уровне записей. Это полезно, если ваш набор данных требует частого обновления после урегулирования данных. Например, данные о продажах могут меняться в связи с последующими событиями, такими как возврат товаров. Iceberg предоставляет возможность обновлять отдельные записи без необходимости повторной публикации всего набора данных.
- Таблицы данных в озерах данных с непредсказуемыми изменениями, например таблицы медленно меняющихся размеров (SCD). Примером SCD является таблица записей клиентов, содержащая имя, местоположение и контактную информацию, которая может меняться время от времени, но как часто – не известно.
- Если транзакции с озером данных требуют гарантированной достоверности, долговечности и надежности данных, для транзакций ACID можно использовать форматы таблиц Apache Iceberg.
- Иногда необходимо обратиться к историческим версиям данных, чтобы проанализировать тенденции и изменения в данных за определенный период времени, а также восстановить данные или откатиться к предыдущей версии для устранения проблем.
Кто использует Apache Iceberg?
Инженеры по обработке данных, администраторы данных, аналитики данных и специалисты по обработке данных относятся к числу тех, кто использует Apache Iceberg. Инженеры и администраторы данных могут использовать Apache Iceberg для проектирования и создания масштабируемых систем хранения данных. Аналитики данных и специалисты по обработке данных могут использовать Apache Iceberg для эффективного анализа больших наборов данных.
Почему стоит выбрать Apache Iceberg?
Apache Iceberg предлагает быстрый и эффективный способ обработки больших наборов данных в любом масштабе. Ниже приведены преимущества хостинга VPS, которыми вы сможете воспользоваться.
- Открытый исходный код: Apache Iceberg – это проект с открытым исходным кодом. Это означает, что его можно использовать бесплатно и настроить в соответствии с вашими конкретными потребностями. В нем также есть активное сообщество разработчиков, которые постоянно совершенствуют и добавляют новые функции в проект.
- Масштабируемость: решение Apache Iceberg разработано для эффективной обработки больших наборов данных. Оно может разделять и организовывать данные по нескольким узлам, что помогает распределить рабочую нагрузку и ускорить обработку данных.
- Производительность: Apache Iceberg имеет множество функций для оптимизации производительности запросов, включая столбчатое хранение и методы сжатия, такие как отправка предикатов и эволюция схемы.
- Гибкость: Apache Iceberg позволяет изменить порядок организации данных, чтобы они могли со временем меняться и не нужно было переписывать запросы или перестраивать структуры. Он также поддерживает несколько форматов и источников данных, что упрощает интеграцию с существующими системами.
- Надежность: Apache Iceberg обеспечивает согласованность и надежность данных благодаря поддержке транзакций. Вы можете отслеживать изменения данных с течением времени и возвращаться к историческим версиям, чтобы исправить проблемы.
Какие сервисы AWS поддерживают Iceberg?
Apache Iceberg поддерживает популярные платформы обработки данных, такие как Apache Spark, Apache Flink, Apache Hive и Presto. Сервисы AWS, такие как Amazon Athena, Amazon EMR и AWS Glue, включают встроенную поддержку фреймворков транзакционных озер данных, включая Apache Iceberg. Apache Iceberg в сочетании с поддерживаемыми сервисами AWS создают озеро транзакционных данных, часто основанное на хранилище в S3.
- Amazon Athena – это бессерверный интерактивный аналитический сервис, построенный на базе фреймворков с открытым исходным кодом и поддерживающий форматы открытых таблиц и файлов. Athena предоставляет упрощенный и гибкий способ анализа петабайтов данных там, где они находятся. Athena обеспечивает встроенную поддержку запросов на чтение, перемещение во времени, запись и DDL для таблиц Apache Iceberg, использующих формат Apache Parquet для данных и каталог AWS Glue для хранения метаданных.
- Amazon EMR – решение для больших данных, способное обрабатывать петабайты данных, выполнять интерактивный анализ и машинное обучение на основе платформ с открытым исходным кодом, таких как Apache Spark, Hadoop, Presto и Hive. Начиная с Amazon EMR 6.5.0, вы можете использовать Apache Spark 3 в кластерах Amazon EMR в формате таблицы Iceberg. Фреймворки EMR, включая Spark, Trino, Flink и Hive, поддерживают Apache Iceberg.
- AWS Glue — это бессерверный сервис интеграции данных, который упрощает поиск, подготовку, перемещение и интеграцию данных из множества источников для анализа, машинного обучения и разработки приложений. AWS Glue 3.0 и более поздние версии поддерживают фреймворк Apache Iceberg для озер данных. AWS Glue можно использовать для выполнения операций чтения и записи таблиц Iceberg в Amazon S3 или для работы с таблицами Iceberg с помощью каталога данных AWS Glue. Также поддерживаются дополнительные операции, включая вставку, обновление и все запросы Spark, а также запись Spark.
Что такое Apache Tomcat? | JRebel и XRebel от Perforce
Поскольку в 2022 году 48% разработчиков использовали Apache Tomcat, это одна из ведущих технологий Java на сегодняшний день. Но почему он так популярен и чем он отличается от других популярных веб-серверов и серверов приложений Java?
В этом блоге мы даем обзор Apache Tomcat, в том числе о том, что это такое, как он работает и почему он по-прежнему остается популярным среди пользователей Java сегодня.
- Что такое Apache Tomcat?
- Является ли Tomcat сервером приложений или веб-сервером?
- Популярен ли Tomcat?
- Как работает Tomcat?
- Tomcat против Jetty
- Tomcat против JBoss / Wildfly
- Tomcat против WebLogic
- Заключительные мысли
Что такое Apache Tomcat?
Apache Tomcat — популярный веб-сервер с открытым исходным кодом и контейнер сервлетов для кода Java.
В качестве эталонной реализации Java Servlet и Java Server Pages (JSP) Tomcat был запущен в Sun Microsystems, которая позже передала кодовую базу Apache Software Foundation.
С тех пор несколько добровольцев из Sun внесли свой вклад в продукт, который затем привел к обозначению проекта Apache высшего уровня в 2005 году. В настоящее время Apache Tomcat широко используется многими компаниями, поскольку он реализует многие спецификации Java EE, такие как :
- Сервлет Java
- Страницы JavaServer,
- Язык выражений Java,
- Java WebSockets.
Apache Tomcat 10.0.x является текущим выпуском Tomcat на момент написания этой статьи и все еще находится в стадии активной разработки. Это первый выпуск Tomcat, поддерживающий спецификации Java Servlet 5.0, JavaServer Pages 3.0, Java Expression Language 4.0, WebSocket 2.0 и Authentication 2.0.
Является ли Tomcat сервером приложений или веб-сервером?
Tomcat считается веб-сервером, а не сервером приложений, поскольку он функционирует как веб-сервер и контейнер сервлетов. Он не предоставляет полный набор функций Java EE, но это не обязательно является его недостатком. Многим приложениям требуются только те функции, которые предоставляет Tomcat, поэтому нет смысла использовать более тяжелые инструменты. Вы можете использовать Apache Tomcat для производственных приложений, которые обрабатывают тысячи запросов, если предоставляемых им функций достаточно. В любом случае Tomcat — это готовый к работе инструмент.
Tomcat все еще популярен?
Согласно нашему отчету о производительности разработчиков Java за 2022 год, Tomcat используется 48% команд Java. Ознакомьтесь с полными данными, загрузив отчет сегодня.
Источник: https://www.jrebel.com/resources/java-developer-productivity-report-2022Это связано с тем, что это очень легкий и бесплатный инструмент. Он предлагает большую часть базовых функций, необходимых многим приложениям, имеет быстрое время запуска, а время повторного развертывания намного меньше по сравнению с другими инструментами на рынке.
Если вы когда-нибудь столкнетесь с проблемой, обширная документация, скорее всего, поможет вам найти решение. Tomcat имеет очень хорошую доступную документацию, а то, чего нет в официальной документации, вы найдете в Интернете, поскольку существует множество доступных руководств.
Также важно отметить, что Tomcat не является универсальным решением для всех приложений Java. Выбор правильного сервера всегда зависит от потребностей, предъявляемых приложением.
Как работает Tomcat?
Tomcat — это инструмент, не зависящий от платформы, и, если установлена Java, процесс установки не представляет сложности. Вам просто нужно скачать нужную версию с официального сайта, а затем распаковать ее в своей файловой системе. Вы можете убедиться, что Tomcat установлен правильно, запустив сервер с помощью сценария запуска в папке $CATALINA_BASE/bin.
После запуска сервера откройте интернет-браузер и перейдите по URL-адресу http://localhost:8080 (если используется конфигурация по умолчанию). Если вы видите страницу, аналогичную картинке ниже, это означает, что Tomcat был установлен правильно.
Развернуть приложение на сервере очень просто. Tomcat поддерживает развертывание при запуске, что означает, что вы копируете сжатое (.WAR) или несжатое (развернутое веб-приложение) в нужный каталог, то есть $CATALINA_BASE/webapps/.
Если вы предпочитаете развертывание приложения на лету, вы можете развернуть приложение на работающем сервере Tomcat в графическом интерфейсе Tomcat Web Application Manager. Всеми развернутыми приложениями можно управлять через приложение Manager в Tomcat.
Существует несколько основных компонентов, которые использует Tomcat. Компонент Catalina является фактическим контейнером сервлета, который реализует спецификацию для сервлетов и страниц JavaServer. Другой компонент, Coyote, обрабатывает всю HTTP-связь и перенаправляет запросы в Tomcat Engine (Catalina).
📕 Связанный ресурс: Нужна поддержка Tomcat? Поговорите с экспертом
Tomcat и Jetty
Когда речь идет о легких серверах, Tomcat чаще всего сравнивают с Jetty. Jetty — это HTTP-сервер и контейнер сервлетов, который часто используется в качестве встроенного сервера. Долгое время Jetty был единственным инструментом, способным работать во встроенном режиме. На данный момент Tomcat уже может работать и во встроенном режиме.
Оба инструмента имеют открытый исходный код, при этом Tomcat разработан в соответствии с лицензией Apache 2.0 с открытым исходным кодом и лицензией Jetty, управляемой Eclipse Foundation, и доступен с Apache 2.0 и общедоступной лицензией Eclipse 1.0.
Преимущества Tomcat | Преимущества Jetty |
---|---|
Лицензия с Apache 2.0 | Приоритизация потребностей сообщества пользователей 9 0094 |
Высокая доля рынка | Малый объем памяти |
Будьте в курсе последних спецификаций | Встраиваемый |
Очень хорошо задокументирован | |
Встраиваемый 90 094 |
Оба инструмента очень хороши и имеют много общих черт. те же особенности. Хотя Tomcat очень хорошо документирован и имеет большую долю рынка, для приложений, ориентированных на малое потребление памяти, Jetty может быть немного лучшим выбором.
Сравнение Tomcat и WebLogic Server
Полная реализация стандартов Java EE доступна в Oracle WebLogic Server. WebLogic является коммерческим проектом, в настоящее время разрабатываемым корпорацией Oracle, поэтому он лицензирован и требует покупки лицензии для использования в коммерческих целях.
WebLogic имеет несколько преимуществ по сравнению с Tomcat: он поддерживает распределенные транзакции с использованием менеджеров транзакций, поддерживает Enterprise Java Beans и предлагает другие функции, которые делают его хорошим выбором для коммерческих и корпоративных приложений. Кроме того, WebLogic поставляется с отличной консолью администрирования, которая упрощает управление сервером.
Преимущества Tomcat | Преимущества WebLogic |
---|---|
Открытый исходный код | Разработано корпорацией Oracle | 9009 1
Быстрый запуск и повторное развертывание | Поддержка Enterprise Java Beans (EJB) |
Может свободно использоваться для коммерческих проектов< | Управление транзакциями |
Если вашему приложению требуются большинство или все функции Java EE и вам нужна коммерческая поддержка, WebLogic — это то, что вам нужно. Однако учтите, что это не бесплатно.
Tomcat против JBoss/Wildfly
Другим сервером приложений, реализующим полную спецификацию Java EE, является JBoss AS. Сервер приложений JBoss, разработанный Red Hat, представляет собой платформу с открытым исходным кодом, которая предлагает богатый набор функций и доступна для всех платформ, на которых доступна Java. Для тех, кого смущает название, JBoss AS был переименован в WildFly, который представляет собой версию сервера приложений для сообщества, имеющую сертификацию Java EE8.
Red Hat не поддерживает проект сообщества WildFly. Но из-за его популярности в Интернете есть много руководств, а также большая база пользователей на StackOverflow. Если вашей основной целью является использование JBoss в производственной среде, вы можете рассмотреть возможность подписки на Red Hat, так как это единственный способ получить поддержку. Продукт, поддерживаемый на коммерческой основе, называется JBoss EAP и фактически является производным от проекта сообщества WildFly.
Преимущества Tomcat | Преимущества JBoss EAP / WildFly |
---|---|
Открытый исходный код | Полная Java Бесплатный сервер приложений EE (WildFly) |
Быстрый запуск и повторное развертывание | Коммерческая поддержка (JBoss EAP |
Сертификация Java EE 8 |
Заключительные мысли
Выбор правильного сервера приложений может быть непростым решением для групп разработчиков Java. Но есть одно но. ясно, вам всегда нужно учитывайте потребности приложения. Это предотвратит ситуацию, когда вы выберете инструмент, который предлагает больше, чем нужно приложению, добавляя нежелательную нагрузку ко всему остальному — памяти, времени запуска и конфигурации.0003
Если вы не уверены, какой сервер вам подходит, вы можете начать с Tomcat и посмотреть, достаточно ли этого. Как вы видели выше, установка и развертывание занимают считанные минуты.
Хотя Apache Tomcat на самом деле не является «чистым» сервером приложений, сравнение его с другими инструментами, упомянутыми выше, должно дать вам представление о том, как следует применять каждый инструмент. Что касается облегченных инструментов, то основным конкурентом Tomcat является Jetty, так как оба реализуют лишь некоторые функции Java EE. Если вам требуется корпоративная поддержка, рассмотрите возможность использования JBoss EAP.
Дополнительные ресурсы
Если вам нужна дополнительная информация о популярных серверных технологиях Java, обязательно ознакомьтесь с приведенными ниже ресурсами.
- Отчет – Отчет о продуктивности разработчиков Java за 2022 год
- Веб-семинар – Изучение отчета о продуктивности разработчиков Java за 2022 год
- Видео – Установка JRebel для Tomcat менее чем за пять минут 0049
Хотите узнать, как JRebel может помочь ускорить разработку Java? Начните пропускать повторные развертывания сегодня с бесплатной пробной версией JRebel.
Попробуйте JRebel Free
Примечание редактора: этот блог был первоначально опубликован в 2020 году и обновлен в марте 2022 года. разница между веб-сервером Apache и Tomcat? » Вопрос заставил вас почесать голову? Если да, то не волнуйтесь! Вы не одиноки в этой неразберихе, возникающей смутными мыслями вокруг этой темы. Даже разработчики сталкиваются с большим количеством сомнений, когда сталкиваются с этим вопросом. Но, чтобы избежать этого, выслушайте это очень четко. Когда кто-то задает вам этот вопрос, он хочет знать разницу между Apache Tomcat и веб-сервером Apache. Обратите внимание, что и Apache Tomcat, и веб-сервер Apache — это разные проекты, поддерживаемые Apache Software Foundation, т. е. это не одно и то же. Как только вы поймете этот факт, вам станет легче распознать некорректность запросов Apache и Tomcat. Эта путаница в первую очередь начинается с того факта, что Apache стал в разговорной речи синонимом веб-сервера Apache. HTTP-сервер Apache был установлен в 1999 и был первым проектом Apache Software Foundation. Однако синонимичное использование Apache для HTTP-сервера Apache привело к проблеме именования, с которой мы сталкиваемся сегодня. В этом блоге мы обсудим суть обоих этих проектов и их отличия друг от друга.
Прежде чем перейти непосредственно к различиям, давайте разберемся в основах веб-сервера Apache и Tomcat, а также в их различных плюсах и минусах.
Что такое веб-сервер Apache?
Веб-сервер Apache — это бесплатный веб-сервер с открытым исходным кодом, который отображает веб-контент через Интернет. В настоящее время он также известен как Apache. Кроме того, это один из самых популярных HTTP-клиентов с открытым исходным кодом в Интернете. Он работает на 67% всех веб-серверов в мире. Кроме того, его можно настроить для удовлетворения потребностей различных сред с помощью расширений и модулей. Вы будете удивлены, узнав, что большинство хостинг-провайдеров WordPress используют Apache в качестве программного обеспечения веб-сервера. Однако WordPress может работать и на других веб-серверах. Некоторые из популярных компаний, которые используют Apache, это Paypal, Adobe, eBay, Linkedin и Facebook. Основная работа веб-сервера Apache заключается в том, чтобы принимать запросы от веб-браузеров, таких как Google Chrome и Microsoft Edge, и преобразовывать языки программирования в хорошо разработанные веб-страницы, видимые зрителям.
Основные возможности веб-сервера Apache
- Unix Threading . В системах Unix и поддержке потоков POSIX Apache работает в гибридном многопроцессорном и многопоточном режиме, что улучшает масштабируемость для многих конфигураций.
- Улучшенная поддержка платформ, отличных от UNIX . HTTP-сервер Apache лучше, быстрее и стабильнее на платформах, отличных от UNIX, таких как BeOS, OS/2 и Windows. Кроме того, с введением модулей многопроцессорной обработки и ARP (Apache Portable Runtime) эти платформы теперь могут быть реализованы и в их собственных API, что позволяет избежать проблемы с низкой производительностью слоев эмуляции POSIX.
- Фильтрация Apache . Модули Apache также могут быть написаны как фильтры, которые могут действовать как поток контента, доставляемого на сервер или с сервера. Это позволяет анализировать выходные данные CGI-скриптов с помощью фильтра include.
- Многоязычные ответы об ошибках — Apache предлагает браузеру многоязычные ответные сообщения об ошибках с использованием документов SSI. Они также могут быть настроены администратором для достижения единообразного внешнего вида веб-сайта.
- Упрощенная конфигурация — Apache имеет очень простую конфигурацию, которая не вызывает затруднений. Таким образом, с часто сбивающими с толку директивами Port и BindAddress покончено. Apache использует директиву Listen только для привязки IP-адреса.
Есть много плюсов, которые оправдывают использование веб-сервера Apache в качестве решения для веб-хостинга. Но игра на этом не останавливается. Помимо некоторых удивительных моментов, которые убеждают вас в покупке, есть и некоторые минусы, которые могут заставить вас взглянуть на другие альтернативы Apache. Начнем с сладкого, то есть с плюсов!Плюсы и минусы веб-сервера Apache
- Apache — это решение для веб-хостинга с открытым исходным кодом. Таким образом, любой может использовать его бесплатно.
- Настраиваемый код Apache упрощает для администраторов настройку соответствующих потребностей.
- Apache позволяет добавлять многочисленные функции и модули для повышения функциональности и производительности.
- Высокая надежность и простота
- Apache может работать практически на любой операционной системе
- Apache имеет достойную похвалы документацию, очень обширную и полезную.
- Способность Apache изменять конфигурацию представляет собой серьезную угрозу при работе с кодом.
- Средство конфигурации открывает новые возможности для новых ошибок и ошибок. Это означает больше времени и больше потребления ресурсов.
- Платформа требует строгой модернизации и обновлений для бесперебойной работы без каких-либо ошибок.
- Хотя на веб-сайтах он работает без сбоев, некоторые крупные веб-сайты с интенсивным трафиком вызывают плохую и медленную работу.
Итак, это плюсы и минусы, которые вы можете принять во внимание, начиная с этого решения для веб-хостинга. Еще одно решение для веб-хостинга, предлагающее аналогичные услуги, — Tomcat.Что такое Tomcat?
Tomcat также является платформой с открытым исходным кодом и зрелым контейнером сервлетов Java. Этот контейнер помогает устанавливать различные корпоративные спецификации Java, такие как веб-сайты, API, JavaServer Pages (JSP), Java-сервлеты и т. д. Платформа Apache Tomcat была разработана в 1998 в среде с участием, поэтому он начинался как ссылка для первого API сервлета и страниц. Но это не эталонная реализация этих технологий. До сих пор он считается одним из лучших и наиболее предпочтительных решений для веб-хостинга javascript.
Основные характеристики Tomcat
- Функция обнаружения и предотвращения утечек памяти Tomcat устраняет некоторые распространенные причины утечек памяти из пространства PermGen. Это достигается путем удаления ссылок на объекты, которые не подвергаются сборке мусора. Эта функция предназначена для разработчиков, развертывающих приложения на Tomcat в своих средах разработки. В средах разработки это помогает разработчикам сэкономить время, которое они тратят на повторное развертывание новых файлов войны без перезапуска Tomcat.
- Новый разъем NIO в Tomcat позволяет вам позаботиться обо всей асинхронной передаче низкоуровневых данных ввода-вывода. Это, в свою очередь, помогает Tomcat реализовать расширенный контроль над своими приложениями.
- Новый исполнительный элемент Tomcat позволяет пользователям настраивать внедряемые пулы потоков, которые могут совместно использоваться различными приложениями.
- Пользователи также могут вносить определенные изменения в конфигурацию, чтобы определить несколько элементов шаблона URL в одном элементе отображения сервлета.
- Tomcat предлагает полную поддержку Comet, нового метода отправки HTTP и API SEND_FILE, который помогает передавать файлы через соединение через сокет.
Плюсы и минусы Tomcat
- Самым большим плюсом использования Apache Tomcat является то, что он имеет открытый исходный код. Поэтому нет необходимости тратить деньги на использование этого программного обеспечения. Нужно только скачать, настроить и начать работать над ним через интернет.
- Tomcat регулярно предоставляет обновления. Не только это, но и исправление всех проблем и ошибок, которые облегчают разработчикам работу с программным обеспечением.
- Tomcat также можно настроить для запуска нескольких веб-приложений на разных портах. Например, можно одновременно запускать три приложения на портах 8080, 8081, 9090.
- Tomcat можно использовать в нескольких операционных системах. Некоторые из них включают операционные системы Windows, Mac OS, Linux.
Apache Tomcat очень легкий. Он легкий, поскольку потребляет меньше памяти и ресурсов, что помогает приложению работать плавно и без каких-либо особых проблем.
- Apache Tomcat не так быстр, как Apache HTTP, когда речь идет о работе со статическими страницами.
- Apache Tomcat сталкивается с рядом проблем при установке, таких как установка SSL.
- Он имеет очень слабый и простой пользовательский интерфейс по сравнению с различными другими решениями для веб-хостинга на рынке.
- Иногда возникают проблемы с памятью и обработкой журналов.
Использование определенных основ, таких как речь и использование, помогает нам лучше понять суть этих решений веб-хостинга, поэтому, не теряя больше времени, давайте посмотрим на разницу между веб-сервером Apache и Tomcat.
Веб-сервер Apache и Tomcat — ключевые отличия
- Basic — сервер Tomcat представляет собой JSP или сервер-контейнер сервлетов. С другой стороны, если мы говорим об Apache HTTP, это HTTP-сервер, как следует из названия. Он обслуживает файлы по протоколу HTTP.
- Использование — Tomcat в основном используется для размещения кода, основанного на Java. В то время как Apache HTTP можно использовать для размещения приложений, написанных на любом языке программирования, таком как Java, Python и т. д.
- Возможность обработки — сервер Tomcat используется для обработки как статических, так и динамических страниц. Статические страницы — это те страницы, которые разработаны с использованием HTML, а динамические страницы — это те, которые разработаны с использованием Servlet и JSP. Apache HTTP можно использовать для обработки статических страниц, разработанных с помощью HTML, и динамических страниц, написанных на Ruby, PHP. Помимо этого, Apache HTTP также может работать с другими языками программирования с помощью дополнительных модулей, предлагаемых самим Apache.
- Настраиваемость и надежность — Tomcat не очень надежен и не поддается настройке. Apache HTTP, с другой стороны, очень надежный и настраиваемый.
- Язык программирования . Tomcat в основном написан на Java, а HTTP-сервер Apache написан на языке программирования C.
- Скорость . При обслуживании статического контента в браузере Tomcat намного медленнее отображает контент, чем Apache HTTP. Веб-сервер Apache HTTP быстро и быстро обслуживает статический контент через Интернет.
Заключение
В общем, это были самые важные основы, которые вы должны учитывать при выборе между обоими этими решениями для веб-хостинга. Не существует единого ответа, указывающего на лучшее из двух, но есть различные параметры, которые говорят, какой из них может быть лучшим для вас. Если вы ищете высокую скорость и больше возможностей для настройки, веб-сервер Apache будет для вас лучшим вариантом, но если вы предпочитаете Java языку программирования C, мы предлагаем вам выбрать Tomcat.