服务器结构

服务器结构,第1张

服务器塔式、机架式和刀片式这三种结构来划分服务器,服务器的外形为什么会有这样的划分呢?主要原因就是具体的应用环境不同,塔式服务器长得跟我们平时用的台式机一样,占用空间比较大,一般是一些小型企业自己使用自己维护;而机架式服务器长得就像卧着的台式机,可以一台一台的放到固定机架上,因此而得名,它可以拿去专业的服务器托管提供商那里进行托管,这样每年只需支付一定的托管费,就免去了自己管理服务器的诸多不便;而刀片服务器是近几年才比较流行的一种服务器架构,它非常薄,可以一片一片的叠放在机柜上,通过群集技术进行协同运算,能够处理大量的任务,特别适合分布式服务,如作为WEB服务器。

看完上面的简单介绍,相信各位对这3种服务器已经有个基本的认识了,下面我们就来一一细说,为大家做更详细的讲解:

什么是塔式服务器:

塔式服务器应该是大家见得最多,也最容易理解的一种服务器结构类型,因为它的外形以及结构都跟我们平时使用的立式PC差不多,当然,由于服务器的主板扩展性较强、插槽也多出一堆,所以个头比普通主板大一些,因此塔式服务器的主机机箱也比标准的ATX机箱要大,一般都会预留足够的内部空间以便日后进行硬盘和电源的冗余扩展。

由于塔式服务器的机箱比较大,服务器的配置也可以很高,冗余扩展更可以很齐备,所以它的应用范围非常广,应该说目前使用率最高的一种服务器就是塔式服务器。我们平时常说的通用服务器一般都是塔式服务器,它可以集多种常见的服务应用于一身,不管是速度应用还是存储应用都可以使用塔式服务器来解决。

就使用对象或者使用级别来说,目前常见的入门级和工作组级服务器基本上都采用这一服务器结构类型,一些部门级应用也会采用,不过由于只有一台主机,即使进行升级扩张也有个限度,所以在一些应用需求较高的企业中,单机服务器就无法满足要求了,需要多机协同工作,而塔式服务器个头太大,独立性太强,协同工作在空间占用和系统管理上都不方便,这也是塔式服务器的局限性。不过,总的来说,这类服务器的功能、性能基本上能满足大部分企业用户的要求,其成本通常也比较低,因此这类服务器还是拥有非常广泛的应用支持。

什么是机架式服务器:

作为为互联网设计的服务器模式,机架服务器是一种外观按照统一标准设计的服务器,配合机柜统一使用。可以说机架式是一种优化结构的塔式服务器,它的设计宗旨主要是为了尽可能减少服务器空间的占用,而减少空间的直接好处就是在机房托管的时候价格会便宜很多。

为什么说机架式服务器是作为为互联网设计的服务器模式?

正如大家所知,很多专业网络设备都是采用机架式的结构(多为扁平式,活像个抽屉),如交换机、路由器、硬件防火墙这些。这些设备之所以有这样一种结构类型,是因为他们都按国际机柜标准进行设计,这样大家的平面尺寸就基本统一,可把一起安装在一个大型的立式标准机柜中。这样做的好处非常明显:一方面可以使设备占用最小的空间,另一方面则便于与其它网络设备的连接和管理,同时机房内也会显得整洁、美观。

机架服务器的宽度为19英寸,高度以U为单位(1U=1.75英寸=44.45毫米),通常有1U,2U,3U,4U,5U,7U几种标准的服务器。机柜的尺寸也是采用通用的工业标准,通常从22U到42U不等;机柜内按U的高度有可拆卸的滑动拖架,用户可以根据自己服务器的标高灵活调节高度,以存放服务器、集线器、磁盘阵列柜等网络设备。服务器摆放好后,它的所有I/O线全部从机柜的后方引出(机架服务器的所有接口也在后方),统一安置在机柜的线槽中,一般贴有标号,便于管理。

现在很多互联网的网站服务器其实都是由专业机构统一托管的,网站的经营者其实只是维护网站页面,硬件和网络连接则交给托管机构负责,因此,托管机构会根据受管服务器的高度来收取费用,1U的服务器在托管时收取的费用比2U的要便宜很多,这就是为什么这种结构的服务器现在会广泛应用于互联网事业。

还有一点要说的是机架式服务器因为空间比塔式服务器大大缩小,所以这类服务器在扩展性和散热问题上受到一定的限制,配件也要经过一定的筛选,一般都无法实现太完整的设备扩张,所以单机性能就比较有限,应用范围也比较有限,只能专注于某一方面的应用,如远程存储和Web服务的提供等,但由于很多配件不能采用塔式服务器的那种普通型号,而自身又有空间小的优势,所以机架式服务器一般会比同等配置的塔式服务器贵上20-30%。至于空间小而带来的扩展性问题,也不是完全没有办法解决,由于采用机柜安装的方式,因此多添加一个主机在机柜上是件很容易的事,然后再通过服务器群集技术就可以实现处理能力的增强,如果是采用外接扩展柜的方式也能实现大规模扩展,不过由于机架式服务器单机的性能有限,所以扩展之后也是单方面的能力得到增倍,所以这类服务器只是在某一种应用种比较出色,大家就把它划为功能服务器,这种服务器针对性较强,一般无法移做它用。

什么是刀片服务器?

对于企业和网络信息提供商来说,无限增长的数据必须集中存储和处理,于是未来的网络发展呈现出集中计算的趋势。集中管理模式与现有的分散管理模式,对服务器提出了新的要求:节约空间、便于集中管理、易于扩展和提供不间断的服务,成为对下一代服务器的新要求。

作为网络重要组成部分的服务器来说,性能已不仅仅是评价服务器的唯一指标了,用户更关心的是符合自己实际需要的产品。目前服务器集群已经在市场上得以广泛应用,而新一代机架式服务器也开始进入市场,为用户提供了更多的选择。但是随着网络向更深层面发展,下一代服务器将会是BladeServer(刀片服务器)。

刀片服务器是一种HAHD(HighAvailabilityHighDensity,高可用高密度)的低成本服务器平台,是专门为特殊应用行业和高密度计算机环境设计的。其中每一块"刀片"实际上就是一块系统主板。它们可以通过本地硬盘启动自己的操作系统,如WindowsNT/2000、Linux、Solaris等等,类似于一个个独立的服务器。在这种模式下,每一个主板运行自己的系统,服务于指定的不同用户群,相互之间没有关联。不过可以用系统软件将这些主板集合成一个服务器集群。在集群模式下,所有的主板可以连接起来提供高速的网络环境,可以共享资源,为相同的用户群服务。在集群中插入新的"刀片",就可以提高整体性能。而由于每块"刀片"都是热插拔的,所以,系统可以轻松地进行替换,并且将维护时间减少到最小。值得一提的是,系统配置可以通过一套智能KVM和9个或10个带硬盘的CPU板来实现。CPU可以配置成为不同的子系统。一个机架中的服务器可以通过新型的智能KVM转换板共享一套光驱、软驱、键盘、显示器和鼠标,以访问多台服务器,从而便于进行升级、维护和访问服务器上的文件。

克服服务器集群的缺点

作为一种实现负载均衡的技术,服务器集群可以有效地提高服务的稳定性和/或核心网络服务的性能,还可以提供冗余和容错功能。理论上,服务器集群可以扩展到无限数量的服务器。无疑,服务器集群和RAID镜像技术的诞生为计算机和数据池的Internet应用提供了一个新的解决方案,其成本远远低于传统的高端专用服务器。

但是,服务器集群的集成能力低,管理这样的集群使很多IDC都非常头疼。尤其是集群扩展的需求越来越大,维护这些服务器的工作量简直不可想像,包括服务器之间的内部连接和摆放空间的要求。这些物理因素都限制了集群的扩展。“高密度服务器”--BladeServer的出现适时地解决了这样的问题。高密度服务器内置了监视器和管理工具软件,可以几十个甚至上百个地堆放在一起。配置一台高密度服务器就可以解决一台到一百台服务器的管理问题。如果需要增加或者删除集群中的服务器,只要插入或拔出一个CPU板即可。就这个意义上来说,BladeServer从根本上克服了服务器集群的缺点。

模块化结构的思想是一个很久的概念,但也正是成熟的思想造就了Nginx的巨大优越性。

我们知道Nginx从总体上来讲是有许多个模块构成的。习惯将Nginx分为5大模块分别为:核心模块,标准HTTP模块,可选HTTP模块,邮件服务模块和第三方模块。

这5个模块由上到下重要性一次递减。

(1)核心模块;

核心模块是Nginx服务器正常运行必不可少的模块,如同操作系统的内核。它提供了Nginx最基本的核心服务。像进程管理、权限控制、错误日志记录等;

(2)标准HTTP模块;

标准HTTP模块支持标准的HTTP的功能;

(3)可选HTTP模块;

可选HTTP模块主要用于扩展标准的HTTP功能,让Nginx能处理一些特殊的服务;

(4)邮件服务模块;

邮件服务模块主要用于支持Nginx的邮件服务;

(5)第三方模块;

第三方模块是为了扩展Nginx服务器应用,完成开发者想要的功能;

*******Nginx中的模块命名有自己的习惯*********

一般以Ngx_作为前缀,——module作为后缀,中间使用一个或者多个英文单词描述模块的工能,例如Ngx_core_module表示该模块提供Nginx的核心功能等;

具体各个模块中包含哪些模块可以自己去源码中查询,这里略过;

从架构设计上说,Nginx服务器是与众不同的。其一在于它的模块化设计;其二也是更重要的一点在于它对与客户端请求的处理机制上;

web服务器和客户端是一对多的关系,Web服务器必须有能力同时为多个客户端提供服务。一般来说完成并行处理请求工作有三种方式:

1.多进程方式;

2.多线程方式;

3.异步方式;

这里简单说明一下这三种方式:

(1)多进程方式

多进程方式指,服务器每当收到一个客户端时。就有服务器主进程生成一个子进程出来和客户端建立连接进行交互。指导连接断开。该子进程就结束了。

多进程方式的优点是设计简单,各个子进程相对独立,处理客户端请求时彼此不受干扰;缺点是操作系统生成一个子进程需要进行内存复制等操作,在资源和时间上会产生一定的开销;当有大量请求时,会导致系统性能下降;

(2)多线程方式

多线程方式指每当服务器接收到一个请求后,会由服务器主进程派生出一个线程出来和客户端进行交互。由于操作系统产生出一个线程的开销远远小于一个进程的开销。故多线程方式在很大程度上减轻了Web服务器对系统资源的要求。但同时由于多个线程位于一个进程内,可以访问同样的内存空间。所以需要开发者自己对内存进程管理,增大了难度。

(3)异步方式

异步方式适合多进程和多线程完全不同的一种处理客户端请求的方式。这里有几个概念我们需要熟悉一下: 同步,异步,阻塞,非阻塞

在网络通信中同步和异步是描述通信模式的概念。

同步:发送方发送完请求后,需要等待接收到接收方发回的响应,才能发送下一个请求;所有请求在服务端得到同步,发送方和接收方的步调是一致的;

异步 :和同步机制相反,在异步机制中,发送方发出一个请求后,不等接收方响应这个请求,就继续发送下一个请求;所有来自发送方的请求形成一个队列,接收方处理完成后通知发送方;

在进程处理调度方式上用阻塞与非阻塞。在网络通信中主要指套接字socket的阻塞和非阻塞,而socket的实质就是IO操作。

阻塞 :调用结果返回之前,当前线程从运行状态被挂起,一直等到调用结果返回之后,才进入就绪状态,获取CPU后继续执行。

非阻塞 :和阻塞方式正好相反,如果调用结果不能马上返回,当前线程也不会马上返回,而是立即返回执行下一个调用。

因此就衍生出4中方式:同步阻塞,同步非阻塞,异步阻塞,异步非阻塞

这里简单解释一下异步非阻塞:发送方向接收方发送请求后,不用等待响应,可以继续其他工作;接收方处理请求时进行的IO操作如果不能马上得到结果,也不必等待,而是马上返回去去做其他事情。当IO操作完成以后,将完成状态和结果通知接收方,接收方再响应发送方。

与此同时Nginx服务器处理请求是怎样的呢???

Nginx服务器的一个显著的优势就是能够同时处理大量的并发请求。它结合多进程机制和异步机制。异步机制使用的是异步非阻塞方式。(Master-Worker)。

每个工作进程使用异步非阻塞方式,可以处理多个客户端请求。当某个工作进程接收到客户端的请求以后,调用IO进行处理,如果不能立即得到结果,就去处理其他的请求;而客户端在此期间也无需等待响应,可以去处理其他事情;当IO返回时,就会通知此工作进程;该进程得到通知,暂时挂起当前处理的失误去响应客户端请求。

也就是:

Nginx采用异步非阻塞方式来处理请求,处理请求具体到系统底层就是读写事件(所谓阻塞调用方式即请求事件还没准备好,线程只能一直去等,等事件准备好了再处理;而非阻塞即事件没准备好,马上返回ENGAIN,告诉你事件还没准准备好,而在这期间可以先去做其他事,再回头看看事件准备好了吗,时不时会看,需要的开销也是不小的)

异步可以理解为循环处理多个准备好的事件,不会导致无谓的资源浪费,当有更多的并发数只会占用更多的内存而已

从上面我们可以知道,Nginx服务器的工作进程调用IO后,就取进行其他工作了;当IO调用返回后,会通知工作进程。 但IO调用时如何把自己的状态通知给工作进程的呢??

一般解决这个问题有两种方法:

(1)让工作进程在进行其他工作的过程中间隔一段时间就去检查一下IO的状态,如果完成就响应客户端,如果未完成,继续工作。

(2)IO调用在完成后能主动通知工作进程。

当然最好的就是用第二种方法了;像select/poll/epoll等这样的系统调用就是用来支持第二种解决方案的。这些系统调用也常被称为事件驱动模型。他们提供了一种机制就只让进程同时处理多个并发请求,不用关心IO调用的具体状态。IO调用完全由事件驱动模型来管理。

Nginx中的事件驱动模型

就是用事件驱动处理库(多路IO复用),最常用的就是select模型,poll模型,epoll模型。

关于这三个模型的详解在这里可以看到:https://segmentfault.com/a/1190000003063859

通过这个上面的简单讲解,再加上服务器的架构的了解,可以对Nginx有一个简单的了解,希望对之后的源码剖析有帮助。

大致上Nginx的架构就是这样:

1.Nginx启动后,会产生一个主进程,主进程执行一系列的工作后会产生一个或者多个工作进程;

2.在客户端请求动态站点的过程中,Nginx服务器还涉及和后端服务器的通信。Nginx将接收到的Web请求通过代理转发到后端服务器,由后端服务器进行数据处理和组织;

3.Nginx为了提高对请求的响应效率,降低网络压力,采用了缓存机制,将 历史 应答数据缓存到本地。保障对缓存文件的快速访问;

##工作进程##

工作进程的主要工作有以下几项:

接收客户端请求;

将请求一次送入各个功能模块进行过滤处理;

IO调用,获取响应数据;

与后端服务器通信,接收后端服务器处理结果;

数据缓存

响应客户端请求;

##进程交互##

Nginx服务器在使用Master-Worker模型时,会涉及到主进程和工作进程的交互和工作进程之间的交互。这两类交互都依赖于管道机制。

1.Master-Worker交互

这条管道与普通的管道不同,它是由主进程指向工作进程的单向管道,包含主进程向工作进程发出的指令,工作进程ID等;同时主进程与外界通过信号通信;

2.worker-worker交互

这种交互是和Master-Worker交互是基本一致的。但是会通过主进程。工作进程之间是相互隔离的,所以当工作进程W1需要向工作进程W2发指令时,首先找到W2的进程ID,然后将正确的指令写入指向W2的通道。W2收到信号采取相应的措施。

1、c/s、b/s是当下两种服务器架构模型。

2、c/s架构是指客户端/服务器的架构,需要同时编写两套代码,即客户端一套,服务端一套,所以开发起来速度较慢,日后的维护工作量也较大。

3、b/s架构是指浏览器/服务器构架,只需要编写服务器端的代码即可,开发完成了,就可以将应用部署到一些中间服务器上来发布自己的运用,拿web应该用来说,这些服务器有IIS、jboss、weblogic、websphere、tomcat等等。

4、客户端与服务器交互时,服务器会根据客户端的不同请求进行相应的业务处理,之后将结果返回对客户端。

以上只是简单的描述了下c/s、b/s架构,更详细说明楼主可以网上找些相关资料了解。

有问题欢迎提问,满意请采纳!


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/123311.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-14
下一篇2023-03-14

发表评论

登录后才能评论

评论列表(0条)

    保存