# LAMP

Um LAMP (Linux, Apache, MySQL, Perl/PHP/Python) é uma das pilhas de software mais comuns para os aplicativos mais populares da web. Seu modelo genérico de pilha de software tem componentes amplamente intercambiáveis.
Cada letra na sigla representa um dos seus quatro blocos de construção de código aberto:
* Linux para o sistema operacional;
* Servidor HTTP Apache;
* MySQL para o sistema de gerenciamento de banco de dados relacional;
* Perl, PHP ou Python para a linguagem de programação.
Os componentes da pilha LAMP estão presentes nos repositórios de software da maioria das distribuições Linux.

## História

O acrônimo LAMP foi cunhado por Michael Kunze na edição de dezembro de 1998 da Computertechnik, uma revista alemã de computação, quando ele demonstrou que um pacote de software livre e de código aberto "poderia ser uma alternativa viável aos caros pacotes comerciais". Desde então, a O'Reilly Media e a MySQL se uniram para popularizar o acrônimo e evangelizar seu uso. Uma das primeiras pilhas de software de código aberto para a web, o termo e o conceito se tornaram populares. A pilha é capaz de hospedar uma variedade de estruturas e aplicativos da web, como WordPress e Drupal.

## Variantes

O modelo LAMP foi adaptado para outros componentes, embora consistindo tipicamente em software livre e de código aberto. Com o uso crescente do LAMP arquetípico, variações e retrônimos apareceram para outras combinações de sistema operacional, servidor web, banco de dados e linguagem de software. Por exemplo, uma instalação equivalente na família do sistema operacional Microsoft Windows é conhecida como WAMP. Uma alternativa executando o IIS no lugar do Apache é chamada WIMP. Variantes envolvendo outros sistemas operacionais incluem DAMP, que usa o sistema operacional Darwin.
O servidor web ou sistema de gerenciamento de banco de dados também varia. LEMP é uma versão onde o Apache foi substituído pelo servidor web mais leve Nginx. Uma versão onde o MySQL foi substituído pelo PostgreSQL é chamada LAPP, ou às vezes mantendo a sigla original, LAMP (Linux / Apache / Middleware (Perl, PHP, Python, Ruby) / PostgreSQL).
O pacote LAMP pode ser combinado com muitos outros pacotes de software livre e de código aberto, incluindo:
* netsniff-ng para testes de segurança e reforço;
* Snort, um sistema de detecção de intrusão (IDS) e prevenção de intrusão (IPS);
* RRDTool para diagramas;
* Nagios, Collectd ou Cacti, para monitoramento.
Como outro exemplo, o software que a Wikipédia e outros projetos da Wikimedia Foundation usam para sua infraestrutura subjacente é uma pilha LAMP personalizada com adições como o Linux Virtual Server (LVS) para balanceamento de carga e Ceph e Swift para armazenamentos de objetos distribuídos.

## Componentes de software
### Linux

O Linux é um sistema operacional de computador tipo Unix, montado sob o modelo de desenvolvimento e distribuição de software livre e de código aberto. A maioria das distribuições Linux, como coleções de software baseadas no núcleo Linux e frequentemente em um sistema de gerenciamento de pacotes, fornece configurações LAMP completas por meio de seus pacotes. De acordo com a W3Techs em outubro de 2013, 58,5% da participação de mercado de servidores web é compartilhada entre Debian e Ubuntu, enquanto RHEL, Fedora e CentOS juntos compartilham 37,3%.

### Apache

A função de servidor web do LAMP tem sido tradicionalmente fornecida pelo Apache, e desde então incluiu outros servidores web como o Nginx.
O Apache é desenvolvido e mantido por uma comunidade aberta de desenvolvedores sob os auspícios da Apache Software Foundation. Lançado sob a Licença Apache, o Apache é um software de código aberto. Uma grande variedade de recursos são suportados, e muitos deles são implementados como módulos compilados que estendem a funcionalidade principal do Apache. Eles podem variar de suporte à linguagem de programação do lado do servidor até autenticação.

### MySQL e alternativas de banco de dados

O papel original do MySQL como sistema de gerenciamento de banco de dados relacional do LAMP foi desde então provisionado alternadamente por outros como PostgreSQL, MariaDB (uma ramificação da MySQL desenvolvido pela comunidade desenvolvido por seus desenvolvedores originais) e até mesmo bancos de dados NoSQL como MongoDB.
O MySQL é um sistema de gerenciamento de banco de dados para SQL multithread e multiusuário, adquirido pela Sun Microsystems em 2008, que foi então adquirida pela Oracle Corporation em 2010. Desde seus primeiros anos, a equipe do MySQL disponibilizou seu código-fonte sob os termos da GNU General Public License, bem como sob uma variedade de acordos proprietários.
O PostgreSQL também é um sistema de gerenciamento de banco de dados objeto-relacional compatível com ACID desenvolvido pelo PostgreSQL Global Development Group.
O MongoDB é um banco de dados NoSQL que evita a estrutura tradicional de banco de dados relacional em favor de documentos tipo JSON com esquemas dinâmicos (chamando o formato BSON), tornando a integração de dados em certos tipos de aplicativos mais fácil e rápida.

### PHP e alternativas

O papel do PHP como linguagem de programação de aplicativos do LAMP também foi desempenhado por outras linguagens, como Perl e Python.
O PHP é uma linguagem de script do lado do servidor projetada para desenvolvimento web, mas também usada como uma linguagem de programação de propósito geral. O código PHP é interpretado por um servidor web por meio de um módulo processador PHP, que gera a página web resultante. Os comandos PHP podem ser opcionalmente incorporados diretamente em um documento de origem HTML em vez de chamar um arquivo externo para processar dados. Ele também evoluiu para incluir uma capacidade de interface de linha de comandos e pode ser usado em aplicativos gráficos autônomos. O PHP é um software livre lançado sob os termos da Licença PHP, que é incompatível com a GNU General Public License (GPL) devido às restrições que a Licença PHP impõe ao uso do termo PHP.
A Perl é uma família de linguagens de programação dinâmicas, interpretadas, de alto nível e de propósito geral. As linguagens desta família incluem a Perl 5 e a Raku. Elas fornecem recursos avançados de processamento de texto sem os limites arbitrários de comprimento de dados de muitas ferramentas de linha de comando contemporâneas do Unix, facilitando a manipulação de arquivos de texto. A Perl 5 ganhou popularidade generalizada no final da década de 1990 como uma linguagem de script CGI para a Web, em parte devido às suas habilidades de análise.
A Python é uma linguagem de programação interpretada, de alto nível e de propósito geral amplamente usada. A Python suporta múltiplos paradigmas de programação, incluindo paradigmas orientados a objetos, imperativos, funcionais e procedurais. Ele apresenta um sistema de tipo dinâmico, gerenciamento de memória automático, uma biblioteca padrão e uso estrito de espaços em branco. Como outras <!-en:Dynamic programming language-->linguagens dinâmicas, a Python é frequentemente usada como uma linguagem de script, mas também é usada em uma ampla gama de contextos que não são de script.

## Alta disponibilidade e balanceamento de carga

Abordagens específicas são necessárias para sites que atendem a um grande número de solicitações ou fornecem serviços que exigem alto tempo de atividade. Abordagens de alta disponibilidade para a pilha LAMP podem envolver vários servidores web e de banco de dados, combinados com componentes adicionais que realizam agregação lógica de recursos fornecidos por cada um dos servidores, bem como distribuição da carga de trabalho em vários servidores. A agregação de servidores web pode ser fornecida colocando um balanceador de carga na frente deles, por exemplo, usando o Linux Virtual Server (LVS). Para a agregação de servidores de banco de dados, o MySQL fornece mecanismos de replicação interna que implementam um relacionamento mestre/escravo entre o banco de dados original (mestre) e suas cópias (escravos).
Essas configurações de alta disponibilidade também podem melhorar a disponibilidade de instâncias LAMP ao fornecer várias formas de redundância, possibilitando que um certo número de componentes (servidores separados) experimentem tempo de inatividade sem interromper os usuários dos serviços fornecidos como um todo. Essas configurações redundantes também podem lidar com falhas de hardware resultando em perda de dados em servidores individuais de uma forma que impede que dados armazenados coletivamente sejam realmente perdidos. Além de maior disponibilidade, essas configurações LAMP são capazes de fornecer melhorias quase lineares no desempenho para serviços que têm o número de operações de leitura de banco de dados interno muito maior do que o número de operações de gravação/atualização.