一种电子邮件处理方法_2

文档序号:8499902阅读:来源:国知局
完成对应请求,之后将请求所对应的响应沿着相反的方向传送给应用请求。至此,一个邮件系统的操作便完成。
[0023]为了给上层应用提供平稳的服务并避免由于远程的高时延和低带宽对服务性能带来的影响,将缓存设置于客户端,用于缓存服务器邮件的配置数据信息和数据内容信息。对上层应用来说,通过缓存访问服务器端数据就像访问客户端数据一样。
[0024]本发明提出的缓存策略支持对服务器端对象的配置数据以及数据进行缓存。而数据则分为两部分:与邮件对象对应的文件数据以及与目录对象对应的目录数据。在实际的应用中,配置数据的数据量比较少且空间占用相对固定;目录数据的数据量在基于目录的应用中将会比较大;文件数据的量与前两类数据相比一般会比较大。针对上述3种数据的不同特点,对3种数据采取不同的缓存方式。
[0025]配置数据采用RAM缓存和数据库永久存储缓存相结合的方案,RAM缓存为配置数据提供高效的访问。将系统正在引用的配置数据缓存在RAM中,并且在RAM中维护配置数据的引用计数,当引用计数变为O时,就将配置数据从RAM中替换出去,并永久存储到数据库中。
[0026]对目录数据的存储采用数据库进行永久存储,以利用数据库的查询性能提高目录数据的读取效率。
[0027]文件数据使用已有的邮件系统进行存储,由此提供大容量的数据缓存。为提升应用性能,降低缓存空间对邮件系统的占用并提供更高的灵活性,支持文件片段的数据缓存方式,其偏移量信息作为配置数据的一部分进行缓存,而偏移量所对应的实际数据内容则缓存在邮件系统中。
[0028]增加缓存后的邮件系统,上述应用请求的处理流程也发生了相应的变化。应用请求在到达内核模块后将被转换为配置数据请求或者数据内容请求。而将这些请求与缓存联系起来的重要数据结构就是节点,该节点与文件/目录是一一对应关系,其包括所访问对象的配置数据以及数据内容信息,一旦获得节点就能访问相应对象的配置数据和文件数据。以下对节点的主要成员作出相应的说明。
[0029]id:用于标识节点,全局唯一的id值,由服务器端产生并维护
[0030]attr:表示节点的属性信息
[0031]cachetime:用于记录更新配置数据的系统时间
[0032]Iru:用于缓存容量管理中节点缓存数据的回收,系统中所有被操作过的节点都会以LRU的方式组织成一条LRU链表,尾部的节点代表最久未被访问的对象
[0033]extent:用于标识节点在缓存中缓存数据对应的数据片段,在读/写过程中将对应的片段信息链接到该extent链表上
[0034]flush:用于表明该节点上的脏数据片段,在写过程中将写片段链接到该flush链表上,在刷新过程中访问该链表获取片段信息,并将对应的脏数据写回到服务器端
[0035]cache_size:表示该节点的缓存数据大小
[0036]data_state:代表该节点的缓存数据状态
[0037]文件数据的缓存存在3种状态:清洁状态、脏状态以及锁定状态。清洁表明缓存数据与服务器端的源数据完全一致;脏表明客户端对缓存文件发生过写操作而没有将脏数据刷新到服务器端;锁定表明客户端正在将脏数据刷新到服务器端。数据节点被创建时,节点处于清洁状态,此时对该节点执行读操作不会改变节点的状态,但对该节点执行写操作会使节点处于脏状态。当节点处于脏状态时,对该节点的读/写操作均不会修改节点的状态,但对该节点执行刷新操作时,则会使节点处于锁定状态。当节点处于锁定状态时,表明此时正在执行刷新操作,过程中对该节点执行读操作将不会修改节点的状态,当刷新操作完成后并且在数据刷新期间没有被修改,则节点会变为清洁状态,否则节点会再次进入脏状态。上述过程中的刷新操作是指将客户端对数据的修改同步到服务器端的过程。
[0038]在邮件系统操作过程中,对配置数据有效性的判定采取超期策略,并且不需要服务器端参与缓存管理。在系统初始时设置配置数据的超期时间,在每次从服务器端获得配置数据信息时,记录当时的系统时间。当访问配置数据时,通过系统当前时间与从服务器端获得配置数据时记录的系统时间进行比较,如果两者的差值小于设定的超期时间,则认为配置数据有效,可直接从缓存中获取配置数据;否则认为配置数据失效,此时访问配置数据就需要重新从服务器端获得。
[0039]在web环境下,在首次访问服务器的数据时将数据缓存在客户端,如果在后续的过程中远程上的数据不发生改变,那就可以继续访问客户端的数据,以此来减少远程上的带宽消耗,并能够在网络不稳定或者发生故障时向上层应用提供平稳的服务。采取如下方式确定客户端缓存中数据内容的有效性:
[0040]如果其配置数据有效,则认为其缓存中的数据有效;如果其配置数据失效,待重新远程获得配置数据后,通过比较缓存中已失效配置数据的修改时间与新获得配置数据的修改时间是否相同进行判定,如果相同则认为缓存中数据内容有效;否则认为缓存中的数据已经失效,并将客户端缓存中的数据删除。
[0041]如果在客户端发生了写操作,那缓存的数据与服务器端的数据的一致性保证为最终一致性。在客户端的写过程直接将数据写到客户端本地缓存中,并将写片段的状态标记为脏,便可向上层应用返回写操作成功,这么做的好处是降低了高延迟低带宽所带来的性能损耗。也就是说在最终的某个时刻点,缓存的数据信息会与服务器端的数据信息一致。只要将数据写到客户端缓存写操作就能够将客户端对同一片段的多次“小写”合并成一次“大写”,这样能充分减少客户端与服务器端在远程上的交互次数,降低了高延迟带来的性能损耗,从而提高了写效率。这样的实现方式适用于远程上高并发流式文件写入的应用
[0042]为提高系统资源利用率,该缓存策略提供对缓存空间的阈值管理功能,在系统初始时设定缓存空间的上限阈值和下限阈值,并设计清理线程,该线程默认处于休眠状态,在系统运行过程中一旦检测到缓存容量达到设定的上限阈值,清理线程就被唤醒,释放已占用的缓存空间以保证缓存空间在设定的阈值范围内。
[0043]从服务器端读取数据或客户端执行写操作均将数据写入缓存,此时如果检测到已占用的缓存空间达到上限阈值,则会唤醒清理线程。该线程首先删除被替换到数据库中的对象所占用的数据缓存,如果此时剩余缓存空间达到下限阈值,则线程转入休眠状态;否则继续根据对象的访问时间,删除那些驻留在RAM中的对象对应的数据缓存,直到剩余缓存空间达到下限阈值,然后线程转入休眠状态。为加快删除缓存数据过程中邮件查找速度,替换到数据库中的对象按照访问时间从小到大排序,在RAM中对象则根据访问时间进行LRU排序。在删除缓存数据过程中,若存在脏数据,则需要先将对应的脏数据刷新到服务器端,再释放对应的缓存空间。
[0044]配置数据访问流程包括:客户端接收到应用程序的配置数据访问请求后,首先判断对应的配置数据在缓存中是否存在:1)若存在则判定其缓存的属性信息是否有效,判断的原则是:上次从服务器端获得配置数据所记录的系统时间与当前的系统时间之间的差值是否小于系统初始时设定的超期时间,若小于则说明缓存的配置数据有效,可直接使用缓存中的配置数据向上层应用请求返回;否则
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1