LAMP是一个缩写,它指一组通常一起使用来运行动态网站或者服务器的自由软件:Linux,操作系统;Apache,网页服务器;MySQL,数据库管理系统(或者数据库服务器);PHP 和有时Perl 或 Python,脚本语言。
lamp_lamp -起源
LAMP这个特定名词最早出现在1998年。当时,MichaelKunze为德国计算机杂志c't写作的一篇关于自由软件如何成为商业软件替代品的文章时,创建了LAMP这个名词,用来指代Linux操作系统、Apache网络服务器、MySQL数据库和PHP(Perl或Python)脚本语言的组合(由四种技术的开头字母组成)。由于IT世界众所周知的对缩写的爱好,Kunze提出的LAMP这一术语很快就被市场接受。O'Reilly和MySQLAB更是在英语人群中推广普及了这个术语。随之LAMP技术成为了开源软件业的一盏真正的明灯。
目前,几乎在所有的Linux发布版中都默认包含了“LAMPstack”的产品。这些产品组成了一个强大的Web应用程序平台。“LAMPstack”中的每一个组件都是一个FOSS(免费或者开源软件/FreeorOpenSourceSoftware)的实例。FOSS方法的好处有三个方面。第一,FOSS软件的性质意味着应用程序可以免费下载,能够让更广泛的人们不用付费就可以使用这个应用软件。这种免费的方式对于广大用户特别具有吸引力。这些用户如果不使用免费的软件就需要付费购买“专业”的商用软件工具。这在制作网站方面通常是一种昂贵的步骤。FOSS许可证是开放式的,因此对于基于FOSS技术的应用软件的使用和限制都非常少。不需要为软件的发布支付任何许可证费就可以开发和应用基于LAMP的工程。因此,这对业余爱好者和专业人员都非常有吸引力。FOSS技术(包括LAMP)的增长和使用的主要原因是因为用户能够访问其资源,修复故障和改善应用软件的性能都非常容易。与开源软件许可证结合在一起,这种方法为许多企业简化了开发过程,并且为企业提供了专有软件或者商业软件的限制中所没有的灵活性。
lamp_lamp -平台组成
LAMP平台由几个组件组成,呈分层结构。每一层都提供了整个软件栈的一个关键部分:
Linux和windows:Linux和windows处在最低层,提供操作系统。其他每个组件实际上也在其上运行。但是,并不一定局限于Linux和windows,如有必要,其他组件包括:MacOSX或UNIX。
Apache:次低层是Apache,它是一个Web服务器。Apache提供可让用户获得Web页面的机制。Apache是一款稳定的、支持关键任务的服务器,Internet上超过65%的网站都使用它作为Web服务器。PHP组件实际上是在Apache中,动态页面可以通过Apache和PHP创建。
MySQL:MySQL提供LAMP系统的数据存储端。有了MySQL,便可以获得一个非常强大的、适合运行大型复杂站点的数据库。在Web应用程序中,所有数据、产品、帐户和其他类型的信息都存放在这个数据库中,通过SQL语言可以很容易地查询这些信息。
HP:PHP是一门简单而有效的编程语言,它像是粘合剂,可以将LAMP系统所有其他的组件粘合在一起。您可以使用PHP编写能访问MySQL数据库中的数据和Linux提供的一些特性的动态内容。
erl:Perl是一种脚本语言。这表示它并不编译成可执行程序,而是在运行时进行解释的一组指令(脚本)。Perl是代表“实际抽取和报告语言”(practicalextractionandreportlanguage)的字首组合词。Perl被誉为语言中的“瑞士军刀”。它功能强大且非常灵活。语言学家LarryWall在廿世纪八十年代后期在NASA担任系统管理员时开发了Perl。他创建Perl的目的是使构建报告的任务变得更简单。Perl现在用来执行许多任务。它也许是用于在Web上进行CGI(公共网关接口)编程最流行的语言。其原因就是Perl是一种功能非常强大的文本处理器,而Web编程主要就是文本处理。另外,使用Perl通常比使用C/C++、Java或Tcl更简单,而且它比Python更早出现。Perl被称为是一种“胶水语言”。所谓胶水语言,也就是说它是可以用来将许多元素连接在一起的语言。
ython:Python一种交互式面向对象的解释型编程语言。Python使用非常清晰的语法实现非常强大的功能。它具有模块、类、意外处理以及非常高级别的动态数据类型和动态定义。并且,它具有接口和库函数供多种系统调用。内建模块还可以使用C或C++语言方便地编写。对于用户界面的编程,Python同样能够胜任。Python可以运行在Linux、UNIX、Windows、DOS、OS/2、Mac以及Amiga等等多种环境下。Python虽然有版权,但完全可以免费使用和分发,甚至是为了商业用途。
lamp_lamp -安装
早期安装一个LAMP系统是比较负责的,随着Linux的普及现在安装一个LAMP系统变得比较简单另外许多Linux发行版本(Redhat、Debian)安装时可以自动配置Apache、php、mysql等组件。
lamp_lamp -优化
硬件优化
1、升级硬件的一般规则:对于PHP脚本而言,主要的瓶颈是CPU,对于静态页面而言,瓶颈是内存和网络。一台400Mhz的普通奔腾机器所下载的静态页面就能让T3专线(45Mbps)饱和。
2、采用hdparm来优化磁盘,一般能提升IDE磁盘读写性能200%,但是对SCSI硬盘也有效果。(不同类型的硬盘对比)
策略优化
3、Apache处理PHP脚本的速度要比静态页面慢2-10倍,因此尽量采用多的静态页面,少的脚本。
4、PHP脚本如果不做缓冲,每次调用都需要编译,因此,安装一个PHP缓冲产品能提升25-100%的性能。
5、如果你采用了Linux系统,建议升级内核到2.4,因为静态页面由内核服务。
6、另外一项缓冲技术是把不常修改的PHP页面采用HTML缓冲输出。
7、不要在Web服务器上运行X-Windows,关掉没有必要运行的进程。
8、如果能够用文本就不要用图像,尽量减小图片的尺寸。
9、分散负载,把数据库服务器放到另外的机器上去。采用另外低端的机器服务图片和HTML页面,如果所有的静态页面在另外一台服务器上处理,可以设置httpd.conf中的KeepAlives为off,来减少断开连接的时间。
10、以上所有的方法都是针对单机而言的,如果你觉得系统还是不够快,可以采用集群,负载均衡,缓冲技术。采用Squid作为缓冲,配置Squid的方法。
编译优化
11、把基于文件的会话切换到基于共享内存的会话。编译PHP时采用--with-mm选项,在php.ini中设置setsession.save_handler=mm。这个简单的修改能让会话管理时间缩短一半。
12、采用最新版本的Apache,并把PHP编译其中,或者采用DSO模式,不要采用CGI方式。
13、编译PHP时,建议采用如下的参数:
--enable-inline-optimization--disable-debug
配置优化
14、修改httpd.conf:
#关闭DNSlookups,PHP脚本只拿IP地址
HostnameLookupsoff
15、如果网络拥挤,CPU资源不够用,采用PHP的HTML压缩功能:
output_handler=ob_gzhandler
PHP4.0.4的用户请不要使用,因为存在内存泄漏问题。
16、修改httpd.conf中的SendBufferSize为你最大的页面文件的大小。加大内核的TCP/IP写缓冲大小。
17、采用数据库的持久连接时,不要把MaxRequestsPerChild设置得太大。
第三方软件优化
18、如果喜欢从修改Apache源码入手,可以安装lingerd。在页面产生和发送后,每个Apache进程都会浪费一段时光在客户连接上,Lingerd能接管这项工作,让Apache迅速服务下一个客户请求。
19、如果你足够勇敢的话,还可以采用SiliconGraphics的AcceleratedApache补丁。这个工程能使Apache1.3快10倍,使Apache2.0快4倍。
安装一个PHP缓冲产品能提升25-100%的性能。
Linux系统优化
1.清理服务器磁盘碎片:
不论Linux文件系统采用什么文件格式(ext3、JFS、XFS、ReiserFS)、何种类型的硬盘(IDE、SCSI),随着时间的推移文件系统都会趋向于碎片化。ext3、JFS等高级文件系统可以减少文件系统的碎片化,但是并没有消除。在繁忙的数据库服务器中,随着时间的过去,文件碎片化将降低硬盘性能,硬盘性能从硬盘读出或写入数据时才能注意到。时间长了会发现每个磁盘上确实积累了非常多的垃圾文件,释放磁盘空间可以帮助系统更好地工作。Linux最好的整理磁盘碎片的方法是做一个完全的备份,重新格式化分区,然后从备份恢复文件。但是对于7×24小时工作关键任务服务器来说是比较困难的。Kleandisk是一个高效的磁盘清理工具,它能把磁盘上的文件分成不同的"组",比如把所有的"core"文件归成一组(Group),这样要删除所有core文件时只要删除这个组就行了。core文件是当软件运行出错时产生的文件,它对于软件开发人员比较有用,对于其他用户(比如电子邮件服务器)却没有任何意义。因此,如果没有软件开发的需要,见到core文件就可以将其删除。
2、开启硬盘DMA
现在使用的IDE硬盘基本支持DMA66/100/133(直接内存读取)但是Linux发行版本安装后一般没有打开,可以/etc/rc.d/rc.local最後面加上一行:/sbin/hdparm-d1