`

设计与开发应用服务器--相关技术

 
阅读更多

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

  • 服务器启动和接收数据过程
  • 多线程策略
  • 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来接收数据流:

长连接

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

  • 减少新建和销毁线程所带来的代价
  • 减少线程上下文切换带来的代价
  • 适用与服务端需要监控客户端状态的场景,不需要通过客户端定时轮询来完成
  • 建立了服务器主动向客户端推的通道

同步与异步

一般的情况下服务器端处理客户端请求都是同步的,客户端请求提交后会在一定的超时时间里等待服务器的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实现浏览器之间的关联,并且是完全跨浏览器的。

以上是一些开发和设计服务常用到的技术或需要考虑的问题,在今后的学习深入中有待补充。

分享到:
评论

相关推荐

    Windows2000 服务器端应用程序开发设计指南

    08-06-13 P2P网络的拓扑结构 08-06-13 P2P搜索技术的研究与挑战 08-06-13 P2P的应用研究、面临的问题与前景展望 08-06-13 Peer to Peer ( P2P ) 综述(第二版本) 08-06-13 Windows平台下,完成端口的程序框架 08-06-...

    控制装置标准化通信 OPC服务器开发设计与应用_12677917+光盘资料_OCR_书签精校版

    其中OPC数据存取服务器开发模式、OPC数据存取自动化服务器模型及开发、OPC客户端实现等设计开发应用内容为全书的重点。, 《控制装置标准化通信:OPC服务器开发设计与应用》大量引入新知识、新技术,具有内容新、起点...

    应用服务器设计、开发与维护

    本书介绍应用服务器的设计、开发、产品化和维护方法。内容丰富、条理清晰,浓缩了作者多年实际工作的经验。本书适合熟悉基本技术(如Internet、Web、数据库、传统系统设计等)的IT专业人员,也适合想要避开HTML和...

    控制装置标准化通信(OPC服务器开发设计与应用)

    其中OPC数据存取服务器开发模式、OPC数据存取自动化服务器模型及开发、OPC客户端实现等设计开发应用内容为全书的重点。, 《控制装置标准化通信:OPC服务器开发设计与应用》大量引入新知识、新技术,具有内容新、起点...

    应用服务器中间件技术要求.doc

    3、应用服务器中间件技术要求 "指标项 "指标要求 " "总体要求 "遵循标准。全面支持JavaEE5或以上版本的国际工业标 " " "准和相关规范,并通过国际标准认证。全面支持Web " " "Service。 " " "必须支持各种主流平台,...

    数据库系统原理与开发-数据库连接技术(ODBC).pdf

    5 数据库原理及应用 数据库系统原理与开发 电子科技大学-陈安龙 二、ODBC的技术背景(续) ODBC定义了一套基于SQL的、公共的、与数据库无关的API(应用程 序设计接口); 使每个应用程序利用相同的源代码就可访问...

    基于BREW的可复用网络应用架构及服务器的设计与开发

    基于BREW的可复用网络应用架构及服务器的设计与开发,自行设计搞笑网络通讯协议,对BREW客户端使用技术包括网络技术,核心算法,数据格式化等做出了详细的分析介绍

    GM/T 0029-2014 《签名验签服务器技术规范》

    GM/T 0029-2014 《签名验签服务器技术规范》 本标准规定了签名验签服务器的功能要求、安全要求、接口要求、检测...本标准适用于签名验签服务器的研制设计、应用开发、管理和使用,也可用于指导签名延签服务器的检测。

    InforSuite应用服务器技术白皮书.pdf

    InforSuite应用服务器采用构件化思想,易于设计实现便于移植、互操作性好的可重用构件,具有良好的开放性、稳定性、可扩展性和可管理性,能够快速便捷地进行应用开发、部署、运行和管理,为构建多层、分布的企业应用...

    会议系统\SIP会议应用服务器的设计与原型系统的实现

    然后阐述其实际应用——SIP会议应用服务器的设计,采用分布式体系结构,信令和媒体流完全分离,具有高度的灵活性和扩展性。整个服务器系统由会议控制服务器和会议媒体服务器两部分组成,文中详细介绍会议应用服务器中各...

    基于unity PUN2服务器的线上小游戏应用ML-Agent训练代理的机器学习技术源码.zip

    主要基于PUN2和Addressable的结合demo,确保毕设项目可行性和自我高效率工作,并且应用ML-Agent训练代理的机器学习技术。 使用Unity2019.4.4f1开发,基于PUN2网络框架,Addressable Asset作为可寻址资产框架,完成在...

    Linux服务器配置与管理项目1--Linux服务器安装与测试.pptx

    Linux服务器配置与管理项目1 Linux服务器安装与测试 Linux服务器配置与管理项目1--Linux服务器安装与测试全文共44页,当前为第1页。 【项目描述】 某公司要搭建企业内部网络,其中要求服务器具有Web、FTP、DNS、DHCP...

    论文研究-基于多层结构的应用服务器开发与研究.pdf

    介绍了一种以Sybase的应用服务器Jaguar CTS为平台,从C/S两层应用到多层及Web数据库应用的实现技术,对多层结构数据库应用开发进行了研究探讨,论述了应用服务器相应的程序开发特性。

    Location-Aware Applications LBS应用开发

    《LBS应用开发/图灵程序设计丛书》分为三部分,第一部分主要从宏观角度介绍位置感知及LBS应用,第二部分介绍与开发LBS应用相关的技术,第三部分讨论基于LBS应用的商业和创业。从介绍LBS的概念入手,《LBS应用开发》...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地引导读者快速掌握java web开发。.  本书内容全面,涵盖了从事java web开发所应掌握的所有知识。在知识的讲解...

    基于SaaS模式的应用集成平台的设计与开发

    针对中小企业资金技术方面的不足,提出了基于SaaS模式的应用集成平台总体框架的设计与开发。论文重点对应用集成平台的核心技术—多租户应用技术进行了深入的研究,确定了多租户技术的功能需求和解决方案,提出了多租户...

    《Delphi 深度编程及其项目应用开发》PDF书及代码

    应用篇结合物资管理信息系统项目应用开发技术和经验,详细阐述了一般管理信息系统软件通用模块的开发,其中包括10章,分别为:物资管理信息系统概述及其总体框架设计、物资管理信息系统后台数据库设计、应用服务器的...

    ASP.NET程序开发范例宝典 第4章 常用Web服务器控件

    内容包括搭建ASP.NET开发环境、HTML开发与实践、CSS样式与JavaScript脚本应用、常用Web服务器控件、验证控件、高级Web服务器控件、ADO.NET技术、数据绑定技术、SQL查询相关技术、视图、存储过程及触发器的应用、ASP...

    PowerBuilder 8.0网络技术与应用 pdf

     PowerBuilder8.0可以用来设计、建立高性能的基于网络数据库应用系统的设计开发工具,同时全面支持分布式、客户/服务器体系结构、分布式计算和Web环境。本书介绍了PowerBuilder8.0的网络应用技术,讲述了开发分布式...

    ASP技术与开发 PPT

    为了满足对动态网页开发的需要,微软公司于1996年11月推出的Web应用程序开发技术——ASP(Active Server Pages,即活动服务器页面)。它实际上是对IIS 2.0的 IDC(即Internet数据库连接器)技术的升级,不同的是它...

Global site tag (gtag.js) - Google Analytics