设计与开发服务器算是一个技术含量比较高的领域,需要涉及到网络编程、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保证了这一特性的可行性。
通过以上几个开源服务器的架构,大致可以总结出一个服务器需要以下模块:
- 连接模块
- 配置模块
- 线程管理模块
- 数据解析和转化模块
- 任务处理模块
- 监控和管理模块
并且都需关注一下问题:
- 高速连接和数据通信
- 可配置化的管理
- 多线程的管理策略
- 分布式和横向扩展策略
- 不同阶段处理的分层结构
因此通过对一些架构的解析,对如何构架一个服务器应该有些宏观性的把控,接下来就需要对这个框框里需要的各项技术的掌握,这也是一个从宏观到微观的过程
相关推荐
在给定的压缩包文件“设计模式-服务定位器”中,可能包含了一些示例代码,演示了如何在iOS平台上实现服务定位器模式。通过学习这些代码,你可以更深入地理解如何在实际项目中应用服务定位器,以及如何组织和管理服务...
在IT行业中,应用层客户-服务器(Client-Server)模式是一种常见的软件架构设计,它定义了应用程序如何通过网络进行通信。这种模式的核心在于一个服务提供者(服务器端)与一个或多个服务请求者(客户端)之间的交互...
《软件设计模式--填空题+简答题(复习7).rar》这个压缩包文件是一个针对《软件设计模式与体系结构》课程的复习资料,重点涵盖了软件设计中的关键概念和实践。设计模式是软件工程中的一种最佳实践,它代表了在特定上...
标题中的“203-ESP32_SDK开发-TCP服务器(模组AP热点模式,支持多个客户端连接通信)”指的是使用ESP32微控制器通过SDK进行TCP服务器的开发,该服务器运行在模块的AP(接入点)模式下,可以作为无线热点,允许多个...
3. **JavaBeans**:JSP与JavaBeans的结合使用,是Java Web开发中常见的模式。JavaBeans作为业务逻辑组件,可以被JSP页面引用,实现数据处理和业务规则的封装。 4. **Servlet与JSP的关系**:解释JSP如何转换成...
移动应用开发流程通常包括需求分析、设计、编码、测试、发布与维护等几个阶段。具体步骤如下: - **需求分析**:明确应用的目标用户、主要功能、预期成果等。 - **设计**:包括UI/UX设计,制定应用的外观和用户体验...
网站设计与Web应用开发技术是一门综合性的课程,涵盖了从网页设计基础到复杂Web应用程序的构建等多个方面。这门课程的电子教案和课后答案旨在帮助学生深入理解并掌握相关知识,通过实践来提升技能。 1. **HTML与CSS...
客户端-服务器架构是分布式计算的一种常见模式,其中客户端负责用户交互,而服务器则处理数据存储和管理。在Delphi中,开发这样的应用程序通常涉及以下关键知识点: 1. **数据库连接组件**:Delphi提供了多种数据库...
"php设计模式-designpatterns-php.zip"这个压缩包很可能包含了关于如何在PHP项目中应用设计模式的资料,特别是针对"designpatterns-php-master"这个文件名,我们可以推测这可能是一个关于PHP设计模式的开源项目或...
DAO(Data Access Object)设计模式是一种常见的软件设计模式,它在Java和其他面向对象的语言中广泛应用于数据访问层,主要用于隔离应用程序与数据库之间的交互。DAO模式的核心理念在于提供一个抽象层,使得业务逻辑...
在IT领域,C/S(Client/Server)模式是一种常见的网络架构,广泛应用于各种应用系统中,包括我们的主题——聊天室系统。在这个项目中,我们将深入探讨如何使用Java语言来实现这样一个C/S模式的聊天室。 1. **C/S...
在J2EE(Java企业版)中,设计模式的应用尤其重要,如 MVC(Model-View-Controller)模式用于构建用户界面,工厂模式用于对象的创建,策略模式用于处理业务逻辑的多样化,以及单例模式在应用服务器中的配置管理等。...
《MongoDB应用设计模式:MongoDB Applied Design Patterns》这本书深入探讨了在实际开发中如何有效地利用MongoDB的优势来构建高效、可靠且易于维护的数据存储解决方案。 在设计模式方面,书中可能涵盖了以下关键...
在软件开发领域,设计模式是经验丰富的开发者们总结出的解决常见问题的可复用解决方案。本实验报告主要探讨了五个关键的设计模式:组合模式、外观模式、代理模式、观察者模式以及策略模式,这些都是软件体系结构中的...
在软件开发领域,设计模式和体系结构是至关重要的概念,它们是解决常见问题的模板,为软件的可扩展性、可维护性和可重用性提供了基础。本资源"软件设计模式与体系结构课后习题代码(孙玉山).zip"包含了孙玉山教授讲解...
该文档主要介绍了在软件开发中如何应用设计模式来解决安全方面的问题,对于提高软件系统的安全性具有重要意义。 #### 二、安全设计模式概述 安全设计模式是专门用于增强软件系统安全性的设计模式。这些模式不仅...
### 网络应用与开发的设计与要求 #### 一、网络开发与技术课程的核心知识点 根据提供的课程设计报告信息,我们可以提炼出该课程设计的关键知识点主要包括以下几个方面: 1. **博客系统的背景与意义** - **背景**...
### 程序设计模式与架构 #### 创建型模式、结构型模式与行为型模式 在软件工程领域,设计模式是一套被反复使用、...理解和应用这些模式可以帮助开发者编写出更加健壮、可维护的代码,并有效地解决常见的设计问题。
### 移动应用开发教程详解 ...综上所述,移动应用开发不仅是技术上的挑战,也是对市场理解、用户体验和商业模式创新的考验。开发者们应该不断学习新技术,紧跟市场趋势,才能在这个竞争激烈的领域中脱颖而出。
Java Web开发是一个涵盖广泛的主题,包括使用Java语言进行服务器端编程、构建动态网站以及实现企业级应用程序。在Java Web开发中,我们主要涉及到以下几个关键知识点: 1. **Servlet**: Servlet是Java Web应用的...