设计与开发服务器算是一个技术含量比较高的领域,需要涉及到网络编程、IO、多线程、分布式、性能和可扩展性等较为复杂的技术细节,比起JSP/servlet或SSH框架开发业务系统来说,开发服务器比较偏重于技术一些,许多开发人员会有些束手无措,但却无法避免,比如基于HTTP协议的服务不适用时,或需要提供某种协议的容器时。
其实服务器的设计与开发也是有模式可借鉴,只不过没有框架或是书籍来这么一些模式,但通过学习一些优秀服务器的源码和架构我们可以找到一些感觉,我挑选了几个自己较为熟悉的服务器,通过它们的架构来找一些可以借鉴的模式:
- Tomcat
- Apache perfork
- Amoeba
- Mysql
- 统一通信
- Darkstar
1)Tomcat
Tomcat根据处理一个请求的不同阶段分为多个层次,所有层次通过pipeline-valve的结构连接起来,每个层次通过Valve处理相应维度的事情。
2)Apache perfork
此架构模式中存在一个主进程和多个子进程。每个子进程都会为所进行的请求侦听一个套接字。当接受到请求之后,子进程就会接受它并且提供响应。父进程会监控所有的子进程以确保总是可以使用最少数量的进程来处理请求,并且确保等候请求到达的闲置进程不能过少。如果没有足够的空闲进程来处理潜在的请求高峰,那么父进程就会启动新的子进程。如果存在过多的进程,那么父进程会每次终止一个空闲进程,直到服务器回到最大空闲子进程数量之下。通过保持一定数量的空闲子进程来接受所引入的请求,服务器就可以避免在接受到请求时再去启动新进程的开销。 父进程和子进程之间通过记分板进行通信。对于每一个产生的子进程,它的状态信息都写入到记分板中,父进程通过读取记分板可以了解子进程的状态。当需要关闭子进程的时候它将通过终止管道发送终止信息给子进程,另外的一种通知方法就是通过信号。
3)Amoeba
Amoeba是夹在client和DB之间的Proxy,并且复用了mysql connector的协议,因此它必须维持好它与client端和DB端的连接,保持高速的数据流转。另外,它为了能做到sql路由就必须得解析mysql connector的协议,只有掌握去来的数据才能做好路由和结果合并等工作
4)Mysql
Mysql是一个将SQL处理和存储引擎相分离的两层结构,把上图简化来看如下图所示:
SQL Layer属于比较业务性的模块,也是根据SQL的种类和处理阶段的不同,分为多个层次和模块来逐层处理。Storage Engine Layer是一个数据存储的抽象层,它可以根据预定的标准和协议把不同结构和原理的存储引擎统一起来,并和SQL Layer无缝对接起来,如此设计能很好把其他在存储做得非常好的第三方给纳入进来,使得Mysql成为一个开放系统。
5)统一通信
融合通信的目的是要通过原生态的Socket协议把多种客户端和后端各服务连接起来,算是client端和服务提供方之间的Proxy。因此它为了提高它处理的吞吐量,把每次请求分成段,每段都通过独立的线程池来处理
6)Darkstar
Darkstar是个为了提供高可用的网络游戏框架,它把服务模块分为Tasking Service、Data Service、Channel与Session Service。其中Tasking Service是每次客户端请求的处理模块,Data Service用于持久化客户端的数据,Channel与Session Service用于保持客户端与服务端或客户端之间的通信和会话。网络游戏的性质决定了需要高并发、状态持久性和横向可扩展性,因此Tasking Service的特性是在任何机器和环境下都能独立运行,并且得到同样的结果,可以通过增加机器增强任务的处理能力,而Data Service和Channel Service保证了这一特性的可行性。
通过以上几个开源服务器的架构,大致可以总结出一个服务器需要以下模块:
- 连接模块
- 配置模块
- 线程管理模块
- 数据解析和转化模块
- 任务处理模块
- 监控和管理模块
并且都需关注一下问题:
- 高速连接和数据通信
- 可配置化的管理
- 多线程的管理策略
- 分布式和横向扩展策略
- 不同阶段处理的分层结构
因此通过对一些架构的解析,对如何构架一个服务器应该有些宏观性的把控,接下来就需要对这个框框里需要的各项技术的掌握,这也是一个从宏观到微观的过程
相关推荐
12前端开发基础视频-浏览器与服务器端补充.avi 13前端开发基础视频-HTML协议发展的历程(可以略过,非重点,了解即可).avi 14前端开发基础视频-常见前端的名词解释.avi 15前端开发基础视频-网页的组成...
1 环境与开发工具 2-2 安装xampp 2-3 下载ThinkPHP 5 2-4 三端命名与运行ThinkPHP 5 2-5 PHPStorm安装及常见使用技巧 2-6 TP5层次结构 2-7 扩展:TP5自带的Web Se r ver 2-8 在PHPStorm下断点调试代码 2-9 PATH_INFO...
作者针对常见的开发任务,从YUI等实战代码中取材,提供了专家级的解决方案,不仅透彻剖析了JavaScript扣的面向对象编程,而且深入探讨了如何用JavaScript实现以前只在服务器端应用的设计模式,如何根据实际场景选择...
《JavaScript设计模式》共有两部分。第一部分给出了实现具体设计模式所需要的面向对象特性的基础知识...《JavaScript设计模式》适合各层次的Web前端开发人员阅读和参考,也适合有C++/Java/C#背景的服务器端程序员学习。
中文版SQL Server 2000开发与管理应用实例-目录: 第 1 章 安装和配置SQL Server 1 1.1 SQL Server的版本和版本选择 1 1.2 安装SQL Server的常见问题 3 1.3 如何理解实例 5 1.4 如何实现无值守安装 5 ...
本书内容主要包括三部分,第一部分介绍java ee开发的基础知识,以及如何搭建开发环境,包括安装jboss、weblogic应用服务器,以及如何使用svn、netbeans等。第二部分详细讲解了jsf ri、jta、jndi、rmi、jms、...
通过阅读本书,读者不仅能够知道用java服务器体系结构开发servlet与用传统cgi编写程序的好处,而且还能够掌握编写java servlet的各种技术和技巧。 本书适用于所有对java和web感兴趣的读者使用和参考。 第1部分 ...
Node.js是一个快速增长的平台,用于使用JavaScript构建服务器应用程序。现在它在生产环境中得到了更广泛的应用,Node应用程序将开始专门针对安全漏洞。保护用户需要了解Node特有的攻击媒介,以及与其他Web应用程序...
·设计模式在软件架构中的应用 第二天 实施软件架构设计-基于微软 第二天将为大家全面讲述基于微软产品和框架的解决方案设计过程。以三层体系架构(Windows DNA)模型和智能客户端模型为例介绍了在MSF流程下的软件...
macos电脑一台,安装xcodes开发工作,同时安装证书服务器与相关软件环境。 二、系统修改 xcodes打开项目工程,进行开发者的配置与发布选项的配置,进行游戏名称与版本号修改等,进行编译,发布等。这里面的游戏...
服务器常见软件故障分析及解决全文共3页,当前为第1页。服务器常见软件故障分析及解决全文共3页,当前为第1页。服务器常见软件故障分析及解决 服务器常见软件故障分析及解决全文共3页,当前为第1页。 服务器常见软件...
5.4 逻辑设计与物理设计 5.5 通过经典的BLOB处理基于文件的信息 5.6 子类别 5.7 数据库重用 5.8 反规范化 5.9 通过分区方法进行扩展 5.10 SQL Server关系图工具 5.11 关于日期列 5,12 小...
.net 2.0 访问Oracle --与Sql Server的差异,注意事项,常见异常 Ado.net 与NHibernate的关系? 动态创建数据库 SQL Server数据库安全规划全攻略 .net通用数据库访问组件SQL Artisan应用简介1 在Framework1.0下...
接着剖析了Flex与Java的通信机制,以及Flex企业应用的客户端架构和服务器端架构;再接着详细讲解了BlazeDS框架的使用方法和工作原理,并通过迭代的方式完整地演示一个真实的Flex企业级应用的开发全过程,实战性极强...
本书首先将Vue.js与其他框架进行比较,并为您的应用程序设置开发环境。 它逐渐转向编写和样式化可在整个应用程序中使用的干净,可维护和可重用组件的样式。 接下来,您将了解常见的UI模式,Vue表单提交以及各种修饰...
5.4 逻辑设计与物理设计 5.5 通过经典的BLOB处理基于文件的信息 5.6 子类别 5.7 数据库重用 5.8 反规范化 5.9 通过分区方法进行扩展 5.10 SQL Server关系图工具 5.11 关于日期列 5,12 小...
5.4 逻辑设计与物理设计 5.5 通过经典的BLOB处理基于文件的信息 5.6 子类别 5.7 数据库重用 5.8 反规范化 5.9 通过分区方法进行扩展 5.10 SQL Server关系图工具 5.11 关于日期列 5,12 小...
该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件开发商及电信营运商共同研发改良。 Android操作系统的特点包括: 开放源代码:Android系统采用开放源代码模式,允许开发者自由...
这样,基于平台的开发应用可以支持单机、局域网和互联网三种应用模式,三种应用模式高度兼容,基本上不做任何修改就可以在从一种应用模式转换到另一种模式! 二、 支持多语言,可以根据自己需要实现简体版、繁体...