A LAMP ( Linux , Apache , MySQL , Perl / P HP/ P ython) — один из самых распространенных программных стеков для самых популярных веб- приложений . Его общая модель программного стека имеет в значительной степени взаимозаменяемые компоненты. [1]
Каждая буква в аббревиатуре обозначает один из четырех ее структурных элементов с открытым исходным кодом :
Компоненты стека LAMP присутствуют в репозиториях программного обеспечения большинства дистрибутивов Linux .
Аббревиатура LAMP была придумана Михаэлем Кунце в выпуске Computertechnik за декабрь 1998 года , немецком компьютерном журнале, когда он продемонстрировал, что пакет бесплатного и открытого программного обеспечения «может быть реальной альтернативой дорогим коммерческим пакетам». [2] С тех пор O'Reilly Media и MySQL объединились, чтобы популяризировать аббревиатуру и пропагандировать ее использование. [3] Один из первых стеков программного обеспечения с открытым исходным кодом для Интернета, термин и концепция стали популярными. Стек способен размещать различные веб-фреймворки и приложения, такие как WordPress и Drupal . [4]
Модель LAMP была адаптирована к другим компонентам, хотя обычно состоит из бесплатного и открытого программного обеспечения . С ростом использования архетипического LAMP появились вариации и ретронимы для других комбинаций операционной системы, веб-сервера, базы данных и языка программного обеспечения. Например, эквивалентная установка в семействе операционных систем Microsoft Windows известна как WAMP . Альтернативный запуск IIS вместо Apache называется WIMP . Варианты, включающие другие операционные системы, включают DAMP, который использует операционную систему Darwin. [5]
Веб-сервер или система управления базами данных также различаются. LEMP — это версия, в которой Apache был заменен на более легкий веб-сервер Nginx . [6] Версия, в которой MySQL был заменен на PostgreSQL , называется LAPP, или иногда, сохраняя исходную аббревиатуру, LAMP (Linux / Apache / Middleware (Perl, PHP, Python, Ruby) / PostgreSQL). [7]
Пакет LAMP можно комбинировать со многими другими бесплатными и открытыми программными пакетами, включая:
В качестве другого примера можно привести программное обеспечение, которое Wikipedia и другие проекты Фонда Wikimedia используют для своей базовой инфраструктуры, — это настраиваемый стек LAMP с дополнениями, такими как Linux Virtual Server (LVS) для балансировки нагрузки , а также Ceph и Swift для распределенных хранилищ объектов. [ необходима ссылка ]
Linux — это Unix-подобная компьютерная операционная система, собранная по модели разработки и распространения свободного и открытого программного обеспечения . Большинство дистрибутивов Linux , как наборы программного обеспечения, основанные на ядре Linux и часто на системе управления пакетами , предоставляют полные настройки LAMP через свои пакеты. По данным W3Techs в октябре 2013 года, 58,5% доли рынка веб-серверов делятся между Debian и Ubuntu , в то время как RHEL , Fedora и CentOS вместе делят 37,3%. [8]
Традиционно роль веб-сервера LAMP выполнял Apache, а с тех пор к нему присоединились и другие веб-серверы, такие как Nginx .
Apache разрабатывается и поддерживается открытым сообществом разработчиков под эгидой Apache Software Foundation . Выпущенный под лицензией Apache License , Apache является программным обеспечением с открытым исходным кодом . Поддерживается широкий спектр функций, и многие из них реализованы в виде скомпилированных модулей , расширяющих основные функциональные возможности Apache. Они могут варьироваться от поддержки языка программирования на стороне сервера до аутентификации.
Первоначальная роль MySQL как системы управления реляционными базами данных LAMP с тех пор поочередно выполнялась другими системами, такими как PostgreSQL , MariaDB (разработанная сообществом ветвь MySQL, созданная ее первоначальными разработчиками) и даже базами данных NoSQL, такими как MongoDB .
MySQL — многопоточная , многопользовательская система управления базами данных SQL , [ 9] приобретенная корпорацией Sun Microsystems в 2008 году, которая затем была приобретена корпорацией Oracle в 2010 году. [10] С первых лет своей деятельности команда MySQL сделала свой исходный код доступным на условиях GNU General Public License , а также в соответствии с различными соглашениями о правах собственности .
PostgreSQL также является объектно-реляционной системой управления базами данных, соответствующей стандарту ACID, разработанной PostgreSQL Global Development Group.
MongoDB — это база данных NoSQL , которая отказывается от традиционной структуры реляционной базы данных в пользу документов в формате JSON с динамическими схемами (называемых форматом BSON ), что упрощает и ускоряет интеграцию данных в определенные типы приложений.
Роль PHP как языка программирования приложений LAMP также выполняли другие языки, такие как Perl и Python.
PHP — это серверный язык сценариев, разработанный для веб-разработки , но также используемый как язык программирования общего назначения . Код PHP интерпретируется веб-сервером через модуль процессора PHP, который генерирует результирующую веб-страницу. Команды PHP могут быть опционально встроены непосредственно в исходный документ HTML , а не вызывать внешний файл для обработки данных. Он также эволюционировал, включив возможность интерфейса командной строки и может использоваться в автономных графических приложениях . [11] PHP — это свободное программное обеспечение, выпущенное в соответствии с условиями PHP License , которая несовместима с GNU General Public License (GPL) из-за ограничений, которые PHP License накладывает на использование термина PHP . [12]
Perl — это семейство высокоуровневых , универсальных, интерпретируемых, динамических языков программирования . Языки этого семейства включают Perl 5 и Raku . [13] Они предоставляют расширенные возможности обработки текста без произвольных ограничений длины данных многих современных инструментов командной строки Unix , [14] облегчая манипуляцию текстовыми файлами . Perl 5 приобрел широкую популярность в конце 1990-х годов как язык сценариев CGI для Интернета, отчасти благодаря своим возможностям синтаксического анализа . [15]
Python — широко используемый универсальный, высокоуровневый, интерпретируемый язык программирования. [16] Python поддерживает несколько парадигм программирования , включая объектно-ориентированную , императивную , функциональную и процедурную парадигмы. Он имеет динамическую систему типов , автоматическое управление памятью , стандартную библиотеку и строгое использование пробелов . [17] Как и другие динамические языки , Python часто используется в качестве языка сценариев , но также используется в широком диапазоне несценарных контекстов.
Для веб-сайтов, которые обслуживают большое количество запросов или предоставляют услуги, требующие высокого времени безотказной работы, требуются особые подходы . Подходы к обеспечению высокой доступности для стека LAMP могут включать несколько веб-серверов и серверов баз данных в сочетании с дополнительными компонентами, которые выполняют логическую агрегацию ресурсов, предоставляемых каждым из серверов, а также распределение рабочей нагрузки по нескольким серверам. Агрегация веб-серверов может быть обеспечена путем размещения балансировщика нагрузки перед ними, например, с помощью Linux Virtual Server (LVS). Для агрегации серверов баз данных MySQL предоставляет внутренние механизмы репликации, которые реализуют отношение «главный/подчиненный» между исходной базой данных (главной) и ее копиями (подчиненными). [18]
Такие высокодоступные настройки могут также улучшить доступность экземпляров LAMP, предоставляя различные формы избыточности , что позволяет определенному количеству компонентов (отдельных серверов) испытывать простой, не прерывая пользователей услуг, предоставляемых в целом. Такие избыточные настройки могут также обрабатывать аппаратные сбои, приводящие к потере данных на отдельных серверах, таким образом, что предотвращает фактическую потерю коллективно хранимых данных. Помимо более высокой доступности, такие настройки LAMP способны обеспечить почти линейное улучшение производительности для служб, имеющих количество внутренних операций чтения базы данных, намного превышающее количество операций записи/обновления. [18]
"Perl" — это семейство языков, "Perl 6" — часть семейства, но это отдельный язык, имеющий собственную команду разработчиков. Его существование не оказывает существенного влияния на продолжающуюся разработку "Perl 5".