服务器端技术
简介:
服务器分为web服务器和应⽤服务器。Web服务器是离客户端最近的服务器,负责监听和处理HTTP请求。应⽤服务器⽐web服务器更靠近后端,主要处理复杂的业务逻辑和数据库的访问。
如果是静态资源(例如HTML页⾯或图⽚),web服务器则直接将该资源读取出来返回给客户端,就不需要经过应⽤服务器了。
如果是动态的资源(例如数据库⾥的⼀些数据),web服务器则将该请求转交给应⽤服务器,由应⽤服务器来进⾏处理和读取数据库,将处理的结果返回给web服务器,web服务器再返回给客户端。在三层架构中,web服务器是夹在客户端和数据库之间,⼀⽅⾯⽤于数据库中读取和写⼊数据,另⼀⽅⾯也为了有效的过滤掉⼀些⾮法的访问请求,保障数据安全。
前⾔:
客户端技术和服务器端的技术,⼤的区别在于,客户端技术是我们平时都能感觉得到的,也就是说打开浏览器的时候,我们可以感知到这⼀技术的存在,⽽服务器端的技术我们是⽆法感知的,我们没办法知道它到底是⽤了什么样的⼀种技术来保证这个⽹站的稳定和可靠,所以关于服务器端技术的理解也就变
得相对⽐较抽象,这也是我们学习的⼀个难点。事实上,对于web系统来说,相⽐客户端技术,服务器端技术更是深不可测,其各类技术,系统架构,处理⽅式等千变万化。服务器端的技术进步,同样要求软件测试技术的同步前进,也更加要求软件测试⼈员能够跟上技术的步伐,否则测试将很难展开。
下⾯只是⼀个整体的梳理,将服务器端的各类技术做⼀个总结,关于服务器端的技术还需要更深⼀步的学习。
正⾔:
1, 三层架构
客户端和服务器端的技术标准的是使⽤三层的架构:客户端、服务器端、数据库(C-S-D)。
我们所有的数据最终都会保存到数据库,但是客户端是没有办法访问数据库的,他需要服务器端作为⼀个中转。
那么服务器端的这个中转的过程也就是请求的监听和响应的⼀个过程。客户端发个请求,服务器端接收到请求后,去判断是否需要访问数据库,并不是所有请求都需要访问数据库,如果只是访问⼀个静态资源(图⽚,HTML⽂件)那就不需要访问数据库,同样如果是数据库端返回的⼀个数据,服务器
端也需要进⾏⼀个处理,再返回给客户端。这就是所谓的三层架构,这⾥也深⼊了解了⼀下服务器的作⽤。
在三层架构中,web服务器是夹在客户端和数据库之间,⼀⽅⾯⽤于数据库中读取和写⼊数据,另⼀⽅⾯也为了有效的过滤掉⼀些⾮法的访问请求,保障数据安全。
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 (软件即服务)、云计算、⼤数据、物联⽹实际都是对服务器端的处理,对客户端反⽽简单了。客户端要想⽤起来越简单,那么我们就越需要 对服务器端进⾏⼤量的处理。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论