最近由于工作需要,准备从前端往后端发展发展,遇到的第一个难题就是需要在服务器上搭建web框架,之前也大概的了解过什么Apache,Tomcat,Nginx,jetty,node之类的,但是完全没搞清楚这几个有什么区别,通过一段时间的了解,这篇文章旨在为新人对这些框架提供一个初步的概念。本文仅供参考,转职程序员一枚,欢迎指教。
1. Web 服务器是什么?web框架又是什么?
WEB服务器主要功能是提供网上信息浏览服务。当Web浏览器(客户端)连到服务器上并请求文件时,服务器将处理该请求并将文件反馈到该浏览器上,附带的信息会告诉浏览器如何查看该文件(即文件类型)。服务器使用HTTP协议与客户机浏览器进行信息交流,这就是人们常把它们称为HTTP服务器的原因。Web服务器不仅能够存储信息,还能在用户通过Web浏览器提供的信息的基础上运行脚本和程序。
web框架是什么?其实可以把服务器就当做一个大程序来看待,web框架的作用就是让你更加方便的去使用它,发挥它的最大功能。
如果不去使用框架,直接使用服务器自带功能,也可以实现基本需求,但是在不同的网络环境里面,对网络的需求,不仅仅是能够进行网络通信,还需要很多不同的需求,如果不将服务器隔离开来,那么会相当不灵活,处理这些需求,会很费事,甚至无法完成。下面是一些需求:
a.高性能:nginx和apache通过配置就可以大大的提高不同场景下的性能,对高并发更加是优化得很彻底了。
b.安全:对ssl的支持,证书的支持,其他服务器很可能没实现或者实现不统一。
c.代理分发:统一了入口点,避免暴露内部复杂的环境。
2. Apache,Tomcat,Nginx,jetty,node这些框架到底是什么,有什么区别吗?
首先要有一个概念,其实web服务器应该是分成两类来看待的,第一类是web服务器,第二类是应用服务器。
web服务器:将某一个文本文件的内容通过HTTP协议返回到客户端,但是这个文本文件的内容是固定的——也就是说无论何时、任何人访问它得到的内容都是完全相同的,这样的资源我们称之为静态资源。例如百度首页,只需要载入图标和基本DOM元素,典型的静态资源。
一个 HTTP Server 关心的是 HTTP 协议层面的传输和访问控制,所以在 Apache/Nginx 上你可以看到代理、负载均衡等功能。客户端通过 HTTP Server 访问服务器上存储的资源(HTML 文件、图片文件等等)。通过 CGI 技术,也可以将处理过的内容通过 HTTP Server 分发,但是一个 HTTP Server 始终只是把服务器上的文件如实的通过 HTTP 协议传输给客户端。
应用服务器:动态资源则与之相反,在不同的时间、不同的客户端访问得到的内容是不同的,典型的网站是网易云音乐,每一条评论,右侧的热门歌单,广告,都是通过后台去数据库动态的获取的,每个人打开显示的都不一样。
应用服务器是一个应用执行的容器。它首先需要支持开发语言的 Runtime(对于 Tomcat 来说,就是 Java),保证应用能够在应用服务器上正常运行。其次,需要支持应用相关的规范,例如类库、安全方面的特性。对于 Tomcat 来说,就是需要提供 JSP/Sevlet 运行需要的标准类库、Interface 等。
那么,这些框架是怎么分类的呢?
web服务器:Apache,Nginx等
应用服务器:Tomcat,jetty,nodejs等
3.web服务框架Apache,Nginx之间的区别?
nginx :
- 轻量级,同样起web 服务,比apache 占用更少的内存及资源
- 抗并发,nginx 处理请求是异步非阻塞的,在高并发下nginx 能保持低资源低消耗高性能
- 高度模块化的设计,编写模块相对简单
- 社区活跃,各种高性能模块出品迅速
apache :
- rewrite ,比nginx 的rewrite 强大
- 模块超多,基本想到的都可以找到
- 少bug ,nginx 的bug 相对较多
- 超稳定,在市场上仍然是主流
+在高并发时占用较多资源
一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,例如一些大型公司或者金融公司之类,那就apache 吧。后者的各种功能模块实现得比前者,例如ssl 的模块就比前者好,可配置项多。
Nginx 配置简洁, Apache 复杂 ,Nginx 启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动. 你还能够不间断服务的情况下进行软件版本的升级 . Nginx 静态处理性能比 Apache 高 3倍以上 ,Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端来使用 ,Apache 的组件比 Nginx 多.
4.应用框架Tomcat,jetty,node之间的区别?
Tomcat:
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器(主要用于解析servlet/JSP,同时具备http服务),技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可。其运行时占用的系统资源小,扩展性好,且支持负载平衡与邮件服务等开发应用系统常用的功能。作为一个小型的轻量级应用服务器,Tomcat在中小型系统和并发访问用户不是很多的场合下被普遍使用,成为目前比较流行的Web 应用服务器。
jetty:
Jetty采用业界最优的开源Java Web引擎,将Java社区中下载量最大,用户数最多,标准支持最完备的Tomcat内核作为其Servlet容器引擎,并加以审核和调优。单纯的Tomcat性能有限,在很多地方表现有欠缺,如活动连接支持、静态内容、大文件和HTTPS等。除了性能问题,Tomcat的另一大缺点是它是一个受限的集成平台,仅能运行Java应用程序。企业在使用时Tomcat,往往还需同时部署Apache WebServer以与之整合。此配置较为繁琐,且不能保证性能的优越性。
Tomcat,jetty两者都是Servlet容器,按照Servlet和JSP规范实现,功能上类似。Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好。Tomcat目前应用比较广泛,对JavaEE和Servlet的支持更加全面,很多特性会直接集成进来。
什么是servlet容器呢?即实现HttpServletRequest、HttpServletResponse、HttpSession等等接口,解析http请求,通过类加载器加载对应的servlet实现类并调用。也就是说servlet容器必须由java或者基于jvm的语言实现。
node:这个单独拿出来说,大概看一下,因为目前刚刚火起来,目前比较偏向于做应用框架和后台逻辑开发以及前端工具使用,商业上没有上面两个成熟,暂仅仅做兴趣研究。
总结下来,现在用户要求越来越高,服务带宽需求越来越大,在需求驱动的情况下推出了各种框架,使用时先区分框架类型,再去按照项目的实际情况去使用框架,每个框架都有自己的优缺点,适合的才是最好的。
如果有疑问,欢迎联系我,后面一段时间会对每一个框架的安装,配置,功能性能测试,写出更详细的文章。