访问服务器磁盘的方法、装置及系统的制作方法_2

文档序号:9750498阅读:来源:国知局
能够在终端需要请求服务器侧的数据内容时,首先使终端访问服务器内存,如果服务器内存中保存有该数据内容,则服务器将数据内容返回给终端;如果服务器内存中没有存储该数据内容,则终端访问服务器磁盘。在访问服务器磁盘前,终端首先要向服务器请求加锁,终端只有在加锁后才能访问服务器磁盘,否则等待服务器对其他终端解锁后再请求加锁。本发明实施例能够通过加锁程度限制访问服务器磁盘的终端数量,在同一时刻上仅允许一个终端访问服务器磁盘。与现有技术相比,无论访问服务器磁盘的终端数量有多少,在同一时刻上请求调用服务器磁盘I/O口的终端数量都不会超过一个,因此本发明实施例能够有效消除大量终端同时访问对服务器磁盘造成的冲击。
[0056]进一步的,本发明实施例还提供了一种访问服务器磁盘的方法,该方法应用于服务器侧。如图2所示,该方法包括:
[0057]201、接收终端发送的数据请求。
[0058]在与终端建立TCP连接后,服务器接收终端发送的数据请求,该数据请求中携带有终端需要请求的数据内容的内容标识,用于请求服务器侧的数据内容。服务器根据该内容标识查找终端需要的数据内容。
[0059]当有多个终端向服务器发送数据请求时,服务器按照接收数据请求的先后顺序对终端进行响应。当然,在一些实现方式中,服务器也可以按照终端的优先级高低决定响应顺序,或者按照终端打分高低决定响应顺序。打分是指终端侧给出的针对业务的打分,使用者可以根据自身的业务需求对数据请求进行打分,分数越高代表业务越紧急。终端在上报数据请求时将分数一同发送给服务器。
[0060]202、若服务器内存中保存有数据内容,则将服务器内存中的数据内容返回给终端。
[0061 ]服务器在接收到数据请求后,首先在内存中查找对应内容标识的数据内容,如果内存中缓存有该数据内容,则服务器对终端进行响应,将查找到的数据内容返回给终端。
[0062]当有多个终端请求数据内容时,服务器可以按照请求先后顺序或者优先级等顺序逐一响应各个终端,将缓存的数据内容发送给各个终端。也可以在存在并行处理条件时,同时对所有终端进行响应。
[0063]203、若服务器内存中没有保存数据内容,则启动加锁程序对终端进行加锁。
[0064]在本实施例的一种实现方式中,加锁程序为自旋锁程序。当多个终端请求数据内容,并且请求的数据内容没有缓存在服务器内存中时,服务器对某一个终端进行加锁,使其访问服务器磁盘,并且通过加锁机制使其他终端处于等待状态。对某个终端的选择方式可以是:
[0065]1、按照接收数据请求的先后顺序,对最先接收到的数据请求对应的终端进行加锁。
[0066]2、按照终端优先级从高到低的顺序,对优先级最高的终端进行加锁。
[0067]3、按照打分从高到低的顺序,对打分最高的终端进行加锁。
[0068]本实施例中,加锁程序在同一时刻上仅允许一个终端访问服务器磁盘。由此可以保证不会存在多个终端同时访问服务器磁盘的情况出现。
[0069]在加锁终端完成服务器磁盘的访问,获得数据内容后,服务器对该终端进行解锁,然后对下一个终端进行加锁,使下一个终端访问服务器磁盘。对下一个终端的选择可以按照上述1、2或3中给出的排序方式确定,本实施例对此不再赘述。
[0070]本发明实施例提供的访问服务器磁盘的方法,能够在终端需要请求服务器侧的数据内容时,首先使终端访问服务器内存,如果服务器内存中保存有该数据内容,则服务器将数据内容返回给终端;如果服务器内存中没有存储该数据内容,则终端访问服务器磁盘。在访问服务器磁盘前,终端首先要向服务器请求加锁,终端只有在加锁后才能访问服务器磁盘,否则等待服务器对其他终端解锁后再请求加锁。本发明实施例能够通过加锁程度限制访问服务器磁盘的终端数量,在同一时刻上仅允许一个终端访问服务器磁盘。与现有技术相比,无论访问服务器磁盘的终端数量有多少,在同一时刻上请求调用服务器磁盘I/O口的终端数量都不会超过一个,因此本发明实施例能够有效消除大量终端同时访问对服务器磁盘造成的冲击。
[0071]进一步的,作为图1或图2所示方法的细化,本发明实施例还提供了一种访问服务器磁盘的方法,该方法涉及终端及服务器两侧。如图3所示,该方法包括:
[0072 ] 301、终端访问服务器内存,读取数据内容。
[0073]302、若服务器内存中保存有数据内容,则服务器将服务器内存中的数据内容返回给终端。
[0074]303、若服务器内存没有保存数据内容,则终端向服务器请求加锁。
[0075]终端向服务器请求加锁时会面对两种情况,其一是服务器侧的加锁程序正在被其他终端占用,这种情况下执行步骤304;其二是服务器侧的加锁程序未被其他终端占用,这种情况下执行步骤305至步骤309。
[0076]304、若服务器已对其他终端加锁,则终端等待其他终端解锁后再次向服务器请求加锁。
[0077]当加锁程序被其他终端占用时,服务器不对终端的加锁请求进行响应,终端处于持续等待的状态,等待其他终端解锁后,并且轮到对该终端进行加锁时,执行步骤305至步骤309。
[0078]进一步的,实际应用中可能会遇到这样的问题:向服务器请求数据内容的终端数量较多,某个终端等待加锁的时间可能会很长,较长的等待时间无法被终端侧业务服务质量接收。因此在本实施例的一种改进方式中,如果在等待一段时间后如果仍没有成功加锁,那么终端可以放弃等待,由此防止TCP连接的长时间占用以及使用者的无限期等待。当然这种方式是以数据请求失败为代价实现的。具体的,服务器可以在终端请求加锁时,为终端启动一个计时器,记录终端从请求加锁起始到当前的等待时长。当等待时长超过预设的最大等待时长时(例如I分钟,或者30秒),服务器停止计时,向该终端发送一个取消等待的通知。终端接收到通知后不再等待加锁,向前端返回数据请求失败的消息。
[0079]或者,终端在请求加锁时启动一个计时器,记录终端从请求加锁起始到当前的等待时长。当等待时长超过预设的最大等待时长时还未接收到服务器的加锁响应,终端向服务器发送取消等待的通知,并向前端返回数据请求失败的消息。
[0080]305、若服务器未对其他终端加锁,服务器启动加锁程序对终端进行加锁。
[0081 ] 306、终端在加锁后访问服务器磁盘,读取数据内容。
[0082]307、在读取数据内容之后,终端通知服务器解锁,以便服务器对其他终端进行加锁。
[0083]308、服务器对终端进行解锁。
[0084]309、服务器对等待加锁的其他终端进行加锁。
[0085]本实施例中,当终端等待加锁的时间过长时,终端可以主动或被动的放弃等待加锁,由此防止TCP连接的长时间占用以及使用者的无限期等待。
[0086]进一步的,作为图1或图2所示方法的细化,本发明实施例还提供了一种访问服务器磁盘的方法,该方法涉及终端及服务器两侧。与图3所示方法不同的是,在该方法中,当首个访问服务器磁盘的终端读取到数据内容后,将该数据内容写入到服务器内存中。由此,其他终端就可以直接访问服务器内存获取数据内容,而无需请求或等待服务器加锁。如图4所示,该方法包括:
[0087 ] 401、终端访问服务器内存,读取数据内容。
[0088] 402、若服务器内存中保存有数据内容,则服务器将服务器内存中的数据内容返回给终端。
[0089 ] 403、若服务器内存没有保存数据内容,则终端向服务器请求加锁。
[0090]404、若服务器已对其他终端加锁,则终端再次访问服务器内存。
[0091]在图3所示方案中,若服务器已对其他终端加锁,则终端等待服务器对其他终端的解锁,然后加锁访问服务器磁盘。而在本实施例中,服务器会在首个请求数据内容的终端完成对服务器磁盘的访问后,将从磁盘中获取的数据内容缓存在服务器内存中。以便等待加锁的终端从服务器内存中直接获得该数据内容,而不用再对服务器磁盘进行访问,由此减少服务器磁盘的访问次数,进一步减少服务器磁盘的负荷压力。
[0092]具体的,当终端请求加锁而服务器的加锁程序被占用时,终端可以自行或根据服务器返回的通知再次访问服务器内存。如果在步骤401之后其他终端从服务器磁盘中获取了该数据内容,那么服务器会将该数据内容写入到服务器内存中。这时终端再次访问服务器内存就能够获取到新增的该数据内容。
[0093 ] 405、若服务器内存中新增有数据内容,则终端读取数据内容。
[0094]406、终端取消再次向服务器请求加锁。
[0095]在从服务器内存中获取到该数据内容后,终端无需再等待加锁访问服务器磁盘,因此终端取消再次向服务器请求加锁。
[0096]407、若服务器内存中仍没有保存数据内容,则终端再次向服务器请求加锁。
[0097]如果服务器内存中仍没有保存数据内容,则表示该终端是第一个请求该数据内容的终端。为获取到数据内容,终端必须向服务器请求加锁,以访问服务器磁盘。
[0098]408、若服务器未对其他终端加锁,服务器启动加锁程序对终端进行加锁。
[0099 ] 409、终端在加锁后访问服务器磁盘,读取数据内容。
[0100]410、在终端完成对服务器磁盘的访问后,服务器将从服务器磁盘中读取的数据内容写入到服务器内存中。
[0101]由此,当后续其他终端请求同一数据内容时,通过执行步骤401即可获取该数据内容,而无需执行步骤402至步骤410。
[0102]进一步的,作为对图1、图3及图4所示方法的实现,本发明实施例还提供了一种访问服务器磁盘的装置,该装置位于终端侧,或者独立于终端但是与终端建立有数据交互关系。如图5所示,该装置包括:读写单元51及请求单元52。其中,
[0103]读写单元51,用于访问服务器内存,读取数据内容;
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1