【C/C++服务器开发】什么是服务器?服务器分类及构建一个简单的服务器系统

C/C++服务器开发 专栏收录该内容
11 篇文章 0 订阅

一、服务器的定义

服务器英文名称为“Server”,指的是网络环境下为客户机(Client)提供某种服务的专用计算机,服务器安装有网络操作系统(如Windows 2000 Server、Linux、Unix等)和各种服务器应用系统软件(如Web服务、电子邮件服务)的计算机。这里的“客户机”指安装有DOS、Windows 9x等普通用户使用的操作系统的计算机。
服务器的处理速度和系统可靠性都要比普通PC要高得多,因为服务器是在网络中一般是连续不断工作的。普通PC死机了大不了重启,数据的丢失损失也仅限于单台电脑。服务器则完全不同,许多重要的数据都保存在服务器上,许多网络服务都在服务器上运行,一旦服务器发生故障,将会丢失大量的数据,造成的损失是难以估计的,而且服务器提供的功能如代理上网、安全验证、电子邮件服务等都将失效,从而造成网络的瘫痪,对服务器可靠性的要求可见一斑。

二、服务器的分类

服务器的分类可以按照不同的标准,一般可以按外形,CPU指令集,用途来进行分类。

1.外形

可以分为塔式服务器、机架服务器、刀片式服务器、高密度服务器。

这里写图片描述

2.CPU指令集

按照服务器的结构,可以分为CISC(复杂指令集)架构的服务器和RISC(精简指令集)架构的服务器:

  1. IA架构服务器(Intel Architecture Server)-即通常所讲的PC服务器,采用x86(CISC)芯片并且主要采用Windows NT/Windows2000、Linux、FreeBSD等操作系统的服务器,如Intel PentiumIII(P4)和Intel (P4)Xeon(至强)等。
  2. RISC架构的服务器指采用非英特尔架构技术的服务器, 使用RISC芯片并且主要采用UNIX操作系统的服务器,如SUN公司的SPARC、HP公司的PA-RISC、DEC的Alpha芯片、SGI公司的MIPS等;
    这里写图片描述

由于RISC架构服务器的性能和价格比CISC架构的服务器高得多。近几年来,随着PC技术的迅速发展,IA架构服务器与RISC架构的服务器之间的技术差距已经大大缩小,用户基本上倾向于选择IA架构服务器,但是RISC架构服务器在大型、关键的应用领域中仍然居于非常重要的地位。

3.用途

我们最关心的通常是服务器上面运行的业务种类和负载类型,不同的业务应用和负载需要不同类型的服务器来承载。根据应用类型,可分为:数据库服务器、应用服务器、文件服务器、Web服务器、接入服务器等。

1.web服务器

WEB简介

WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。 WWW 是 Internet 的多媒体信息查询工具,是 Internet 上近年才发展起来的服务,也是发展最快和目前用的最广泛的服务。正是因为有了WWW工具,才使得近年来 Internet 迅速发展,且用户数量飞速增长。

Web服务器是可以向发出请求的浏览器提供文档的程序

1、服务器是一种被动程序:只有当Internet上运行其他计算机中的浏览器发出的请求时,服务器才会响应。

2 、最常用的Web服务器是ApacheMicrosoftInternet信息服务器(Internet Information Services,IIS)。

3、Internet上的服务器也称为Web服务器,是一台在Internet上具有独立IP地址的计算机,可以向Internet上的客户机提供WWW、EmailFTP等各种Internet服务。

4**、**Web服务器是指驻留于因特网上某种类型计算机的程序。当Web浏览器(客户端)连到服务器上并请求文件时,服务器将处理该请求并将文件反馈到该浏览器上,附带的信息会告诉浏览器如何查看该文件(即文件类型)。服务器使用HTTP超文本传输协议)与客户机浏览器进行信息交流,这就是人们常把它们称为HTTP服务器的原因。

Web服务器不仅能够存储信息,还能在用户通过Web浏览器提供的信息的基础上运行脚本和程序。

协议
  1. 应用层使用HTTP协议
  2. HTML(标准通用标记语言下的一个应用)文档格式。
  3. 浏览器统一资源定位器URL)。
  4. 为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
WWW简介

WWW是 World Wide Web (环球信息网)的缩写,也可以简称为 Web,中文名字为“万维网”。它起源于1989年3月,由欧洲量子物理实验室CERN(the European Laboratory for Particle Physics)所发展出来的主从结构分布式超媒体系统。通过万维网,人们只要通过使用简单的方法,就可以很迅速方便地取得丰富的信息资料。由于用户在通过 Web浏览器访问信息资源的过程中,无需再关心一些技术性的细节,而且界面非常友好,因而 Web 在Internet 上一推出就受到了热烈的欢迎,走红全球,并迅速得到了爆炸性的发展。

发展和特点

长期以来,人们只是通过传统的媒体(如电视、报纸、杂志和广播等)获得信息。但随着计算机网络的发展,人们想要获取信息,已不再满足于传统媒体那种单方面传输和获取的方式,而希望有一种主观的选择性。网络上提供各种类别的数据库系统,如文献期刊、产业信息、气象信息、论文检索等等。由于计算机网络的发展,信息的获取变得非常及时、迅速和便捷。

到了1993年,WWW 的技术有了突破性的进展,它解决了远程信息服务中的文字显示、数据连接以及图像传递的问题,使得 WWW 成为 Internet 上最为流行的信息传播方式。Web 服务器成为 Internet 上最大的计算机群,Web 文档之多、链接的网络之广,令人难以想象。可以说,Web 为 Internet 的普及迈出了开创性的一步,是近年来 Internet 上取得的最激动人心的成就。

WWW 采用的是浏览器/服务器结构,其作用是整理和储存各种WWW资源,并响应客户端软件的请求,把客户所需的资源传送到 Windows 95(或Windows98)、Windows NT、UNⅨ 或 Linux 等平台上。

使用最多的 web server服务器软件有两个:微软的信息服务器(iis),和Apache。

通俗的讲,Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。确切一点,你可以说:Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑(business logic)。

Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应(response),例如送回一个HTML页面。为了处理一个请求(request),Web服务器可以响应(response)一个静态页面或图片,进行页面跳转(redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序例如CGI脚本,JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,服务器端(server-side)JavaScript,或者一些其它的服务器端(server-side)技术。无论它们(译者注:脚本)的目的如何,这些服务器端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器可以浏览。

要知道,Web服务器的代理模型(delegation model)非常简单。当一个请求(request)被送到Web服务器里来时,它只单纯的把请求(request)传递给可以很好的处理请求(request)的程序(译者注:服务器端脚本)。Web服务器仅仅提供一个可以执行服务器端(server-side)程序和返回(程序所产生的)响应(response)的环境,而不会超出职能范围。服务器端(server-side)程序通常具有事务处理(transaction processing),数据库连接(database connectivity)和消息(messaging)等功能。

虽然Web服务器不支持事务处理或数据库连接池,但它可以配置(employ)各种策略(strategies)来实现容错性(fault tolerance)和可扩展性(scalability),例如负载平衡(load balancing),缓冲(caching)。集群特征(clustering—features)经常被误认为仅仅是应用程序服务器专有的特征。

应用程序服务器(The Application Server)

根据我们的定义,作为应用程序服务器,它通过各种协议,可以包括HTTP,把商业逻辑暴露给(expose)客户端应用程序。Web服务器主要是处理向浏览器发送HTML以供浏览,而应用程序服务器提供访问商业逻辑的途径以供客户端应用程序使用。应用程序使用此商业逻辑就象你调用对象的一个方法(或过程语言中的一个函数)一样。

应用程序服务器的客户端(包含有图形用户界面(GUI)的)可能会运行在一台PC、一个Web服务器或者甚至是其它的应用程序服务器上。在应用程序服务器与其客户端之间来回穿梭(traveling)的信息不仅仅局限于简单的显示标记。相反,这种信息就是程序逻辑(program logic)。正是由于这种逻辑取得了(takes)数据和方法调用(calls)的形式而不是静态HTML,所以客户端才可以随心所欲的使用这种被暴露的商业逻辑

在大多数情形下,应用程序服务器是通过组件(component)的应用程序接口(API)把商业逻辑暴露(expose)(给客户端应用程序)的,例如基于J2EE(Java 2 Platform,Enterprise Edition)应用程序服务器的EJB(Enterprise JavaBean)组件模型。此外,应用程序服务器可以管理自己的资源,例如看大门的工作(gate-keeping duties)包括安全(security),事务处理(transaction processing),资源池(resource pooling), 和消息(messaging)。就象Web服务器一样,应用程序服务器配置了多种可扩展(scalability)和容错(fault tolerance)技术。

例如,设想一个在线商店(网站)提供实时定价(real-time pricing)和有效性(availability)信息。这个站点(site)很可能会提供一个表单(form)让你来选择产品。当你提交查询(query)后,网站会进行查找(lookup)并把结果内嵌在HTML页面中返回。网站可以有很多种方式来实现这种功能。我要介绍一个不使用应用程序服务器的情景和一个使用应用程序服务器的情景。观察一下这两中情景的不同会有助于你了解应用程序服务器的功能。

情景1:不带应用程序服务器的Web服务器

在此种情景下,一个Web服务器独立提供在线商店的功能。Web服务器获得你的请求(request),然后发送给服务器端(server-side)可以处理请求(request)的程序。此程序从数据库或文本文件(flat file,译者注:flat file是指没有特殊格式的非二进制的文件,如properties和XML文件等)中查找定价信息。一旦找到,服务器端(server-side)程序把结果信息表示成(formulate)HTML形式,最后Web服务器把会它发送到你的Web浏览器

简而言之,Web服务器只是简单的通过响应(response)HTML页面来处理HTTP请求(request)。

情景2:带应用程序服务器的Web服务器

情景2和情景1相同的是Web服务器还是把响应(response)的产生委托(delegates)给脚本(译者注:服务器端(server-side)程序)。然而,你可以把查找定价的商业逻辑(business logic)放到应用程序服务器上。由于这种变化,此脚本只是简单的调用应用程序服务器的查找服务(lookup service),而不是已经知道如何查找数据然后表示为(formulate)一个响应(response)。这时当该脚本程序产生HTML响应(response)时就可以使用该服务的返回结果了。

在此情景中,应用程序服务器提供(serves)了用于查询产品的定价信息的商业逻辑。(服务器的)这种功能(functionality)没有指出有关显示和客户端如何使用此信息的细节,相反客户端和应用程序服务器只是来回传送数据。当有客户端调用应用程序服务器的查找服务(lookup service)时,此服务只是简单的查找并返回结果给客户端。

通过从响应产生(response-generating)HTML的代码中分离出来,在应用程序之中该定价(查找)逻辑的可重用性更强了。其他的客户端,例如收款机,也可以调用同样的服务(service)来作为一个店员给客户结帐。相反,在情景1中的定价查找服务是不可重用的因为信息内嵌在HTML页中了。

总而言之,在情景2的模型中,在Web服务器通过回应HTML页面来处理HTTP请求(request),而应用程序服务器则是通过处理定价和有效性(availability)请求(request)来提供应用程序逻辑的。

警告(Caveats)

XML Web Services已经使应用程序服务器和Web服务器的界线混淆了。通过传送一个XML有效载荷(payload)给服务器,Web服务器现在可以处理数据和响应(response)的能力与以前的应用程序服务器同样多了。

另外,大多数应用程序服务器也包含了Web服务器,这就意味着可以把Web服务器当作是应用程序服务器的一个子集(subset)。虽然应用程序服务器包含了Web服务器的功能,但是开发者很少把应用程序服务器部署(deploy)成这种功能(capacity)(译者注:这种功能是指既有应用程序服务器的功能又有Web服务器的功能)。相反,如果需要,他们通常会把Web服务器独立配置,和应用程序服务器一前一后。这种功能的分离有助于提高性能(简单的Web请求(request)就不会影响应用程序服务器了),分开配置(专门的Web服务器,集群(clustering)等等),而且给最佳产品的选取留有余地。

服务器特点

Windows,Linux与Unix这3个操作系统是架设Web服务器比较常见的操作系统。Linux的安全性能在这3个操作系统中最高,可以支持多个硬件平台,其网络功能比较强大。总的来说,这两大优点是其他操作系统不可替代的:第一,可以依据用户不同的需求来随意修改、调整与复制各种程序的源码以及发布在互联网上;第二,Linux操作系统的市场价格比较便宜,也能够在互联网上免费下载源码。可以说,Linux为架设既高效又安全的Web服务器的比较理想的操作系统。此外,要让Web服务器更具有优越的性能,可以根据服务器系统之特点与用途作进一步的优化与处理,尽量减少Web服务器的数据传输量以及降低其数据传输的频率,进而促进网络宽带的利用率与使用率,以及提高网络客户端的网页加载的速度,同时也可以减少Web服务器各种资源的消耗。

工作原理

Web服务器的工作原理并不复杂,一般可分成如下4个步骤:连接过程、请求过程、应答过程以及关闭连接。下面对这4个步骤作一简单的介绍。连接过程就是Web服务器和其浏览器之间所建立起来的一种连接。查看连接过程是否实现,用户可以找到和打开socket这个虚拟文件,这个文件的建立意味着连接过程这一步骤已经成功建立。请求过程就是Web的浏览器运用socket这个文件向其服务器而提出各种请求。应答过程就是运用HTTP协议把在请求过程中所提出来的请求传输到Web的服务器,进而实施任务处理,然后运用HTTP协议把任务处理的结果传输到Web的浏览器,同时在Web的浏览器上面展示上述所请求之界面。关闭连接就是当上一个步骤–应答过程完成以后,Web服务器和其浏览器之间断开连接之过程。Web服务器上述4个步骤环环相扣、紧密相联,逻辑性比较强,可以支持多个进程、多个线程以及多个进程与多个线程相混合的技术。

2.应用服务器

应用服务器是指通过各种协议把商业逻辑曝露给客户端的程序。它提供了访问商业逻辑的途径以供客户端应用程序使用。应用服务器使用此商业逻辑就像调用对象的一个方法一样。

定义

随着Internet的发展壮大,“主机/终端”或“客户机/服务器”的传统的应用系统模式已经不能适应新的环境,于是就产生了新的分布式应用系统,相应地,新的开发模式也应运而生,即所谓的“浏览器/服务器”结构、“瘦客户机”模式。应用服务器便是一种实现这种模式核心技术。 [1]

Web应用程序驻留在应用服务器(Application Server)上。应用服务器为Web应用程序提供一种简单的和可管理的对系统资源的访问机制。它也提供低级的服务,如HTTP协议的实现和数据库连接管理。Servlet容器仅仅是应用服务器的一部分。除了Servlet容器外,应用服务器还可能提供其他的[Java EE](https://baike.baidu.com/item/Java EE)(Enterprise Edition)组件,如EJB容器,JNDI服务器以及JMS服务器等。

市场上可以得到多种应用服务器,其中包括Apache的Tomcat、IBM的WebSphere Application Server、Caucho Technology的Resin、Macromedia的JRun、NEC WebOTX Application Server、JBoss Application Server、Oracle(并购了BEA)的WebLogic等。其中有些如NEC WebOTX Application Server、WebLogic、WebSphere不仅仅是Servlet容器,它们也提供对EJB(Enterprise JavaBeans)、JMS(Java Message Service)以及其他Java EE技术的支持。每种类型的应用服务器都有自己的优点、局限性和适用性。

分类

通常,根据确定文档内容的时间,所有文档可以划分为如下三类。

静态

静态:静态Web 文档是一个存储于Web服务器的文件。静态文档的作者在写作的时候确定文档的内容。由于文档内容不会变化,所以对静态文档的每次访问都返回相同结果。

动态

动态:动态web文档不是以一个预先定义的格式存在,而是在浏览器访问web服务器时创建。当一个请求到达时,web服务器运行一个应用程序创建动态文档(dynamic documents),服务器返回程序的输出作为应答。由于每次访问都要创建新的文档,动态文档的内容是变化的。

概括

Web 文档根据文档内信息改变的时间可分为三类。静态文档的信息只有当作者修改时才会改变,动态文档的信息在服务器端收到文档申请时改变,活动文档显示的信息在文档下载到浏览器一端运行后改变。由于创建动态文档的责任在管理文档的服务器一端,支持动态文档也只需修改服务器。实际上,变化意味着扩展,管理动态文档的服务器也包含了处理静态文档的代码。处理动态文档的Web服务器需要三个特性。

首先,服务器程序必须扩展,当每次请求到达时,能够执行一个单独的创建文档的应用程序。服务器必须编成能够捕获应用程序的输出,并且将该文档返回给浏览器。

其次,必须为每个动态文档写一个单独的应用程序。

最后,服务器必须配置成能够知道哪一个URL 对应于动态文档和哪一个URL 对应于静态文档。对每个动态文档,配置时必须说明产生文档的应用程序。每个申请包含着一个对应动态或静态文档的URL,服务器使用配置信息和收到的请求中的URL决定如何处理。如果配置信息说明申请中的URL对应着一个静态文档,服务器就跟往常一样取出文件。如果申请中的URL对应着动态文档,服务器选择生成该文档的应用程序,运行程序,并且把程序的输出作为文档返回给浏览器。

区别
应用服务器和WEB服务器的区别

通俗的讲,Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。确切一点,你可以说:Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑(business logic)。

下面让我们来细细道来:

Web型

Web服务器(Web Server)可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应 (response),例如送回一个HTML页面。为了处理一个请求(request),Web服务器可以响应(response)一个静态页面或图片, 进行页面跳转(redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序例如CGI脚本,JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,服务器端(server-side)JavaScript,或者一些其它的服务器端(server-side)技术。无论它们(译者 注:脚本)的目的如何,这些服务器端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器可以浏览。

企业WEB服务器是面向企业网络用户的信息交流平台,WEB在企业生产管理过程中的应用越来越多,是信息化应用的入口,一些应用系统都集成在WEB服务器上。要知道,Web服务器的代理模型(delegation model)非常简单。当一个请求(request)被送到Web服务器里来时,它只单纯的把请求(request)传递给可以很好的处理请求 (request)的程序(译者注:服务器端脚本)。Web服务器仅仅提供一个可以执行服务器端(server-side)程序和返回(程序所产生的)响 应(response)的环境,而不会超出职能范围。服务器端(server-side)程序通常具有事务处理(transaction processing),数据库连接(database connectivity)和消息(messaging)等功能。

虽然Web 服务器不支持事务处理或数据库连接池,但它可以配置(employ)各种策略(strategies)来实现容错性(fault tolerance)和可扩展性(scalability),例如负载平衡(load balancing),缓冲(caching)。集群特征(clustering-features)经常被误认为仅仅是应用程序服务器专有的特征。

应用程序型

应用程序服务器(The Application Server)

根据定义,作为应用程序服务器,它通过各种协议,可以包括HTTP,把商业逻辑暴露给(expose)客户端应用程序。Web服务器主要是处理向 浏览器发送HTML以供浏览,而应用程序服务器提供访问商业逻辑的途径以供客户端应用程序使用。应用程序使用此商业逻辑就像你调用对象的一个方法(或过程 语言中的一个函数)一样。

应用程序服务器的客户端(包含有图形用户界面(GUI)的)可能会运行在一台PC、一个Web服务器或者甚至 是其它的应用程序服务器上。在应用程序服务器与其客户端之间来回穿梭(traveling)的信息不仅仅局限于简单的显示标记。相反,这种信息就是程序逻 辑(program logic)。 正是由于这种逻辑取得了(takes)数据和方法调用(calls)的形式而不是静态HTML,所以客户端才可以随心所欲的使用这种被暴露的商业逻辑。

在大多数情形下,应用程序服务器是通过组件(component)的应用程序接口(API)把商业逻辑暴露(expose)(给客户端应用程序)的,例 如基于J2EE(Java 2 Platform, Enterprise Edition)应用程序服务器的EJB(Enterprise JavaBean)组件模型。此外,应用程序服务器可以管理自己的资源,例如看大门的工作(gate-keeping duties)包括安全(security),事务处理(transaction processing),资源池(resource pooling), 和消息(messaging)。就象Web服务器一样,应用程序服务器配置了多种可扩展(scalability)和容错(fault tolerance)技术。

严格意义上Web服务器只负责处理HTTP协议,只能发送静态页面的内容。而JSP,ASP,PHP等动态内容需要通过CGI、FastCGI、ISAPI等接口交给其他程序去处理。这个其他程序就是应用服务器。
比如Web服务器包括Nginx,Apache,IIS等。而应用服务器包括WebLogic,JBoss等。应用服务器一般也支持HTTP协议,因此界限没这么清晰。但是应用服务器的HTTP协议部分仅仅是支持,一般不会做特别优化,所以很少有见Tomcat直接暴露给外面,而是和Nginx、Apache等配合,只让Tomcat处理JSP和Servlet部分。

3.文件服务器

文件服务器(File server),又称档案伺服器,是指在计算机网络环境中,所有用户都可访问的文件存储设备,是一种专供其他电脑检索文件和存储的特殊电脑。 文件服务器通常比一般的个人电脑拥有更大的存储容量,并具有一些其他的功能,如磁盘镜像、多个网络接口卡、热备援多电源供应器。文件服务器已进化成带有RAID存储子系统和其他高可用特性的高性能系统。文件服务器增强了存储器的功能,简化了网络数据的管理。一方面改善了系统的性能,提高了数据的可用性,另一方面减少了管理的复杂程度,降低了运营费用。

简介

在客机与服务器模式下,文件服务器(file server)是一台对中央存储和数据文件管理负责的计算机,这样在同一网络中的其他计算机就可以访问这些文件。文件服务器允许用户在网络上共享信息,而不用通过软磁盘或一些其它外部存储设备来物理地移动文件。任何计算机都能被设置为主机,并作为文件服务器(file server)运行。最简单的形式是,文件服务器可以是一台普通的个人计算机,它处理文件要求并在网络中发送它们。在更复杂的网络中,文件服务器也可以是一台专门的网络附加存储(NAS)设备,它也可以作为其他计算机的远程硬盘驱动器来运行,并允许网络中的人像在他们自己的硬盘中一样在服务器中存储文件。文件服务器具有分时系统文件管理的全部功能,提供网络用户访问文件、目录的并发控制和安全保密措施的局域网(LAN)服务器。因此,文件服务器应具备完善的文件管理功能,能够对全网实行统一的文件管理,各工作站用户可以不参与文件管理工作。文件服务器能为网络用户提供完善的数据、文件和目录服务。 [3]

NAS(网络附加存储)和SAN(存储区域网络)是文件服务器行业主流的两种集中存储的技术。两种技术均将存储与使用存储的系统分离,利用网络实现连通及共享,从而达到存储设备统一使用、统一管理,具有良好的可扩充性。通过合理的、动态的空间划分达到空间的最合理使用,减少扩容的盲目性和降低不必要的扩容成本。通过设备共享和统一管理,减少存储设备的维护和升级的复杂度,降低运行成本,提高维护效率。 [1]

功能

文件服务器在网络上提供一个中心位置,可供用户存储文件并通过网络与其他用户共享文件。文件服务器负责共享资源的管理、传递和接收,管理存储设备(硬盘、光盘、磁带)中的文件,为网络用户提供文件共享服务,也称文件共享服务器。 [4]

文件服务器具有分时系统管理的全部功能,能够对全网统一管理,能够提供网络用户访问文件、目录的并发控制和安全保密措施。

文件服务器是一台特殊功能的计算机,其主要目的是向客户机提供文件服务。文件服务器可以是一台能够运行其他应用的通用计算机,也可以是一台专门提供文件服务的专用计算机

分类

按照是否采用了分布式技术,文件服务器可以分成集中式文件服务器和分布式文件服务器两大类。事实上,集中式与分布式文件服务器并没有明确的界限,可以说只是技术进步而导致的更新换代。如果只在存储环境中部署了单一的具有分布式功能的文件服务器,那么它还是一台集中式的文件服务器。 [1]

集中式文件服务器

NAS(网络附加存储)和SAN(存储区域网络)是文件服务器行业主流的两种集中存储的技术。

(1)SAN

SAN—存储区域网络,即通过特定的互连方式连接的若干台存储服务器组成一个单独的数据网络,提供企业级的数据存储服务。SAN是一种特殊的高速网络,连接网络服务器和诸如大磁盘阵列或备份磁带库的存储设备,SAN置于LAN之下,而不涉及LAN。利用SAN,不仅可以提供大容量的存储数据,而且地域上可以分散,并缓解了大量数据传输对于局域网的影响。SAN的结构允许任何服务器连接到任何存储阵列,不管数据置放在哪里,服务器都可直接存取所需的数据。

(2)NAS

NAS—网络附加存储,即将存储设备连接到现有的网络上,提供数据和文件服务。NAS以网络为中心,支持开放的标准协议,提供跨平台的文件和数据共享服务;部署简单快捷,具有多方位的高扩展性和独立优化的存储操作系统;采用集中的存储模式;可在线扩容和增加设备;支持多种协议的管理软件、日志文件系统、快照和镜像等功能;即插即用。NAS技术主要应用于以文件应用为主的、升级灵活性强和数据在线性高(与SAN在线性高的特点不同的是,可在线扩充系统结构)的企业,代表企业包括ISP、 ICP、 IDC、石油、出版、教育行业和办公环境等。

分布式文件服务器

从SAN和NAS扩展出来的分布式文件服务器。

由于SAN系统本身具有极高的扩展能力,开发商比较容易就能实现SAN网络中的服务器集群。如IBM的S/390 Paralle Sysplex已经提供了跨多个服务器联合体的成员进行无缝负载均衡的服务和操作系统工具。联想也有支持多服务器的SAN解决方案,比较典型的是SureFibre400系列。

利用联想的SureFibre400搭建的分布式文件服务器系统。该方案使用了两个Brocade3200交换机,每台服务器通过两块光纤通道适配卡(HBA),两条光纤线路分别接入到两台交换机上,提供线路冗余;光纤阵列提供两个主机接口,它们分别接入到两台交换机上,以提供线路冗余和提高性能。

由于NAS对硬件没有特殊依赖,而主要是依靠软件进行协调的网络存储系统,只要提供支持集群服务的操作系统及相关软件,NAS服务器也能很容易做到分布式布局。NetworkAppliance的NetApp Filer系列就包括用于集群、数据损坏的即时恢复、远程镜像和灾难恢复的软件产品。

应用NetApp Filer作为存储设备的简单服务器系统。连接到以太网中的两台Filer通过Network Appliance的Data ONTAPTM操作系统组建虚拟文件系统,并可通过增值软件工具Snapshot和SnapRestore提供即时恢复机制。使用Data ONTAP,操作系统甚至可以实现SAN和NAS服务器的整合,将UNIX, Windows, SAN,和WEB数据集中到中央站点。

4.数据库服务器

数据库服务器由运行在局域网中的一台/多台计算机和数据库管理系统软件共同构成,数据库服务器为客户应用程序提供数据服务。

1.数据库服务器是什么

数据库服务器其实就是装有一台数据库的Server,应用于Internet或Intranet。一个数据库服务器是指运行在局域网中的一台或多台服务器计算机上的数据库管理系统软件,数据库服务器为客户应用提供服务,这些服务是查询、更新、事务管理、索引、高速缓存、查询优化、安全及多用户存取控制等。数据库软件有很多种大型的数据库软件有Oracle,DB2,Sybase等,中型的有SQL Server,还有通常用于个人网站的MySQL等小型数据库软件。

企业业务对数据库服务器的要求

(1)数据库服务器要具有极强的承载能力。当企业内部需要查询一些信息时,其后台处理系统(数据库服务器)就要开始查询,并将查找到的信息反馈给用户。当大量的用户在查询信息时,如果数据库服务器不具备极强的承载能力,是无法满足其需求的。

(2)数据库服务器要具有很强的实时应答能力。当数据信息被检索到后,会反馈给用户,如果数据库服务器不具有很强的应答能力,会造成反馈信息速度非常缓慢,甚至造成数据库服务器死机的情况。

(3)数据库服务器要具有很强的扩展能力。数据库中的信息随时都会发生变化,如今是信息时代,大量数据需要录入、处理等,因此,数据库服务器的扩展能力不容忽视。

(4)数据库服务器的可用性和可靠性。数据库服务器要具备365天7*24不间断运行的能力,这样才能满足需要。当然,一台服务器要真正保持这样的运行,也不太现实。因此许多企业的数据库服务器并不只有一台,通常具有多台,并且还配备了备份服务器等。

大型企业需要的数据库服务器性能和扩展能力等方面要求更高,它们在组建数据库系统时,不仅仅是使用多台数据库服务器,还需要存储系统等。而中小企业则有些不同,它们需要的数据库服务器性能不需要像大型企业数据库服务器那么强,数量要求也没那么多,因此在选择服务器时更轻松一些。

2.数据库服务器特点
1. 编程量减少

数据库服务器提供了用于数据操纵的标准接口API(Application Programming Interface,应用程序编程接 口)。

2. 数据库安全高

数据库服务器提供监控性能、并发控制等工具。由DBA(Database Administrator,数据库管理员)统一负 责授权访问数据库及网络管理。

3. 数据可靠性管理

数据库服务器提供统一的数据库备份/恢复、启动/停止数据库的管理工具。

4. 计算机资源利用充分

数据库服务器把数据管理及处理工作从客户机上分离出来,使网络中各计算机资源能灵活分配、各尽其用。

5. 系统性能提高

能大大降低网络开销。

协调操作,减少资源竞争,避免死锁。

提供联机查询优化机制。

6. 易扩展

支持多处理器(相同类型)的水平扩展。

支持多个服务器的水平扩展。

支持垂直扩展,服务器可以移植到功能更强的计算机上,不涉及处理数据的重新分布问题。

3.数据库服务器应用

应用:

数据库服务器其实是应用服务器中的一种,而应用服务器又分很多类,包括邮件服务器,文件服务器,DNS服务器,他们实现的是一种作用,这种作用主要是再硬件服务器设备上集成软件实现,数据库服务器的作用主要是完成数据的处理、缓存、转换等作用,当然,服务器的选择是需要考虑性能参数的。

三、C语言在Linux上实现一个简易Web服务器

可以参考这篇博客:【网络编程学习记录1】Linux下的socket演示程序

服务器端代码 server.cpp:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main(){
    //创建套接字
    int serv_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    //将套接字和IP、端口绑定
    struct sockaddr_in serv_addr;
    memset(&serv_addr, 0, sizeof(serv_addr));  //每个字节都用0填充
    serv_addr.sin_family = AF_INET;  //使用IPv4地址
    serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");  //具体的IP地址
    serv_addr.sin_port = htons(1234);  //端口
    bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
    //进入监听状态,等待用户发起请求
    listen(serv_sock, 20);
    //接收客户端请求
    struct sockaddr_in clnt_addr;
    socklen_t clnt_addr_size = sizeof(clnt_addr);
    int clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
    //向客户端发送数据
    char str[] = "http://c.biancheng.net/socket/";
    write(clnt_sock, str, sizeof(str));
   
    //关闭套接字
    close(clnt_sock);
    close(serv_sock);
    return 0;
}

客户端代码 client.cpp:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
int main(){
    //创建套接字
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    //向服务器(特定的IP和端口)发起请求
    struct sockaddr_in serv_addr;
    memset(&serv_addr, 0, sizeof(serv_addr));  //每个字节都用0填充
    serv_addr.sin_family = AF_INET;  //使用IPv4地址
    serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");  //具体的IP地址
    serv_addr.sin_port = htons(1234);  //端口
    connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
   
    //读取服务器传回的数据
    char buffer[40];
    read(sock, buffer, sizeof(buffer)-1);
   
    printf("Message form server: %s\n", buffer);
   
    //关闭套接字
    close(sock);
    return 0;
}

启动一个终端(Shell),先编译 server.cpp 并运行:

[admin@localhost ~]$ g++ server.cpp -o server
[admin@localhost ~]$ ./server
#等待请求的到来

正常情况下,程序运行到 accept() 函数就会被阻塞,等待客户端发起请求。

接下再启动一个终端,编译 client.cpp 并运行:

[admin@localhost ~]$ g++ client.cpp -o client
[admin@localhost ~]$ ./client
Message form server: http://c.biancheng.net/socket/

client 接收到从 server发送过来的字符串就运行结束了,同时,server 完成发送字符串的任务也运行结束了。大家可以通过两个打开的终端来观察。

注意这里一定要打开两个终端来进行,因为,执行./server后所在终端就会被占用,无法继续输入命令了,因此执行 ./client需要在另一个终端。结果如下图

client 运行后,通过 connect() 函数向 server 发起请求,处于监听状态的 server 被激活,执行 accept() 函数,接受客户端的请求,然后执行 write() 函数向 client 传回数据。client 接收到传回的数据后,connect() 就运行结束了,然后使用 read() 将数据读取出来。

server 只接受一次 client 请求,当 server 向 client 传回数据后,程序就运行结束了。如果想再次接收到服务器的数据,必须再次运行 server,所以这是一个非常简陋的 socket 程序,不能够一直接受客户端的请求。

源码解析
先说一下 server.cpp 中的代码。
第 11 行通过 socket() 函数创建了一个套接字,参数 AF_INET 表示使用 IPv4 地址,SOCK_STREAM 表示使用面向连接的套接字,IPPROTO_TCP 表示使用 TCP 协议。在 Linux 中,socket 也是一种文件,有文件描述符,可以使用 write() / read() 函数进行 I/O 操作,这一点已在《socket是什么》中进行了讲解。

第 19 行通过 bind() 函数将套接字 serv_sock 与特定的 IP 地址和端口绑定,IP 地址和端口都保存在 sockaddr_in 结构体中。

socket() 函数确定了套接字的各种属性,bind() 函数让套接字与特定的IP地址和端口对应起来,这样客户端才能连接到该套接字。

第 22 行让套接字处于被动监听状态。所谓被动监听,是指套接字一直处于“睡眠”中,直到客户端发起请求才会被“唤醒”。

第 27 行的 accept() 函数用来接收客户端的请求。程序一旦执行到 accept() 就会被阻塞(暂停运行),直到客户端发起请求。

第 31 行的 write() 函数用来向套接字文件中写入数据,也就是向客户端发送数据。

和普通文件一样,socket 在使用完毕后也要用 close() 关闭。

再说一下 client.cpp 中的代码。client.cpp 中的代码和 server.cpp 中有一些区别。
第 19 行代码通过 connect() 向服务器发起请求,服务器的IP地址和端口号保存在 sockaddr_in 结构体中。直到服务器传回数据后,connect() 才运行结束。

第 23 行代码通过 read() 从套接字文件中读取数据。

四、熟悉在Linux上进行开发

参考这篇博客:Vscode远程连接linux服务器(阿里云服务器)

在这里插入图片描述
在这里插入图片描述
配置一下阿里服务器的信息
https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20211113225710015.png

更改设置,输入密码

点击登入
在这里插入图片描述

输入密码之后,就可以连接上服务器

在这里插入图片描述

打开文件夹到相应目录就可以进行开发了,文件也会实时同步到服务器上


现在我们在Linux服务器上对上面的简易服务器代码进行重现。

在这里插入图片描述

  • 1
    点赞
  • 0
    评论
  • 2
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

小熊coder

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值