LNMP

概览

最初从“linux、apache、mysql和php”一词普及的缩写“lamp”现在指的是通用软件堆栈模型。模块化可能会有所不同,但这种特定的软件组合之所以流行,是因为它足以承载各种各样的网站框架,如WordPress。大多数Linux发行版的软件存储库中都存在LAMP栈的组件。

LNMP可以与许多其他免费和开源软件包组合,如:

  1. netsniff 用于安全测试和强化
  2. Snort入侵检测(IDS)和入侵预防(IPS)系统
  3. 用于图表的rrdtool
  4. Nagios、Collectd或Cacti,用于监控

作为另一个例子,维基百科和其他维基媒体基金会项目为其底层基础设施使用的软件是一个定制的LAMP堆栈,其中添加了诸如Linux虚拟服务器(LVS)用于负载平衡,以及Ceph和Swift用于分布式对象存储。

演进

随着不断使用,操作系统、Web服务器、数据库和软件语言的其他组合出现了变化和反义词。例如,在Microsoft Windows操作系统系列上的等效安装称为WAMP。替代Apache运行IIS的另一种方法叫做wimp。涉及其他操作系统的变体包括mamp(macos)、samp(solaris)、famp(freebsd)、iamp(iseries)和xampp(跨平台)。

Web服务器或数据库管理系统也各不相同。LEMP是一个Apache被更轻量的Web服务器nginx所取代的版本,一个MySQL被PostgreSQL所取代的版本被称为lapp,有时还保留了原来的首字母缩略词lamp(linux/apache/middleware(perl、php、python、ruby)/postgresql)。

技术栈组件

Linux

Linux是一个类Unix的计算机操作系统,它是在自由和开源软件开发和分发模式下组装而成的。大多数Linux发行版,作为基于Linux内核的软件集合,通常围绕包管理系统,通过其包提供完整的灯设置。根据W3Techs在2013年10月的数据,Debian和Ubuntu共享了58.5%的Web服务器市场份额,而Rhel、Fedora和Centos共享了37.3%。

Apache

LAMP的Web服务器的角色传统上是由Apache提供的,并且已经包括了其他Web服务器,如nginx。

Apache HTTP服务器是公共互联网上最流行的Web服务器。2013年6月,Netcraft估计,Apache在所有活跃网站中的服务率为54.2%,在所有域名中的顶级服务器中的服务率为53.3%。2014年6月,Apache在所有活跃网站中的服务率估计为52.27%,其次是nginx,为14.36%。

Apache是在Apache软件基金会的赞助下由开发人员开放的社区开发和维护的。根据Apache许可证发布的Apache是开源软件。支持各种各样的特性,其中许多特性作为扩展Apache核心功能的编译模块实现。这些可以从服务器端编程语言支持到身份验证方案。

MySQL和备选方案

MySQL作为LAMP的关系数据库管理系统(RDBMS)的最初角色已经被其他RDBMS(如Mariadb或PostgreSQL)或甚至是NoSQL数据库(如MongoDB)交替提供。

MySQL是一个多线程、多用户、SQL数据库管理系统(DBMS),2008年被Sun Microsystems收购,2010年被Oracle公司收购。自成立之初,MySQL团队就根据GNU通用公共许可证和各种专有的AGR提供了源代码。

Mariadb是由其原始开发人员领导的社区开发的MySQL分支。

PostgreSQL也是PostgreSQL Global Development Group开发的一个与ACID兼容的对象关系数据库管理系统。

MongoDB是一个Web规模的开源NoSQL数据库,它避开了传统的基于表的关系数据库结构,而倾向于使用动态模式(称为格式bson)的类似JSON的文档,使得在某些类型的应用程序中集成数据变得更容易和更快。

PHP和备选方案

PHP作为LAMP的应用程序编程语言的角色也由其他语言(如Perl和Python)执行。

PHP是一种为Web开发而设计的服务器端脚本语言,也用作通用编程语言。PHP代码由Web服务器通过PHP处理器解释生成的网页。PHP命令可以选择直接嵌入到HTML源文档中,而不是调用外部文件来处理数据。它还发展到包括命令行界面功能,可以在独立的图形应用程序中使用。

php是根据php许可条款发布的免费软件,由于php许可条款对php的使用有限制,因此与gnu通用公共许可(gpl)不兼容。

Perl是一系列高级、通用、解释、动态编程语言。这个系列中的语言包括Perl5和Perl6。它们提供了高级的文本处理工具,不受许多当代Unix命令行工具的任意数据长度限制,促进了文本文件的操作。Perl5在20世纪90年代末作为一种用于Web的CGI脚本语言而广受欢迎,部分原因是它的解析能力。

python是一种广泛使用的通用高级编程语言,python支持多种编程范式,包括面向对象、命令式、函数式和过程式范式。它具有动态类型系统、自动内存管理、标准库和严格使用空白的特点与其他动态语言一样,python通常被用作脚本语言,但也被广泛用于非脚本上下文。

高可用性和负载平衡

对于服务于大量请求的网站或提供需要高正常运行时间的服务的网站,需要特定的解决方案。高可用性方法可能涉及多个Web和数据库服务器,以及执行每个服务器提供的资源逻辑聚合的附加组件,以及跨多个服务器分配工作负载。Web服务器的聚合可以通过在其前面放置负载平衡器来提供,例如通过使用Linux虚拟服务器(LVS)。对于数据库服务器的聚合,MySQL提供了内部复制机制,在原始数据库(master)与其副本(slaves)之间实现主从关系。

这种高可用性设置还可以通过提供各种形式的冗余来提实例的可用性,使某些组件(单独的服务器)能够在不中断灯实例作为一个整体提供的服务的用户的情况下经历停机。这种冗余设置还可以处理导致单个服务器上的数据丢失的硬件故障,以防止集体存储的数据实际丢失。除了更高的可用性之外,这些灯设置还能够为内部数据库读取操作的数量远高于写入/更新操作的数量的服务提供几乎线性的性能改进。

总结

LAMP架构是一种架构思想,其中基于大流量和可用性的负载均衡组件,基于web请求处理的web server组件,基于数据存储的数据库组件,基于业务逻辑处理的语言组件。

每个新增业务初期都需要考虑技术团队背景,团队资源及业务目标,综合考虑技术栈、业务目标、学习和维护成本、团队资源等多个因素,而决策的技术实施结果决定业务效率及研发成本。

您的支持是我最大的动力!