`
xupo
  • 浏览: 212252 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Web服务器设计中涉及到的相关技术

阅读更多

服务器的设计与开发涉及到诸多技术和问题,归纳一下大致可以分为以下几种:

 

服务器启动和接收数据过程
多线程策略
NIO
长连接
同步与异步
配置化支持
责任链模式
集群与负载均衡
数据包设计
服务端连接协议
客户端连接技术
服务器启动和数据请求过程

 

各种服务器所提供的功能和实现机制都不尽相同,但在启动和数据请求这块都长得差不多,遵循固定的一些流程和模式,启动过程一般按一下流程:

1)以main方法的形式提供由外部脚本触发的入口

2)载入配置文件,解析并构建上下文

3)初始化各个组件和资源

4)注册和启动监控和管理组件

5)启动连接监听

数据请求过程一般按一下流程:

1)侦听Socket

2)包装Connection

3)解析并包装数据

4)请求处理

5)向client发送处理结果

多线程策略

多线程的策略一般可以采取两种方式,一种是每一个线程负责监听、处理和返回结果所有事情,另外一种是把监听、接收、处理分开,各自都有独立的线程去处理。第一种策略比较简单,适用于处理不复杂的场景,图示如下:

 

第二种方式把一个较长的请求处理过程分割开,区分对待,这样能提高系统的吞吐量,比较适用与较为复杂的请求处理场景,图示如下:

 

 

apache perfork在此基础上还有个main进程对这些work子进程进行管理,会根据请求的繁忙程度来调整work进程的数目,这也是可以借鉴的。

NIO

NIO的特性非常适用于网络服务器的接收数据这块,因为不是每时每刻都有数据请求,因此没必要搞一堆Accept线程在那里监听等待,以Tomcat6的NIO接收数据为例:

 

Amoeba也是采用NIO来接收数据流:

 

长连接

长连接顾名思义就是客户端与服务端保持连接,而不是每次请求都新建连接并在请求完后关闭连接,好处有以下几点:

减少新建和销毁线程所带来的代价
减少线程上下文切换带来的代价
适用与服务端需要监控客户端状态的场景,不需要通过客户端定时轮询来完成
建立了服务器主动向客户端推的通道
性能上与短连接的差异可以见以前的博文 构建高性能web之路------web服务器长连接

同步与异步

一般的情况下服务器端处理客户端请求都是同步的,客户端请求提交后会在一定的超时时间里等待服务器的response,这比较适用于短时间里能处理完的请求,但如果一些请求,比如文件上传,在规定的超时时间里没法处理完,这样异步的处理就比较合适了,所谓异步就是客户端的请求提交后就可以结束这次请求,不用等待response返回,在服务端处理完后主动把结果通知给客户端。Tomcat6推出的Comet技术即就是异步处理的典型,通过Comet技术,客户端所需要的response信息不再需要主动的去索取,而是在服务器端以event的形式推至客户端。更多Comet的信息可见Tomcat官方文档

配置化支持

服务器的各种参数,比如线程池大小、连接协议等等,需要暴露出来可以配置,因此需要有配置管理机制。一般说来配置文件多以xml或properties形式提供。对于properties比较简单,只是很难体现层次化结构,解析起来比较简单,通过Properties类就能很方便地进行解析。而xml体现的信息更友好、更清晰,解析xml的方法比较多,一般用以下几种:

SAX
DOM
JDOM、DOM4j、Digester等
前面两种比较原生态,SAX和DOM的区别就不再累述,JDOM、DOM4j和Digester都是基于前两种以上的开源框架,可以更加方便地调用。个人感觉如果xml不够复杂,不必使用太多的框架,原生态的东西就够用了。

解析完配置文件后,一般可以用更加有语义化的java bean来存储这些配置信息,这样可以更加方便其他模块的调用

责任链模式

责任链模式在服务器设计开发中比较常用,责任链模式的类图如下所示:

 

责任链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。Tomcat主要的架构pipeline-valve就是基于责任链模式。

通过责任链模式可以比较方便扩展对每次请求的处理,并且能很清新地明确各种处理之间的顺序和依赖关系

集群与负载均衡

 

为了保持集群实现简单,并更容易地实现横向扩展,尽量做到服务器之间无状态性,若需要状态可以参考Darkstar用集中式的Data service来抽象,保持逻辑处理的服务器是独立和平等的。在负载均衡这块可以采用硬负载(如F5)或软负载(LVS),这些都是比较成熟的方案,但如果负载均衡仍然是系统的瓶颈,可以采用客户端负载均衡的做法,客户端做路由的机理如下图所示:

 

1)当服务端ready后,会和配置中心建立连接,把自身状态信息发送到配置中心

2)当客户端ready后,会和配置中心建立连接,把所需要服务的相关信息和路由策略同步到本地

3)服务端有变动时,比如有机器宕机或迁移,配置中心会感知,并把改动立刻同步到客户端

4)客户端依据本地的路由信息直接与服务端通信

这种机制的最大优点就是客户端与服务端直接通信,消除了loadBalance单点,但也具有明显的缺点,也就是很难做到按照服务器空闲情况进行很智能的均衡负载,并且服务端的变动也很难立刻同步到客户端。

一般有以下实现措施:

1)客户端、服务端和配置中心彼此之间保持长连接,保障通信的即时性

2)路由策略以业务为维度,如按方法、接口或者参数来路由。或者就是简单的随机和轮询

3)通过配置中心做一些监控的工作,保障服务端的可用性

4)在客户端做容错,比如连接不上服务端(服务端状态同步延迟)时,做重试处理

数据包设计

 

Tomcat是基于HTTP的服务器,因此它接收和发送的数据都是基于HTTP协议的。如果自己设计的服务器不是基于HTTP,比如是原始的socket,那么就需要设计一套数据协议,例如:

 

数据协议的设计关键在于简单方便并容易扩展,数据协议就是客户端和服务器端交流的手段,功能越复杂数据协议就越复杂,数据包就会越来越大,因此在设计上需要有所权衡

服务端连接协议

当客户端多样化后就会有多种连接协议共存的需求,比如activeMQ和tomcat就支持多种connector,以activeMQ为例就支持openwire、ssl、stomp、xmpp等不同协议。支持多种协议无非就是在连接模块多开启几个端口的监听和相应协议的解析,做得更好的话最好是插件的模式,实现可插拔,这样就不会因为多种协议搞得整个系统实现过于复杂和混乱

客户端连接技术

客户端连接方案可以有多种选择,如果支持http协议,可以使用jdk提供的HttpClient工具,也可以直接使用网页。如果是socket,使用java net里TCP或UDP相关的类即可。这里需要提一下,最近看到很多人采用flash作为客户端来和服务端通信,并取得很不错的效果,flash提供了这么一些工具和API来支持网络连接和数据传送:

Flash Socket API:通过这类API,使ActionScript代码可以建立套接字连接并读取和写入原始的二进制数据,其没有指定接收或发送的数据格式。
External Interface API:通过这类API,可以实现javascript与actionscript之间的通信,当然这里还有安全沙箱的存在。
Shared Object API:通过这类API,可以实现在本地或服务器上面存储数据。当数据保存在本地的时候,其默认的可以存储的数据是每个域名100K,其与cookie还是有很大的不同点的。
LocalConnection API:通过这类API,可以实现swf文件之间的通信,这种通信是可以跨浏览器的。
以上API的具体使用可以参考一下Flash的文档,这里想说一下flash做为客户端的好处:

flash的通用性可以很方便地使客户端普及
flash可以很方便地实现跨域通信,不像js或ajax有那么多限制
flash可以借助Shared Object和LocalConnection实现浏览器之间的关联,并且是完全跨浏览器的。
以上是一些开发和设计服务常用到的技术或需要考虑的问题,在今后的学习深入中有待补充。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cutesource/archive/2010/08/10/5800420.aspx

  • 大小: 24.7 KB
分享到:
评论

相关推荐

    WEB服务器设计.doc

    所以在完成设计之前,必须先了解 WEB服务器设计的原理与结构 1.2 WEB服务器现况 目前在市场上有20到30种Web应用服务器,每种服务器在实现对象组件支持、 分布式 计算、部署的速度和易用程度上采取了不同方式。...

    深入分析Java Web技术内幕 修订版

    首先介绍前端知识,即在JavaWeb 开发中涉及的一些基本知识,包括Web 请求过程、HTTP、DNS 技术和CDN 技术。其次深入介绍了Java 技术,包括I/O 技术、中文编码问题、Javac 编译原理、class 文件结构解析、ClassLoader...

    全端Web开发:使用JavaScript与Java 非扫描版 高清带书签

    通过阅读本书,你将会:了解客户端和服务器端分层的好处,包括代码组织和快速原型开发; 探索JavaScript开发中用到的各种主流工具、框架...你将在多个章节中参与到实战项目中,从而获得对相应技术和主题的第一手经验。

    网站后台管理系统技术栈:Apache web服务器、MySQL数据库服务器、PHP、HTML、CSS.zip

    网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:数据集、包括云计算平台、大数据...

    实战Nginx:取代Apache的高性能Web服务器

    实战Nginx:取代Apache的高性能Web服务器 作者: 张宴 出版社: 电子工业出版社 出版年: 2010年2月 内容简介  Nginx (“engine x”) 是俄罗斯人Igor Sysoev编写的一款高性能HTTP 和反向代理服务器。Nginx选择了...

    java web技术开发大全(最全最新)

    提供典型应用案例,剖析JSP/Servret技术与Struts 2技术在Web开发中的不同 提供完整的应用案例,使读者可以深入体会SSH开发模式的精髓 所有开发工具和框架均使用目前的最新版本,紧跟技术发展的趋势 提供230个实例和4...

    java web开发技术大全

    提供典型应用案例,剖析JSP/Servret技术与Struts 2技术在Web开发中的不同 提供完整的应用案例,使读者可以深入体会SSH开发模式的精髓 所有开发工具和框架均使用目前的最新版本,紧跟技术发展的趋势 提供230个实例...

    2022蓝桥杯Web大学组省赛真题

    在前端开发方面,题目可能涉及HTML、CSS、JavaScript等相关技术,要求参赛者能够根据要求进行页面布局、样式设计和交互功能实现。在后端开发方面,题目可能涉及PHP、Python、Java等编程语言,要求参赛者能够实现...

    基于嵌入式WEB的网络视频监控系统的设计与实现

    基于嵌入式WEB的网络视频监控系统的设计与实现,本文介绍了一个基于嵌入式WEB技术的网络视频监控系统的设计与实现,重点阐述其嵌入式服务器软硬件部分的设计思想和体系架构,并对其中涉及的若干关键技术进行了较为...

    面向中小型企业Intranet服务器的构建 课程设计报告

    它实际上是采用Internet技术建立的企业内部网络,它的核心技术是基于Web的计算。它能够以极少的成本和时间将一个企业内部的大量信息资源高效合理地传递到每个人。Intranet为企业提供了一种能充分利用通讯线路、经济...

    实战Nginx.取代Apache的高性能Web服务器.2010 pdf

    曾在新浪网、赶集网等公司任系统工程师、系统架构师,工作内容主要涉及:服务器系统架构设计与部署、系统运维与调优、网络故障解决、网站后端以及接口类PHP程序开发、Unix开源软件二次开发、服务器监控系统开发、...

    JAVA-Web课程设计--注册登录系统---用SSH框架整合实现注册登录系.docx

    对于登录系统来说,每当用户输入正确的登录信息和验证码后,系统就会在user表中查找相关的记录,以确定当前登录用户和密码是否合法。下面将给出这个表的表结构。如表1所示: 表1:user表的结构 字 段 名 name ...

    基于JavaWeb的高校科研成果管理系统设计与实现

    能学到什么:①MVC 设计模式、Docker 技术、MySQL 数据库技术、Tomcat 服务器技术是怎么在系统中体现的;②系统安全模块、数据查询统计模块、科研信息管理模块、人员信息管理模块、通用信息管理模块都是如何设计和...

    网络安全Web的安全概述.pptx

    还有一种情况,就是Web服务器的某些显示环境变量的程序错误的输出了Web服务器的物理路径,这通常是设计上的问题。 网络安全Web的安全概述全文共71页,当前为第7页。 2.目录遍历 目录遍历对于Web服务器来说并不多见...

    linux服务器配置与管理课程标准.doc

    " " " " " "理 "3、Linux DNS服务器的配置 " " " " " " "4、Linux DNS服务器的常见故障 " " " " "四"Linux "1、Linux WEB服务器基本知识 "8 "7% " " " "WEB服务器的管"2、Linux WEB服务器的安装 " " " " " "理 "3、...

    计算机网络医院网络设计毕业设计报告模板.docx

    4 2.1.4 IP地址分配 4 2.2 技术设计 5 2.2.1链路聚合技术 5 2.2.2 DHCP技术 5 2.2.3 OSPF技术 6 2.2.4 NAT技术 6 2.2.5端口映射技术 6 2.3 网络设备设计 6 2.3.1 交换机设计 6 2.4 服务器设计 7 2.4.1 WEB 服务器...

    基于PHP的网上书店的设计的毕业设计,为用户提供一个方便快捷、实用高效的购书平台

    - Apache、Nginx等Web服务器; - Linux等操作系统; ## 开发流程 本项目的开发流程如下: 1. 需求分析:对网上书店的功能进行详细分析,确定开发目标和技术方案; 2. 系统设计:根据需求设计系统架构、数据库结构...

    基于JSP技术的银行管理系统的毕业设计与实现.doc

    1 1 需求分析 2 1.1 设计思想 2 1.2 本课题的研究意义 2 1.3 系统设计目的: 3 1.4 系统运行环境 3 1.4.1 系统配置概述 3 1.4.2 JSDK的安装和配置 3 1.4.3 安装和配置Web服务器 4 1.4.4 数据库连接 5 2 相关技术 ...

    物理管理系统(毕业设计全套)

    系统采用SqlServer为后台数据库以JSP Web为页面形式,涉及到数据库、网络、Web服务器、j2ee等方面的技术,实现了较为完备的功能。包括有物流知识管理,货物管理,汽车管理,租赁信息管理,用户管理等等。另外,对...

Global site tag (gtag.js) - Google Analytics