对于服务器方面,完完全全的一个菜鸟新人,以前看到一些关于什么新技术的文章,总会涉及到一些概念,雾里看花似的,仅仅感觉这些名字代表着传说中的一种高深的技术,那时不曾想到,今天要开始了解学习这些知识——因为责任。
因为处于了解阶段,也没有实践,因此下面的东西都是从网路上摘抄的,大部分是来源于百度百科,自己汇总了一下而已,疏漏之处,在所难免,谢谢斧正。
互联网目前主流概念:LAMP,LNMP,Apache, Nginx,Lighttpd,cgi,fastcgi,wsgi,uwsgi,redis,mongodb,flask,django
先对这些大概分一下类,有个整体的把握:
LAMP,LNMP(流行的网站构架方案,与.NET架构性质类似)
Apache, Nginx,Lighttpd 服务器
cgi,fastcgi,wsgi,uwsgi 公共网关接口
redis,mongodb 数据库
flask,django(python语言平台的web应用开发框架)
一个网站一般的组成,系统(环境底层)+支持服务器的软件(框架,小环境)+数据库(保存数据)+在服务器上运行的程序(交互逻辑控制)(猜的,请告诉我)
理清这些概念,先从服务器开始说起吧
1.服务器
1.1 Web服务器/HTTP服务器
WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。 WWW 是 Internet 的多媒体信息查询工具,是 Internet 上近年才发展起来的服务,也是发展最快和目前用的最广泛的服务。正是因为有了WWW工具,才使得近年来 Internet 迅速发展,且用户数量飞速增长。
因为Web服务器主要支持的协议就是HTTP,所以通常情况下HTTP服务器和WEB服务器是相等的。(此观点来源于http://www.cnblogs.com/zhaoyl/archive/2012/10/10/2718575.html)
Web服务器包括Apache,Microsoft IIS,IBM WebSphere,Tomcat,Lighttpd,Nginx等
1.2 应用程序服务器
应用服务器是指通过各种协议把商业逻辑曝露给客户端的程序。它提供了访问商业逻辑的途径以供客户端应用程序使用。应用服务器使用此商业逻辑就像调用对象的一个方法一样。 简单的说能实现动态网页技术的服务器叫做web应用服务器。
2. LAMP,LNMP
2.1 LAMP(Linux+Apache+MySQL+Perl/Python/PHP)
LAMP(Linux- Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据 库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,和 Java/J2EE架构相比,LAMP具有Web资源丰富、轻量、快速开发等特点,微软的.NET架构相比,LAMP具有通用、跨平台、高性能、低价格的 优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。
对于大流量、大并发量的网站系统架构来说,除了硬件上使用高 性能的服务器、负载均衡、CDN等之外,在软件架构上需要重点关注下面几个环节:使用高性能的操作系统(OS)、高性能的网页服务器(Web Server)、高性能的数据库(Database)、高效率的编程语言等。(来源百度百科http://baike.baidu.com/view/365086.htm)
2.2 LNMP(LAMP的变形,N指Nginx)
LNMP是相对于LAMP而言,把Apache换成Nginx而言。Nginx由于卓越的性能,简单易用的特性迅速在全球流行起来。在国内,各大公司以及个人站长都开始意识到这种服务器的优势。大型网站是用Nginx和Apache协同工作,而需求简单的站长,则干脆使用LNMP架构。
LANP相对于LAMP的优势:
1,占用内存更少,这得益于Nginx的简洁设计理念。
2,处理静态请求效率更高。
3,处理高并发请求效率更高,能够在遭受ddos攻击时有效减轻服务器负担,提升网站防御能力。(摘自http://v9zz.com/node/325)
2.3 其他
LAPP(以PostgreSQL替代MySQL)
LAMP(最后两个字母意味着Middleware和PostgreSQL)
LNMP(以Nginx替代Apache)
WAMP(以Microsoft Windows替代Linux)
MAMP(以Macintosh替代Linux)
LAMJ(以JSP/servlet替代PHP)
BAMP(以BSD替代Linux)
WIMP(指Microsoft Windows, Microsoft IIS,MySQL, PHP)
AMP(单指Apache, MySQL和PHP)
XAMP(以XML替代Linux)[1]
3. Nginx,Apache, Lighttpd
3.1 Apache
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
3.2 Nginx
Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好.中国大陆使用nginx网站用户有:新浪、网易、 腾讯等。Nginx对静态页面的支持相当出色,轻量且免费。
3.3 Lighttpd
Lighttpd 是一个德国人领导的开源Web服务器软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销、cpu占用率低、效能好以及丰富的模块等特点。
Lighttpd是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI,CGI,Auth,输出压缩(output compress),URL重写,Alias等重要功能;而Apache之所以流行,很大程度也是因为功能丰富,在lighttpd上很多功能都有相应的实现了,这点对于apache的用户是非常重要的,因为迁移到lighttpd就必须面对这些问题。[1]
3.4 其他
Boa,Jigsaw,在此不做阐述,可自行搜索之。
4. cgi,fastcgi,wsgi,uwsgi
4.1 CGI
公共网关接口CGI(Common GatewayInterface) 是WWW技术中最重要的技术之一,有着不可替代的重要地位。CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。它是HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。
Common Gateway Interface,简称CGI。在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。这样说大概还不好理解。那么我们看一个实际例子:现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:先由用户在客户端输入一些信息,如名字之类的东西。接着用户按一下“留言”(到目前为止工作都在客户端),浏览器把这些信息传送到服务器的CGI目录下特定的cgi程序中,于是cgi程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后cgi程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览器里将看到“留言结束”的字样。整个过程结束。
4.2 FastCGI
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。[1]
4.3 WSGI
WSGI 没有官方的实现, 因为WSGI更像一个协议. 只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行, 反之亦然。
Python Paste - WSGI底层工具集. 包括多线程, SSL和 基于Cookies, sessions等的验证(authentication)库. 可以用Paste方便得搭建自己的Web框架。
WSGI:Python Web Server Gateway Interface v1.0
它是 PEP3333[1]中定义的(PEP3333的目标建立一个简单的普遍适用的服务器与Web框架之间的接口)
WSGI是Python应用程序或框架和Web服务器之间的一种接口
WSGI被广泛接受, 已基本达成它了可移植性方面的目标
在Guido的 Blog 中反复提及, 个人认为WSGI是Python Web方面最Pythonic的
类似于Java中的"servlet" API。[2]
4.4 UWSGI
基于Python的Web项目部署起来真是头痛,常见的部署方法有:
◆fcgi:用spawn-fcgi或者框架自带的工具对各个project分别生成监听进程,然后和http服务互动。
◆wsgi:利用http服务的mod_wsgi模块来跑各个project。
无论哪种都很麻烦,apache的mod_wsgi配置起来麻烦,内存占用还大,如果要加上nginx作为静态页面的服务器那就更麻烦了;
如果Python中能有个什么东西像php-cgi一样监听同一端口,进行统一管理和负载平衡,那真是能省下大量的部署功夫。这就是uwsgi为什么会诞生!
uWSGI,既不用wsgi协议也不用fcgi协议,而是自创了一个uwsgi的协议,据说该协议大约是fcgi协议的10倍那么快。
uWSGI的主要特点如下:
◆超快的性能。
◆低内存占用(实测为apache2的mod_wsgi的一半左右)。
◆多app管理。
◆详尽的日志功能(可以用来分析app性能和瓶颈)。
◆高度可定制(内存大小限制,服务一定次数后重启等)。
5. redis,mongodb
5.1 redis
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。
5.2 mongodb
MongoDB[1]是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:
*面向集合存储,易存储对象类型的数据。
mongodb集群参考
*模式自由。
*支持动态查询。
*支持完全索引,包含内部对象。
*支持查询。
*支持复制和故障恢复。
*使用高效的二进制数据存储,包括大型对象(如视频等)。
*自动处理碎片,以支持云计算层次的扩展性。
*支持RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
*文件存储格式为BSON(一种JSON的扩展)。
*可通过网络访问。
5.3 NoSQL
CAP(Consistency,Availabiity,Partitiontolerance)理论告诉我们,一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。关系型数据库通过把更新操作写到事务型日志里实现了部分耐用性,但带来的是写性能的下降。MongoDB等NoSQL数据库背后蕴涵的哲学是不同的平台应该使用不同类型的数据库,MongoDB通过降低一些特性来达到性能的提高,这在很多大型站点中是可行的。因为MongoDB是非原子性的,所以如果如果应用需要事务,还是需要选择MySQL等关系数据库。
NoSQL数据库,顾名思义就是打破了传统关系型数据库的范式约束。很多NoSQL数据库从数据存储的角度看也不是关系型数据库,而是key-value数据格式的hash数据库。由于放弃了关系数据库强大的SQL查询语言和事务一致性以及范式约束,NoSQL数据库在很大程度上解决了传统关系型数据库面临的诸多挑战。
NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,其特点是非关系型,分布式,开源,可水平扩展,模式自由,支持replication,简单的API,最终一致性(相对于即时一致性,最终一致性允许有一个“不一致性窗口”,但能保证最终的客户都能看到最新的值)。
6. flask,django
6.1 Flask
是一个轻量级的Web应用框架, 使用Python编写。基于 WerkzeugWSGI工具箱和 Jinja2模板引擎。Flask使用 BSD 授权。
Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。然而,Flask保留了扩增的弹性,可以用Flask-extension加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。
6.2 django
Django(发音:/ˈdʒæŋɡoʊ/ JANG-goh) 是用python语言写的开源web开发框架(open source web framework)。它鼓励快速开发,采用了MVC的软件设计模式,即模型M,视图V和控制器C。Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 。
Django 项目是一个python定制框架,它源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来。Django 框架的核心组件有:
用于创建模型的对象关系映射
为最终用户设计的完美管理界面
一流的 URL 设计
设计者友好的模板语言
缓存系统。
6.3 其他
Tornado/web.py/web2py,请自行搜索之。
进一步补充:浅谈Python web框架 http://feilong.me/2011/01/talk-about-python-web-framework
########################### END ################################################
每一领域都有那么多技术,那么多概念,让新人一开始就鸭梨山大,慢慢来折磨我吧