服务器端技术

简介:

服务器分为web服务器和应用服务器。Web服务器是离客户端最近的服务器,负责监听和处理HTTP请求。应用服务器比web服务器更靠近后端,主要处理复杂的业务逻辑和数据库的访问。
如果是静态资源(例如HTML页面或图片),web服务器则直接将该资源读取出来返回给客户端,就不需要经过应用服务器了。
如果是动态的资源(例如数据库里的一些数据),web服务器则将该请求转交给应用服务器,由应用服务器来进行处理和读取数据库,将处理的结果返回给web服务器,web服务器再返回给客户端。在三层架构中,web服务器是夹在客户端和数据库之间,一方面用于数据库中读取和写入数据,另一方面也为了有效的过滤掉一些非法的访问请求,保障数据安全。

前言:

客户端技术和服务器端的技术,大的区别在于,客户端技术是我们平时都能感觉得到的,也就是说打开浏览器的时候,我们可以感知到这一技术的存在,而服务器端的技术我们是无法感知的,我们没办法知道它到底是用了什么样的一种技术来保证这个网站的稳定和可靠,所以关于服务器端技术的理解也就变得相对比较抽象,这也是我们学习的一个难点。事实上,对于web系统来说,相比客户端技术,服务器端技术更是深不可测,其各类技术,系统架构,处理方式等千变万化。服务器端的技术进步,同样要求软件测试技术的同步前进,也更加要求软件测试人员能够跟上技术的步伐,否则测试将很难展开。

下面只是一个整体的梳理,将服务器端的各类技术做一个总结,关于服务器端的技术还需要更深一步的学习。

正言:

1,  三层架构

客户端和服务器端的技术标准的是使用三层的架构:客户端、服务器端、数据库(C-S-D)。

我们所有的数据最终都会保存到数据库,但是客户端是没有办法访问数据库的,他需要服务器端作为一个中转。
那么服务器端的这个中转的过程也就是请求的监听和响应的一个过程。客户端发个请求,服务器端接收到请求后,去判断是否需要访问数据库,并不是所有请求都需要访问数据库,如果只是访问一个静态资源(图片,HTML文件)那就不需要访问数据库,同样如果是数据库端返回的一个数据,服务器端也需要进行一个处理,再返回给客户端。这就是所谓的三层架构,这里也深入了解了一下服务器的作用。

在三层架构中,web服务器是夹在客户端和数据库之间,一方面用于数据库中读取和写入数据,另一方面也为了有效的过滤掉一些非法的访问请求,保障数据安全。

但是,对于大的复杂点的系统来说,三层架构是不能满足需求,所以由三层架构衍生出来的多层架构或N层架构(四层及四层以上)。三层架构已经囊括了最核心的东西了,那么第四层、第五层都是做什么的呢?实际上第四层也好、第五层也好,其实主要是针对我们的后端,也就是服务器端和数据端。我们的服务器端实际上可以再细分成两层:

第一层:web前端服务器。这个服务器只负责处理HTTP请求和转发请求,它不负责和数据库打交道,也不负责业务逻辑的处理。

第二层:应用服务器。这个服务器不负责HTTP的这种前端请求的处理,它主要负责系统核心的业务逻辑,并且和数据库建立链接。

例如:我们现在常用到的J2EE的架构,通常更倾向于划分为4层,把服务器拆分为web前端服务器、应用服务器两层,各司其职,共同协作。

对数据库端也可以继续细分,有些数据库只处理一些简单的请求,有些数据库则处理最后端、最底层的一些请求。

还可以继续再分,甚至我们把服务器端布置在集群环境或云计算平台上,那么就可以分层的更多,但是这些层次的划分,本质上还是三层基本架构的模型,所以我们学习的重点关注的还是三层架构,其他的无非就是把服务器和数据库再分一分,对于我们掌握他的工作原来,掌握它的技术手段,本质上是没有区别的。

2,常用的服务器技术

1) web服务器

Web服务器是离客户端最近的服务器,核心功能和主要作用包含三方面:

a、监听:能监听到客户端的请求。为什么我们需要启动服务器,目的也就在于启动服务器才可以开始监听80端口(或其他自定义端口),才可以获取到客户端发来的请求,便于处理。

b、 处理:处理浏览器端的请求(HTTP、HTTPS)。

c、  响应:对客户端发送过来的请求进行响应。

如果是静态资源(HTML页面或图片等),则直接将该资源从硬盘上读取进内存并直接返回给客户端;如果是动态页面(如PHP或ASP页面等),则将该请求交给相应的脚本引擎,再访问数据库,再把取得的内容整理成标准的HTML源文件页面,最后发送给客户端。举例说明:

我们访问的某个网站,要显示一个图片,那么就会发出一个获取图片的请求。图片是一个静态资源,会存储在服务器端的硬盘上,也就是说这个图片在服务器端会有一个对应个URL地址。那么服务器接收到请求后,会到对应URL的地址下找到图片,把它读取出来,然后返回给客户端,这就是响应。

Web服务器当前比较流行的有以下五种:

①   Apache:由开源基金会Apache维护,开源系统软件,由C语言开发,是目前世界上最流行的web服务器。由于C语言较好的跨平台性,Apache已经在所有服务器操作系统上实现,如Unix,Linux和Windows。并且很多应用服务器也直接内置Apache服务器,因为性能好,足够稳定,而且功能强大。

②   IIS:由微软开发,直接与Windows操作系统绑定,目前Windows系列操作系统均可安装IIS而不仅限于Windows服务器版本。Windows XP,Windows 7都可以安装。IIS目前是微软.Net战略中最重要的一部分,因为所有.NET基础服务都由IIS提供。

③   Tomcat:有开源基金会Apache维护,主要处理以Java为架构的动态页面。比如常见的JSP页面和Java Servlet等,均可由Tomcat处理,并且Tomcat还部分支持SUN公司的J2EE规范,为使用J2EE架构的中小型应用提供方面。

④   Lighttpd:Lighttpd是一个德国人领导的开源软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web服务器环境。具有非常低的内存开销,CPU占用率低,效能好,以及丰富的模块等特点。在Apache上有的功能很多都已经在Lighttpd上实现了。

⑤   Nginx是一个很牛的高性能的web和反向代理服务器,它具有非常优越的特性,在高链接并发的情况下,Nginx是Apache服务器不错的替代品,Nginx能够支持高达50000个并发链接的响应。

2)应用服务器

应用服务器比web服务器更靠后端,其目的并非监听或处理HTTP请求,而是处理复杂的业务逻辑和数据库访问等。

分类:

①   J2EE应用服务器:

能提供J2EE服务器的厂商非常多,因为他们共同遵守J2EE的标准规范。由SUN公司(已经被Oracle收购)主导的JAVA实现了三个平台:它们是适用于小型设备和智能卡的Java 2平台Micro版、适用于桌面系统的Java 2平台标准版、适用于创建服务器应用程序和服务的Java 2 平台企业版。J2EE是一种利用Java 2 平台来简化企业解决方案的开发、部署、和管理相关的复杂问题的体系架构。J2EE技术的基础就是核心Java平台或Java 2 平台的标准版,J2EE不仅巩固了标准版中的许多优点,例如“编写一次、随处运行”的特性、方便存取数据库的JDBC、API、CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对EJB、Java Servlets API、JSP以及XML技术的全面支持。其最终的目的是成为一个能够使企业开发者大幅缩短投放市场时间的体系架构。目前实现J2EE架构的产品有5个,分别是IBM的WebSphere,BEA公司(已被Oracle收购)的Weblogic,Redhat公司的JBoss,中国金蝶公司的Aqusic,开源的Resin。他们都是非常不错的的J2EE应用服务器。

②   IIS:

首先IIS是web服务器,其次微软公司也将其定义为.NET框架下的应用服务器。事实上,微软从操作系统,到服务器,到数据库,再到解决方案,为IT业提供了一套相对完整的无缝集成网络服务环境。如果我们说J2EE应用服务器是应用于Java平台的基础设施,那么IIS便是.NET平台的基础设施。所以,IIS完全有能力胜任应用服务器这一称呼。事实上IIS不仅可以提供HTTP服务,还可以提供FTP,SMTP,消息服务等。前者是开放式平台,所有的系统都可以使用,后者是Windows专有。

3)脚本引擎

我们都知道,现在的web应用程序都是动态的,可交互的,可以根据用户输入的不同而返回不同的响应。而传统的HTML是无法支持动态网页的,因为HTML是静态的,由浏览器解析执行。所以动态网页的处理都是在服务器端完成的,由服务器端的脚本引擎处理完成后以标准的HTML格式返回给客户端。例如:要访问数据库,那么静态的脚本是没办法访问数据库的,它需要动态的脚本,它里面编写一些程序,达到访问数据库的目的。

4)综上

Apache支持任何平台,而且功能强大,是Web服务器中的王者。Apache是纯粹的Web服务器,经常与Tomcat配对使用。它对HTML页面具有强大的解释能力,但是不能解释嵌入页面内的服务器端脚本代码(JSP/Servlet)。

IIS只支持Windows。微软早期 的IIS,就是一个纯粹的Web服务器。后来,它嵌入了ASP引擎,可以解释VBScript和JScript服务器端代码了,这时,它就可以兼作应用服务器。当然,它与J2EE应用服务器根本无法相比,但是,从功能上说,从原理上说,它勉强可以称之为应用服务器。确切地说,它是兼有一点应用服务器功能的 Web服务器。

早期的Tomcat是一个嵌入Apache内的JSP/Servlet解释引擎,Apache+Tomcat就相当于IIS+ASP。后来的Tomcat不再嵌入Apache内,独立于Apache进程运行。Tomca更多是处理JAVA的一个容器,并不是完整意义上的服务器,但是它兼有处理HTTP请求的功能。所以他的分工有所不同,它和Apache不同,Apache纯粹只是处理HTTP,其他的动态的脚本都交给脚本引擎来处理,Tomcat既可以处理HTTP请求,也可以处理动态页面(如JSP)。所以Apache是纯粹的web服务器,而Tomcat有人称它为轻量级应用服务器。IIS则可以理解为带有服务器功能的Web服务器。Weblogic、WebSphere因为能提供强大的J2EE功能,毫无疑问是绝对的应用服务器。对于处于中间位置的Tomcat,它可以配合纯Web服务器Apache一起使用,也可以作为应用服务器的辅助与应用服务器一起部署:Lighttpd和Nginx是比较有个性的web服务器,他们的重点关注在性能上。

3,集群环境

服务器集群就是指讲很多服务器连接起来一起进行同一服务,在客户端看来就像是只有一个服务器。集群可以利用多个计算机进行并行计算从而获得很高的计算速度(Load Balance-负载均衡),也可以用多个计算机做备份,从而使得任何一个机器坏了,整个系统还能正常运行(Fail Over-故障转移)。

集群环境有多种实现方式:

硬件集群:直接使用硬件来完成,如知名的redware,可直接根据来访者的IP地址进行负载的分配和转移,并实时监听各集群节点,达到故障转移的目的。

操作系统集群:操作系统之间直接集群,属于软件级集群,通过集群分配算法实现。

应用服务器集群:应用服务器之间直接集群,根据应用服务器之间的性能指标进行负载均衡和故障转移。

数据库集群:数据库系统直接集群,如Oracle RAC、mycat等。

云计算平台的原型很多部分是来源于集群(负载均衡、故障转移),但比集群更有优势的地方是,伸缩性比集群更好,资源可以更有效跟合理的利用起来。当我们的计算资源需要更多的时后,我可以动态的分配给它更多的资源,当空闲的时候,我可以把这部分资源回收,再用于其他的地方。这是云计算平台最亮点的地方。

其实无论何种集群方式,其核心的目的就是负载均衡和故障转移。要实现该目的,必须要有一个负载分发器作为系统访问的入口,当负载分发器检测到请求过来的时候,可以根据集群节点的性能状况来决定由哪个集群节点来进行处理。同时,该负载分发器需要实时监控各集群节点的健康状况,如果发现有节点无法提供服务,将不再为其分配请求,并及时发出警告通知系统管理员,这样就可以实现故障转移。所以原理是很简单的,只不过如何实现高可用性是一个比较复杂的问题,一些简单的算法可能很难保证其高负载情况下的稳定处理。

4,数据库

数据库是网络环境的基础,把数据保存起来已备应用。目前数据库的类型及存在形式主要有以下四种:

①   文件型数据库:将数据保存在文件中,比如CSV的逗号分隔符文件,Excel文件,或者比较流行XML文件,他们都是用来描述数据的,并且由于他们都是以纯文本形式保存,其通用性和可移植性非常好,但是不太适用于大型的应用。比较落后,但速度快,稳定性差。

 ②   关系型数据库:将数据以二维表的形式保存,并且建立表与表或者列与列的各种关系,便于进行业务逻辑的处理和数据展现。这也是近二十年来使用最为广泛的数据库组织形式,在大型应用中显示出巨大的优势。实际上关系型数据库的数据本质上还是保存在硬盘上,数据库管理员系统只是在需要时将数据文件从硬盘读取到内存中并展示给用户。当今流行的5大关系型数据库:Oracle,SQLServer,MySQL,DB2,informix。性能是问题。

③   内存型数据库:我们知道硬盘的读写速度慢于内存,其速度相差近80倍。即使现在的固态硬盘,其读写速度仍然无法与内存相提并论。于是就有了内存型数据库,将所有的数据库文件全部置于内存中,大大提高了数据库处理的速度。该类型数据库兼备文件型数据库和关系型数据库的优点。但该类型的数据库对系统的稳定性要求非常高,因为一旦断电,内存中的数据就会全部丢失。

④   NoSQL:指的是非关系性数据库。随着web2.0的兴起,关系型数据库由于性能的问题显得力不从心。而非关系型数据库由于其自身的特点得到了非常快的发展。NoSQL数据存储不需要固定的表结构,通常也不存在链接操作,在大数据存取上具备关系型数据库无法比拟的性能优势。NoSQL也分为四大类型,MongoDB就属于四类中的文档型数据库。MongoDB的文档模型自由灵活,可以让你在开发过程中畅顺无比。对于大数据量、高并发、弱事务的互联网应用,MongoDB可以应对自如。MongoDB内置的水平扩展机制提供了从百万到十亿级别的数据量处理能力,完全可以满足Web2.0和移动互联网的数据存储需求,其开箱即用的特性也大大降低了中小型网站的运维成本。

⑤   NewSQL:是对各种新的可扩展/高性能数据库的简称,这类数据库不仅具有NoSQL对海量数据的存储管理能力,还保持了传统数据库支持ACID和SQL等特性。国内的SequoiaDB(巨杉数据库)就是NewSQL的一种,它的主要特点是擅长事实性,并且分布式、关系型等等。

5、SOA

指面向服务的体系架构,是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以使用一种统一和通用的方式进行交互。其核心在于“服务”,要了解SOA,必须首先了解什么叫Web service(Web服务),Web service是基于网络的、分布式的模块化组件,他执行特定任务,遵守具体技术规范,这些规范使得Web service能与其他兼容的组件进行互操作。Web service利用SOAP协议和XML进行数据传输。SOAP协议又是依附于HTTP协议进行传输的,这些协议都是语言无关,平台无关的协议,所以利用Web service,我们可以很轻易的在异构系统之间进行数据传递。SOA便是以web服务为核心进行应用系统架构设计的一种全新技术,使得系统数据可以在任何平台下实现访问。不是一种技术,而是一种规范。通过Web service实现异构系统之间的通信。

SaaS (软件即服务)、云计算、大数据、物联网实际都是对服务器端的处理,对客户端反而简单了。客户端要想用起来越简单,那么我们就越需要 对服务器端进行大量的处理。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戰士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值