导航:首页 > IDC知识 > 互联网服务器架构

互联网服务器架构

发布时间:2020-12-09 18:35:39

1、大的互联网公司比如百度或者京东,他们的服务器架构性能参数外部人员能知道么?

现在都是云系列产品(几百万台级别)把资源共享到资源池,然后在合理的分配给不同内的应用,比如这款数容据中心服务器,如果有1W台,那么它的资源是累加的,也可以是其他配置的,都是累加(处理器,内存,硬盘,网络等)
产品型号:ZI2W6S8-8388HV
产品类型:双路十二核机架式服务器
处 理 器:Xeon Bronze
3204
内 存:8G DDR4 REG ECC
硬 盘:HD SAS
600G
网 卡:双千兆
管 理:硬件监控、远程管理
机 构:2U机架式
电 源:500W
操作系统:Linux免费版
/ VMware ESXi
服 务:全国联保 叁年质保

2、怎么在一台服务器上架构多个网站

三种办法:

一、互联网上最常用的方法:虚拟主机,一般用APACHE实现专,只属按一份软件,只运行一次,只需要配置多个域名指向本机IP地址。APACHE能自动根据访问者在IE输入地址的域名,分别调用不同目录下的文件进行反馈。这是最合理、最正宗的解决办法。

二、如果你的网站在没有域名服务的内部网络上运行,可以用多个IP配合APACHE来实现虚拟主机。方法同上。

三、你可以在不同的端口上启动多个WEB服务器,他们可以是同一套软件,也可以是不同的软件,比如你可以启动两个APACHE,或者一个APACHE、一个IIS、甚至再加一个RESION,但是他们侦听的端口不能相同,一般默认是80,你需要修改。访问的时候通过http://localhost:81/这样的地址访问。

3、互联网服务器架构设计包括那些内容??

1 服务器购买和操作系统选择
2 服务器托管,分IP 电信/网通 带宽 高度
3 服务器软件 例如WEB服务 邮局服务 数据库 游戏服务等
4 服务器安全配置
5 服务器日常维护

4、几种经典的网络服务器架构模型的分析与比较

前言
事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用;事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接 数高吞吐量的服务器程序中,如 http 服务器程序、ftp 服务器程序等。相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率。
关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,本文将不拘泥于源代码的陈列与分析,而侧重模型的介绍和比较。使用 libev 事件驱动库的服务器模型将给出实现代码。
本文涉及到线程 / 时间图例,只为表明线程在各个 IO 上确实存在阻塞时延,但并不保证时延比例的正确性和 IO 执行先后的正确性;另外,本文所提及到的接口也只是笔者熟悉的 Unix/Linux 接口,并未推荐 Windows 接口,读者可以自行查阅对应的 Windows 接口。
阻塞型的网络编程接口
几乎所有的程序员第一次接触到的网络编程都是从 listen()、send()、recv()等接口开始的。使用这些接口可以很方便的构建服务器 /客户机的模型。
我们假设希望建立一个简单的服务器程序,实现向单个客户机提供类似于“一问一答”的内容服务。
图 1. 简单的一问一答的服务器 /客户机模型

我们注意到,大部分的 socket接口都是阻塞型的。所谓阻塞型接口是指系统调用(一般是 IO接口)不返回调用结果并让当前线程一直阻塞,只有当该系统调用获得结果或者超时出错时才返回。
实际上,除非特别指定,几乎所有的 IO接口 (包括 socket 接口 )都是阻塞型的。这给网络编程带来了一个很 大的问题,如在调用 send()的同时,线程将被阻塞,在此期间,线程将无法执行任何运算或响应任何的网络请求。这给多客户机、多业务逻辑的网络编程带 来了挑战。这时,很多程序员可能会选择多线程的方式来解决这个问题。
多线程服务器程序
应对多客户机的网络应用,最简单的解决方式是在服务器端使用多线程(或多进程)。多线程(或多进程)的目的是让每个连接都拥有独立的线程(或进程),这样任何一个连接的阻塞都不会影响其他的连接。
具体使用多进程还是多线程,并没有一个特定的模式。传统意义上,进程的开销要远远大于线程,所以,如果需要同时为较多的客户机提供服务,则不推荐使 用多进程;如果单个服务执行体需要消耗较多的 CPU 资源,譬如需要进行大规模或长时间的数据运算或文件访问,则进程较为安全。通常,使用 pthread_create () 创建新线程,fork() 创建新进程。
我们假设对上述的服务器 / 客户机模型,提出更高的要求,即让服务器同时为多个客户机提供一问一答的服务。于是有了如下的模型。
图 2. 多线程服务器模型

在上述的线程 / 时间图例中,主线程持续等待客户端的连接请求,如果有连接,则创建新线程,并在新线程中提供为前例同样的问答服务。
很多初学者可能不明白为何一个 socket 可以 accept 多次。实际上,socket 的设计者可能特意为多客户机的情况留下了伏笔,让 accept() 能够返回一个新的 socket。下面是 accept 接口的原型:
?

1

intaccept(ints,structsockaddr *addr, socklen_t *addrlen);


输入参数 s 是从 socket(),bind() 和 listen() 中沿用下来的 socket 句柄值。执行完 bind() 和 listen() 后,操作系统已经开始在指定的端口处监听所有的连接请求,如果有请求,则将该连接请求加入请求队列。调用 accept() 接口正是从 socket s 的请求队列抽取第一个连接信息,创建一个与 s 同类的新的 socket 返回句柄。新的 socket 句柄即是后续 read() 和 recv() 的输入参数。如果请求队列当前没有请求,则 accept() 将进入阻塞状态直到有请求进入队列。
上述多线程的服务器模型似乎完美的解决了为多个客户机提供问答服务的要求,但其实并不尽然。如果要同时响应成百上千路的连接请求,则无论多线程还是多进程都会严重占据系统资源,降低系统对外界响应效率,而线程与进程本身也更容易进入假死状态。
很多程序员可能会考虑使用“线程池”或“连接池”。“线程池”旨在减少创建 和销毁线程的频率,其维持一定合理数量的线程,并让空闲的线程重新承担新的执行任务。“连接池”维持连接的缓存池,尽量重用已有的连接、减少创建和关闭连 接的频率。这两种技术都可以很好的降低系统开销,都被广泛应用很多大型系统,如 websphere、tomcat 和各种数据库等。
但是,“线程池”和“连接池”技术也只是在一定程度上缓解了频繁调用 IO 接口带来的资源占用。而且,所谓“池”始终有其上限,当请求大大超过上限时,“池”构成的系统对外界的响应并不比没有池的时候效果好多少。所以使用“池” 必须考虑其面临的响应规模,并根据响应规模调整“池”的大小。
对应上例中的所面临的可能同时出现的上千甚至上万次的客户端请求,“线程池”或“连接池”或许可以缓解部分压力,但是不能解决所有问题。
总之,多线程模型可以方便高效的解决小规模的服务请求,但面对大规模的服务请求,多线程模型并不是最佳方案。下一章我们将讨论用非阻塞接口来尝试解决这个问题。
使用select()接口的基于事件驱动的服务器模型
大部分 Unix/Linux 都支持 select 函数,该函数用于探测多个文件句柄的状态变化。下面给出 select 接口的原型:
?

1
2
3
4
5
6

FD_ZERO(intfd, fd_set* fds)
FD_SET(intfd, fd_set* fds)
FD_ISSET(intfd, fd_set* fds)
FD_CLR(intfd, fd_set* fds)
intselect(intnfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
structtimeval *timeout)


这里,fd_set 类型可以简单的理解为按 bit 位标记句柄的队列,例如要在某 fd_set 中标记一个值为 16 的句柄,则该 fd_set 的第 16 个 bit 位被标记为 1。具体的置位、验证可使用 FD_SET、FD_ISSET 等宏实现。在 select() 函数中,readfds、writefds 和 exceptfds 同时作为输入参数和输出参数。如果输入的 readfds 标记了 16 号句柄,则 select() 将检测 16 号句柄是否可读。在 select() 返回后,可以通过检查 readfds 有否标记 16 号句柄,来判断该“可读”事件是否发生。另外,用户可以设置 timeout 时间。
下面将重新模拟上例中从多个客户端接收数据的模型。
图4.使用select()的接收数据模型

上述模型只是描述了使用 select() 接口同时从多个客户端接收数据的过程;由于 select() 接口可以同时对多个句柄进行读状态、写状态和错误状态的探测,所以可以很容易构建为多个客户端提供独立问答服务的服务器系统。
图5.使用select()接口的基于事件驱动的服务器模型

这里需要指出的是,客户端的一个 connect() 操作,将在服务器端激发一个“可读事件”,所以 select() 也能探测来自客户端的 connect() 行为。
上述模型中,最关键的地方是如何动态维护 select() 的三个参数 readfds、writefds 和 exceptfds。作为输入参数,readfds 应该标记所有的需要探测的“可读事件”的句柄,其中永远包括那个探测 connect() 的那个“母”句柄;同时,writefds 和 exceptfds 应该标记所有需要探测的“可写事件”和“错误事件”的句柄 ( 使用 FD_SET() 标记 )。
作为输出参数,readfds、writefds 和 exceptfds 中的保存了 select() 捕捉到的所有事件的句柄值。程序员需要检查的所有的标记位 ( 使用 FD_ISSET() 检查 ),以确定到底哪些句柄发生了事件。
上述模型主要模拟的是“一问一答”的服务流程,所以,如果 select() 发现某句柄捕捉到了“可读事件”,服务器程序应及时做 recv() 操作,并根据接收到的数据准备好待发送数据,并将对应的句柄值加入 writefds,准备下一次的“可写事件”的 select() 探测。同样,如果 select() 发现某句柄捕捉到“可写事件”,则程序应及时做 send() 操作,并准备好下一次的“可读事件”探测准备。下图描述的是上述模型中的一个执行周期。
图6. 一个执行周期

这种模型的特征在于每一个执行周期都会探测一次或一组事件,一个特定的事件会触发某个特定的响应。我们可以将这种模型归类为“事件驱动模型”。
相比其他模型,使用 select() 的事件驱动模型只用单线程(进程)执行,占用资源少,不消耗太多 CPU,同时能够为多客户端提供服务。如果试图建立一个简单的事件驱动的服务器程序,这个模型有一定的参考价值。
但这个模型依旧有着很多问题。
首先,select() 接口并不是实现“事件驱动”的最好选择。因为当需要探测的句柄值较大时,select() 接口本身需要消耗大量时间去轮询各个句柄。很多操作系统提供了更为高效的接口,如 linux 提供了 epoll,BSD 提供了 kqueue,Solaris 提供了 /dev/poll …。如果需要实现更高效的服务器程序,类似 epoll 这样的接口更被推荐。遗憾的是不同的操作系统特供的 epoll 接口有很大差异,所以使用类似于 epoll 的接口实现具有较好跨平台能力的服务器会比较困难。
其次,该模型将事件探测和事件响应夹杂在一起,一旦事件响应的执行体庞大,则对整个模型是灾难性的。如下例,庞大的执行体 1 的将直接导致响应事件 2 的执行体迟迟得不到执行,并在很大程度上降低了事件探测的及时性。
图7. 庞大的执行体对使用select()的事件驱动模型的影响

幸运的是,有很多高效的事件驱动库可以屏蔽上述的困难,常见的事件驱动库有 libevent 库,还有作为 libevent 替代者的 libev 库。这些库会根据操作系统的特点选择最合适的事件探测接口,并且加入了信号 (signal) 等技术以支持异步响应,这使得这些库成为构建事件驱动模型的不二选择。下章将介绍如何使用 libev 库替换 select 或 epoll 接口,实现高效稳定的服务器模型。
使用事件驱动库libev的服务器模型
Libev 是一种高性能事件循环 / 事件驱动库。作为 libevent 的替代作品,其第一个版本发布与 2007 年 11 月。Libev 的设计者声称 libev 拥有更快的速度,更小的体积,更多功能等优势,这些优势在很多测评中得到了证明。正因为其良好的性能,很多系统开始使用 libev 库。本章将介绍如何使用 Libev 实现提供问答服务的服务器。
(事实上,现存的事件循环 / 事件驱动库有很多,作者也无意推荐读者一定使用 libev 库,而只是为了说明事件驱动模型给网络服务器编程带来的便利和好处。大部分的事件驱动库都有着与 libev 库相类似的接口,只要明白大致的原理,即可灵活挑选合适的库。)
与前章的模型类似,libev 同样需要循环探测事件是否产生。Libev 的循环体用 ev_loop 结构来表达,并用 ev_loop( ) 来启动。
?

1

voidev_loop( ev_loop* loop,intflags )


Libev 支持八种事件类型,其中包括 IO 事件。一个 IO 事件用 ev_io 来表征,并用 ev_io_init() 函数来初始化:
?

1

voidev_io_init(ev_io *io, callback,intfd,intevents)


初始化内容包括回调函数 callback,被探测的句柄 fd 和需要探测的事件,EV_READ 表“可读事件”,EV_WRITE 表“可写事件”。
现在,用户需要做的仅仅是在合适的时候,将某些 ev_io 从 ev_loop 加入或剔除。一旦加入,下个循环即会检查 ev_io 所指定的事件有否发生;如果该事件被探测到,则 ev_loop 会自动执行 ev_io 的回调函数 callback();如果 ev_io 被注销,则不再检测对应事件。
无论某 ev_loop 启动与否,都可以对其添加或删除一个或多个 ev_io,添加删除的接口是 ev_io_start() 和 ev_io_stop()。
?

1
2

void ev_io_start( ev_loop *loop, ev_io* io )
void ev_io_stop( EV_A_* )


由此,我们可以容易得出如下的“一问一答”的服务器模型。由于没有考虑服务器端主动终止连接机制,所以各个连接可以维持任意时间,客户端可以自由选择退出时机。
图8. 使用libev库的服务器模型

上述模型可以接受任意多个连接,且为各个连接提供完全独立的问答服务。借助 libev 提供的事件循环 / 事件驱动接口,上述模型有机会具备其他模型不能提供的高效率、低资源占用、稳定性好和编写简单等特点。
由于传统的 web 服务器,ftp 服务器及其他网络应用程序都具有“一问一答”的通讯逻辑,所以上述使用 libev 库的“一问一答”模型对构建类似的服务器程序具有参考价值;另外,对于需要实现远程监视或远程遥控的应用程序,上述模型同样提供了一个可行的实现方案。
总结
本文围绕如何构建一个提供“一问一答”的服务器程序,先后讨论了用阻塞型的 socket 接口实现的模型,使用多线程的模型,使用 select() 接口的基于事件驱动的服务器模型,直到使用 libev 事件驱动库的服务器模型。文章对各种模型的优缺点都做了比较,从比较中得出结论,即使用“事件驱动模型”可以的实现更为高效稳定的服务器程序。文中描述的 多种模型可以为读者的网络编程提供参考价值。

5、云服务器的架构应该是什么样的呢

1、云主机内部硬件
云服务器的稳定性和内部硬件以及放置的机房环境都有不可分割的关系,首先云主机的品牌和型号、配置是最主要的因素,而云主机所处的环境又是其能不能发挥稳定的最重要的因素。
2、云主机结构
云主机的结构非常的复杂,对于操作的技术需求极高,升级过程显得非常的困难。不过对于入门级的处理器而言,采用这一手段进行升级就方便容易很多,且安装较为方便,无需太过考虑其他方面。云主机硬盘一般多为入门级,也就是说能满足日常运营的,当需求提升时,原始配置一定无法满足新需求。因此,如果条件允许,可以用高转速的硬盘。当然了,转速自然越大越好,只是在散热上需多做功夫。云服务器原理和电脑一样,云服务器的内存也是增加数据运行的基础,如果内存跟不上,数据处理速度一定不快。
因此,当出现处理缓慢的状况时,可以适当的采用增加内存的方式来加大处理器的高效运行。而且现阶段内存的价格降低,增加内存容量也很方便。
3、云主机接入环境
云主机的接入环境也是很重要的,云主机托管时选择共享带宽还是独享带宽,通常当占用资源小的时候,可以选择共享带宽,默认的带宽就足够用;而下载、视频、电影类的网站则对带宽的占用量比较大,一般情况下推荐用独享的带宽,具体可以根据网站每天的访问人数来决定。

6、网站服务器怎么个架构

你应该是说架设一个Web服务器吧,也就是能让别人浏览网站的服务器
这个还比较简单,如果说到更复杂的服务器那就有些麻烦了
首先你要去为你的网站申请一个域名,也就是网址,然后你要在你的电脑上装
一个IIS,Internet Information Sever 这样就可以控制好你的网站,再具体
点就说不清楚了,你可以问你身边的前辈们,不过你如果不会做网页那么架设
了服务器也没什么用。 这个是Web 服务器,浏览网站的。
如果你是说像网吧那样架设那就麻烦点,要用网络操作系统,像2000sever 2003 sever或者是linux之类的操作系统才可以了,上面有一个动态主机服务器可以假设(DHCP)里面非常复杂,建议你去买一本相关的书看,或者是让你身边的人做现场辅导才可以,我光说是说不清楚的。
如果你想学习这些建议你还是先打好网络基础,这个不是那么容易做的,你可以去买一本相关计算机网络的书籍看
如果你了解了DNS HTTP FTP这些是怎么回事的话那么你就可以再去学习架设服务器了,总体来说就是不太容易学就是了。

7、服务器架构是什么意思?

常见的服务器架构有以下三种:

服务器集群架构:
服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器。集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行。

服务器负载均衡架构:
负载均衡 (Load Balancing) 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

分布式服务器架构:
所谓分布式资源共享服务器就是指数据和程序可以不位于一个服务器上,而是分散到多个服务器,以网络上分散分布的地理信息数据及受其影响的数据库操作为研究对象的一种理论计算模型服务器形式。分布式有利于任务在整个计算机系统上进行分配与优化,克服了传统集中式系统会导致中心主机资源紧张与响应瓶颈的缺陷,解决了网络GIS 中存在的数据异构、数据共享、运算复杂等问题,是地理信息系统技术的一大进步。

这个三种架构都是常见的服务器架构,集群的主要是IT公司在做,可以保障重要数据安全;负载均衡主要是为了分担访问量,避免临时的网络堵塞,主要用于电子商务类型的网站;分布式服务器主要是解决跨区域,多个单个节点达到高速访问的目前,一般是类似CDN的用途的话,会采用分布式服务器。

8、文档服务器架构是什么

文档服务器是用于政府、企业等机构安全共享文档信息的整体解决方案,它依托书生 TESDI 数字权限管理技术、 SEP 数字文档技术,以集中管理的方式完整保存各单位日常产生的各类文档,提供最大程度的共享机制,使文档信息的价值得到最充分的利用,同时还能保证敏感文件不会被泄露 , 即使是对合法阅读者也能进行拷贝、打印等权限的管理和控制,从而彻底解决机构用户的信息数字化率和信息使用率偏低的问题。

书生文档服务器是一个文档集中存放,受限访问的平台。系统采用了书生 SEPReader 作为文档阅读的终端,采用 SEPWriter 作为文档转换的工具。 SEP Writer 将不同格式不同应用程序生成的文档转换成统一的 SEP 格式,再通过客户端将转换后的文件提交给给安全文档管理服务器( SDP Server ),保存到专门的安全文档数据库中。服务器统一控制每个文档针对每个操作人员的浏览、复制、打印、传播、摘录等权限,最大限度的保证电子文档安全,而且又不妨碍合法和正常的阅读以及操作。

书生文档服务器集成了多种主流的用户身份机制,包括 Windows 域和活动目录, Lotus 用户集成, LDAP 用户集成以及提供集成其他基于数据库的应用系统用户机制。可以和各种类型的应用系统无缝集成。系统提供 14 种不同粒度的访问权限,可以充分满足复杂的管理需要。

传统的文档管理系统不同的是,书生文档服务器真正防止了非受限的传播重要文档,比如传统的档案系统,虽然有多级的用户权限管理机制,但文档一旦被某个用户访问,用户就可以不受限的将该文档通过拷贝,邮寄等方式传播给他人。而此系统采用的文档的终生机制,文档无论何时被访问,除非管理员特别指定,文档都受管理系统的控制。可以称作是全程安全的文档管理系统。

文档服务器可以与书生 Office 配合进行使用,会具有最佳的使用效果。用户在用 Office 编辑定稿后轻松一键即可提交给文档服务器,便捷方便的操作最大程度地降低了使用者的负担,使文档集中共享的制度能得到最有效的贯彻执行。

9、几种经典的网络服务器架构模型的分析与比较

应对多客户机的网络应用,最简单的解决方式是在服务器端使用多线程(或多进程)。多线程(或多进程)的目的是让每个连接都拥有独立的线程(或进程),这样任何一个连接的阻塞都不会影响其他的连接。
具体使用多进程还是多线程,并没有一个特定的模式。传统意义上,进程的开销要远远大于线程,所以,如果需要同时为较多的客户机提供服务,则不推荐使用多进程;如果单个服务执行体需要消耗较多的 CPU 资源,譬如需要进行大规模或长时间的数据运算或文件访问,则进程较为安全。通常,使用 pthread_create () 创建新线程,fork() 创建新进程。

10、公司网络里架构WEB服务器,放在什么位置啊

服务器?--机房中的机柜里!

与互联网服务器架构相关的知识