linux服务器与磁盘IO(一)关系框架

采用linux 制作服务器的时候,都要符合两个条件:

(1)能够处理更多客户端的请求。

如epoll服务器,这是事件驱动型服务器,当来了N个客户端的N个请求时,epoll接收请求,但本身并不进行处理,而是将请求外包给其他的一个或者多个服务器,其他服务器处理完后将数据发回给epoll,epoll再将数据发回给客户端。

(2)最大限度发挥硬件能力

现在的芯片都是多核的,而且由于CPU的处理速度比内存快得多,为了减少内存的读取次数,每一个内核中都带有一定的缓存空间。每一个核负责处理一个线程,将线程的数据存放在缓存空间中,当出现另外一个线程时,缓存空间中的数据就会被刷掉,因此建议一个内核自始至终负责同一个线程,即亲核。

而且线程一旦创建了,结束时就要进行销毁,一旦线程数量巨大,销毁将会占用很大资源,因此需要创建一个线程池(说白了就是创建一大堆线程),需要用到的时候就调出来用,不销毁。

一、

我们在淘宝登陆账号的时候,下一次登陆时该账号或连通密码就被记录下来,这些数据很明显是通过服务器被存储起来了,但却不是像我们平时一样被放在普通文件里面,而是被放在了数据库中,所谓数据库,就是在磁盘中高效存储和读取数据的一种方式,但是磁盘IO的速度有限,属于ms级别的,而且接口数量也同样有限,无法在极短时间内处理大量的请求,甚至很有可能及大部分请求无法被及时处理而丢失掉,因此在服务器和数据库中,增加了一个队列,让众多的请求在队列中排队等候处理。

服务器与数据库的通讯,是采用TCP协议,TCP的连接,是需要消耗180ms的时间,假如连接请求为N个,一个一个的来就会使得N个180ms时间就被消耗,占用时间资源太大,因此创建了一个连接池(说白了就是一大堆连接请求),一口气发送给数据库处理,就能减少连接时间。

二、

服务器的处理速度,仍然要比数据库的磁盘IO处理快很多,客户端发送给服务器的请求一旦多了,接着服务器再把这么多请求发给数据库,数据库也会有出现处理不过来的情况,因此根据需要,在服务器和数据库的队列之间增加一片内存,用来永久或暂时存放之前从数据库调用的一些必要参数,当需要的时候就去内存调取,不够的时候就再去数据库调取。

当一边处理快,一边处理慢的时候,一般都会考虑加缓存。

这样就会产生一个问题,如何保证内存中的数据跟数据库中存的数据是一致的呢,根据实际需要有两种方法:

(1)超时处理。

内存中的数据,系统只会存放一个固定的时间,一旦时间过了,将从数据库中提取新的数据。这种方法可能有一个毛病,就是在这个固定的时间内,数据库中的数据已经被更新了很多次。

(2)同时更新。在更新数据库数据的时候同时更新内存中数据。

三、

数据库既可以读,也可以写,读和写的占用时间是不一样的,当一万个人要读,一万个人要写的时候,总不能猫和狗混一起,为了提高效率,数据库就分成了读数据库和写数据库,同时这两种数据库还得支持数据同步更新。

当客户端数量急剧增大,到了服务器承受极限的时候,简单的方法就是增加服务器数量。

当然还可以在客户端和服务器之间增加监控服务器,将客户端的请求通过监控服务器作为中转站处理,再发给服务器。当然,监控服务器是有可能宕机的,所以还需要有备用监控服务器,一旦正机出问题,立马切换到备用机器上。

以上就是制作一个服务器和磁盘IO关系的大概关系框架了。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值