Введение
LAMP (Linux, Apache, MySQL, Perl/PHP/Python) — это акроним, обозначающий один из самых распространенных программных стеков для наиболее популярных веб-приложений. Его универсальная модель программного стека позволяет в значительной степени заменять компоненты друг на друга. Каждая буква в акрониме соответствует одному из четырех компонентов с открытым исходным кодом: Linux — операционная система, Apache HTTP Server — веб-сервер, MySQL — система управления реляционными базами данных, Perl, PHP или Python — язык программирования.
LAMP (Linux, Apache, MySQL, Perl/PHP/Python) is an acronym denoting one of the most common software stacks for the web's most popular applications. Its generic software stack model has largely interchangeable components. Each letter in the acronym stands for one of its four open source building blocks:
Linux for the operating system
Apache HTTP Server
MySQL for the relational database management system
Perl, PHP, or Python for the programming language
The components of the LAMP stack are present in the software repositories of most Linux distributions.
Компоненты стека LAMP доступны в репозиториях программного обеспечения большинства дистрибутивов Linux.
LAMP (Linux, Apache, MySQL, Perl/PHP/Python) is an acronym denoting one of the most common software stacks for the web's most popular applications. Its generic software stack model has largely interchangeable components. Each letter in the acronym stands for one of its four open source building blocks:
Linux for the operating system
Apache HTTP Server
MySQL for the relational database management system
Perl, PHP, or Python for the programming language
The components of the LAMP stack are present in the software repositories of most Linux distributions.
История
Акроним LAMP был придуман Майклом Кунце в декабрьском выпуске немецкого журнала по вычислительной технике Computertechnik, где он показал, что набор бесплатного и открытого программного обеспечения "может стать жизнеспособной альтернативой дорогостоящим коммерческим продуктам". С тех пор O'Reilly Media и MySQL объединили усилия для популяризации этого акронима и продвижения его использования. Будучи одним из первых стеков открытого программного обеспечения для веба, этот термин и сама концепция приобрели широкую известность. Этот стек позволяет размещать различные веб-фреймворки и приложения, такие как WordPress и Drupal.
Линукс
Linux — это компьютерная операционная система, подобная Unix, созданная по модели разработки и распространения свободного и открытого программного обеспечения. Большинство дистрибутивов Linux, представляющих собой наборы программного обеспечения, основанные на ядре Linux и часто включающие систему управления пакетами, предоставляют готовые комплекты LAMP через свои пакеты. По данным W3Techs на октябрь 2013 года, 58,5% рынка веб-серверов приходилось на Debian и Ubuntu, а на RHEL, Fedora и CentOS вместе — 37,3%.
Апачи
Роль веб-сервера в LAMP традиционно выполнял Apache, а затем к нему добавились и другие веб-серверы, такие как Nginx. Apache разрабатывается и поддерживается открытым сообществом разработчиков под эгидой Apache Software Foundation. Распространяемый по лицензии Apache, Apache является программным обеспечением с открытым исходным кодом. Поддерживается широкий спектр возможностей, и многие из них реализованы в виде компилируемых модулей, расширяющих базовую функциональность Apache. Эти модули могут обеспечивать поддержку языков программирования на стороне сервера и аутентификацию, среди прочего.
MySQL и альтернативные базы данных
Первоначальная роль MySQL как реляционной системы управления базами данных в стеке LAMP впоследствии была заменена другими системами, такими как PostgreSQL, MariaDB (ответвление MySQL, разработанное сообществом и его первоначальными разработчиками), и даже NoSQL-базами данных, такими как MongoDB. MySQL — это многопоточная, многопользовательская система управления базами данных SQL, приобретенная Sun Microsystems в 2008 году, а затем корпорацией Oracle в 2010 году. С самого начала команда MySQL предоставляла исходный код под лицензией GNU General Public License, а также на условиях различных проприетарных соглашений. PostgreSQL также является объектно-реляционной системой управления базами данных, соответствующей требованиям ACID, и разработана PostgreSQL Global Development Group. MongoDB — это NoSQL-база данных, которая отказывается от традиционной реляционной структуры в пользу документов, подобных JSON, с динамическими схемами (формат называется BSON), что упрощает и ускоряет интеграцию данных в определенных типах приложений.
PHP и альтернативы
Роль PHP в качестве языка прикладного программирования в составе LAMP также выполняют другие языки, такие как Perl и Python. PHP — это серверный скриптовый язык, разработанный для веб-разработки, но также используемый как язык программирования общего назначения. Код PHP интерпретируется веб-сервером посредством модуля обработки PHP, который генерирует результирующую веб-страницу. Команды PHP могут быть опционально встроены непосредственно в исходный HTML-документ, вместо вызова внешнего файла для обработки данных. PHP также развился и теперь включает в себя возможности интерфейса командной строки и может использоваться в автономных графических приложениях. PHP является свободным программным обеспечением, распространяемым на условиях лицензии PHP, которая несовместима с лицензией GNU General Public License (GPL) из-за ограничений, накладываемых лицензией PHP на использование термина "PHP". Perl — это семейство высокоуровневых, интерпретируемых, динамических языков программирования общего назначения. В это семейство входят Perl 5 и Raku. Они предоставляют расширенные возможности обработки текста без произвольных ограничений на длину данных, характерных для многих современных инструментов командной строки Unix, что облегчает манипулирование текстовыми файлами. Perl 5 получил широкую популярность в конце 1990-х годов как язык сценариев CGI для веб-разработки, отчасти благодаря своим возможностям синтаксического анализа. Python — широко используемый язык программирования общего назначения, высокого уровня, интерпретируемый. Python поддерживает несколько парадигм программирования, включая объектно-ориентированную, императивную, функциональную и процедурную. Он характеризуется динамической системой типов, автоматическим управлением памятью, стандартной библиотекой и строгим использованием отступов. Как и другие динамические языки, Python часто используется в качестве скриптового языка, но также применяется в широком спектре областей, не связанных со скриптами.
Высокая доступность и балансировка нагрузки
Специфические подходы необходимы для веб-сайтов, обслуживающих большое количество запросов или предоставляющих услуги, требующие высокой безотказности. Подходы к обеспечению высокой доступности для стека LAMP могут включать несколько веб-серверов и серверов баз данных, в сочетании с дополнительными компонентами, выполняющими логическую агрегацию ресурсов, предоставляемых каждым сервером, а также распределение нагрузки между несколькими серверами. Агрегация веб-серверов может быть реализована путем размещения перед ними балансировщика нагрузки, например, с использованием Linux Virtual Server (LVS). Для агрегации серверов баз данных MySQL предоставляет встроенные механизмы репликации, реализующие отношения "главный-ведомый" (master/slave) между исходной базой данных (master) и ее копиями (slaves). Такие конфигурации высокой доступности также могут повысить доступность экземпляров LAMP, обеспечивая различные формы резервирования, позволяющие определенному количеству компонентов (отдельных серверов) выходить из строя без прерывания работы пользователей. Такие резервные конфигурации также могут справляться с аппаратными сбоями, приводящими к потере данных на отдельных серверах, предотвращая тем самым фактическую потерю коллективно хранимых данных. Помимо повышения доступности, такие установки LAMP способны обеспечивать почти линейный прирост производительности для сервисов, в которых количество операций чтения из базы данных значительно превышает количество операций записи/обновления.