一、服务器架构理解
一个Web项目上线,必须依托于服务器成为互联网之中的一个节点,要使我们的应用得以运转,这个节点内容需要进行一系列的工作环境安装配置,而为了目标项目的安全性、稳定性、灵活性,同时考虑公司运营成本,我们相应会做服务器架构对应的软件选择,也就是对服务器架构进行思考。
服务器架构的第一步则是要考虑选择什么服务器的位置和软件,包括服务器选择云端的还是自己建设、服务器操作系统、进行网络连接的服务器软件、开发语言、数据库等,而这些选择的组合结果,将极大影响项目的后期整体运行以及优化扩展。
在经过前人不断实践后,逐渐总结出来一些模式化的“解决方案”,目前常见的服务器架构模式分别有:Lamp(Linux+Apache+Mysql+PHP)、Lnmp(Linux+Nginx+Mysql+PHP)、Wamp(windows+Apache+Mysql+PHP)、Wimp(windows+IIS+Mysql+PHP)。
由于windows操作系统具备易用、界面友好、软件丰富、操作起来非常方便的优势,中小企业常常选择Wamp和Wimp作为公司项目服务器的架构,而又由于windows性能较差、安全性低、不稳定等缺点,大公司常常选择使用Lamp和Lnmp服务器架构。
以下根据Lamp+Lnmp架构模式具体分析优劣。
二、架构图
图1. lamp/lnmp基本架构
三、Lamp/Lnmp架构理解
1. LINUX系统
Linux操作系统有很多发行版本,常见的有Linux操作系统有很多个不同的发行版,如Red Hat Enterprise Linux、SUSE Linux Enterprice、Debian、Ubuntu、CentOS等,每一个发行版都有自己的特色,比如RHEL的稳定,Ubuntu的易用,基于稳定性和性能的考虑,操作系统一般选择CentOS是一个理想的方案。
CentOS(Community ENTerprise Operating System)是Linux发行版之一,是RHEL(Red Hat Enterprise Linux)的精简免费版,和RHEL为同样的源代码,不过,RHEL和SUSE LE等企业版,提供的升级服务均是收费升级,无法免费在线升级,因此要求免费的高度稳定性的服务器可以用CentOS替代Red Hat Enterprise Linux使用。
Linux系统之所以会成为目前最受关注的系统之一,主要原因是它的免费,以及系统的开放性,可以随时取得程序的原代码,这对于程序开发人员是很重要的。
除了这些它还具有以下的优势:------------------------------------------------------------------------------
Linux系统优势一:跨平台的硬件支持
由于Linux 的内核大部分是用C 语言编写的,并采用了可移植的Unix标准应用程序接口,所以它支持如i386、Alpha、AMD和Sparc等系统平台,以及从个人电脑到大型主机,甚至包括嵌入式系统在内的各种硬件设备。
Linux系统优势二:丰富的软件支持
与其他的操作系统不同的是,安装了Linux系统后,用户常用的一些办公软件、图形处理工具、多媒体播放软件和网络工具等都已无需安装。而对于程序开发人员来说,Linux更是一个很好的操作平台,在Linux 的软件包中,包含了多种程序语言与开发工具,如gcc、cc、C++、Tcl/Tk、Perl、Fortran77 等。
Linux系统优势三:多用户多任务
和Unix系统一样,Linux系统是一个真正的多用户多任务的操作系统。多个用户可以各自拥有和使用系统资源,即每个用户对自己的资源(例如:文件、设备)有特定的权限,互不影响,同时多个用户可以在同一时间以网络联机的方式使用计算机系统。多任务是现代计算机的最主要的一个特点,由于Linux系统调度每一个进程是平等地访问处理器的,所以它能同时执行多个程序,而且各个程序的运行是互相独立的。
Linux系统优势四:可靠的安全性
Linux系统是一个具有先天病毒免疫能力的操作系统,很少受到病毒攻击。
对于一个开放式系统而言,在方便用户的同时,很可能存在安全隐患。不过,利用Linux自带防火墙、入侵检测和安全认证等工具,及时修补系统的漏洞,就能大大提高Linux系统的安全性,让黑客们无机可乘。
Linux系统优势五:良好的稳定性
Linux 内核的源代码是以标准规范的32 位(在64 位CPU上是64 位)的计算机来做的最佳化设计,可确保其系统的稳定性。正因为Linux 的稳定,才使得一些安装 Linux 的主机像Unix 机一样常年不关而不曾宕机。
Linux系统优势六:完善的网络功能
Linux 内置了很丰富的免费网络服务器软件、数据库和网页的开发工具,如Apache、Sendmail、VSFtp、SSH、MySQL、PHP和JSP 等。近年来,越来越多的企业看到了Linux 的这些强大的功能,利用Linux 担任全方位的网络服务器。
----------------------------------------------------------------------------------------------------------
linux除了以上的优势,程序员自己还可以利用shell脚本开发系统功能。综上对linux的认识,我们没有理由不选择Linux。
2. Apach服务器
Apache是LAMP架构最核心的Web Server,开源、稳定、模块丰富是Apache的优势。但Apache的缺点是有些臃肿,内存和CPU开销大,性能上有损耗,不如一些轻量级的Web服务器(例如nginx)高效,轻量级的Web服务器对于静态文件的响应能力来说远高于Apache服务器。
3. Nginx服务器
Nginx是一个小巧而高效的Linux下的Web服务器软件,是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler 站点开发的,已经在一些俄罗斯的大型网站上运行多年,相当的稳定。
Nginx性能稳定、功能丰富、运维简单、处理静态文件速度快且消耗系统资源极少。
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率。
作为负载均衡服务器:Nginx 既可以在内部直接支持Rails和PHP,也可以支持作为 HTTP代理服务器对外进行服务。Nginx 用C编写,不论是系统资源开销还是CPU使用效率都比Perlbal要好的多。
作为邮件代理服务器:Nginx同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last/fm 描述了成功并且美妙的使用经验。
Nginx 安装非常的简单,配置文件非常简洁(还能够支持perl语法)。Nginx支持平滑加载新的配置,还能够在不间断服务的情况下进行软件版本的升级。
4. PHP
PHP是目前web开发使用最多的语言。
优点:
开源、免费、快捷性(程序开发快,运行快,技术本身学习快)、插件丰富、网上的解决方案有很多(有庞大的开源社区可以提供帮助)、跨平台性强、效率高、图像处理好、面向对象。
缺点:
1) 函数命名不规范:驼峰法和下滑线,传参位置不一;
2) 单线程: PHP本身一直以来就是个单进程的程序,虽然php的pthreads扩展早就有了,但是它不够稳定,运行运行着就会莫名其妙的自己挂掉,php的扩展都是C写的,这也就意味着任何一个扩展出现线程竞争资源控制问题都能让整个系统挂掉;
3) 核心异步网络不支持(当然在linux只有同步非阻塞网络模型)。少了这个,使得很难开发一个能够承受大并发的网络应用。传统的网络模型和io都阻塞的,这样基本的编程的做法就是一个进程(或者线程)响应一个用户链接请求。因此无法完成像实时网游那样需要成千上万网络连接的任务。尽管php也有Libevent、eio扩展对此算是某种程度上面的弥补,但是感觉都不是那么完善;
4) 只支持web开发,不方便做 .exe文件,不方便做桌面应用程序,不方便做手机程序;
5) 不适合做爬虫。自动运行脚本,科学运算项目,这语言基本构架就不适合,虽然有很多方法实现。
6) 后期维护困难,后期提速空间局限性较大。
5. MYSQL数据库
开源的数据库中,MySQL在性能、稳定性和功能上是首选,可以达到百万级别的数据存储,网站初期可以将MySQL和Web服务器放在一起,但是当访问量达到一定规模后,应该将MySQL数据库从Web Server上独立出来,在单独的服务器上运行,同时保持Web Server和MySQL服务器的稳定连接。
当数据库访问量达到更大的级别,可以考虑使用MySQL Cluster等数据库集群或者库表散列等解决方案。
四、总结
Linux开源、安全、高性能、稳定;apache服务器开源稳定;Nginx消耗低、速度快、稳定;mysql数据库高性能、稳定、免费;PHP开发速度快。所以综合来说。LAMP/LNMP架构的网站性能高,且成本低,非常适合大部分的商业运作,稳定性、安全性远远优于WIMP/WAMP架构的网站,可以负载的访问量也非常大,在IT领域发展,对于个人或公司,用LAMP/LNMP架构自己项目服务器,肯定会更好。
五、参考网站
1. http://www.williamlong.info/archives/1908.html
2. https://www.cnblogs.com/xiaotaoing/p/6687418.html
3. https://www.cnblogs.com/soundcode/p/6576637.html