分布式高速缓存中维护数据的方法和系统
技术领域
本发明涉及一种方法,系统和程序,用于在分布式高速缓存中维护数据。
背景技术
因特网用户通常向中央因特网服务器请求数据。因特网信息供应商面对的一个挑战是这样一个目标,即当因特网传输和用户量以指数速率增加时,保持对用户请求返回信息的及时响应速率。针对为数量增加的用户提供服务的需求的一个解决方案是在不同位置维护数据拷贝,使得用户数据请求从在不同地理位置的镜像服务器得到服务,以服务于最接近该镜像服务器的用户。其它解决方案涉及维护数据拷贝的分布式高速缓存的使用,其中中央目录被维护以跟踪分布式高速缓存服务器上的数据。在组织中的不同点部署高速缓存服务器以服务于特定客户端用户组。中央目录提供映射以维护有关高速缓存服务器内对象的信息。
高速缓存和复制因特网服务性能(CRISP)项目已开发出因特网高速缓存服务,该服务使用被构造为通过映射服务共享其内容的自主代理服务器集合的分布式代理高速缓存。
从Ousterhout JK等人的“The Sprite Network Operating System,Computer,IEEE ComputerSociety,Long Beach CA,USA,US(01-02-1998),21(2),23-36了解到,通过每个维护关于每个文件的最后写入方的信息而使多个高速缓存维护写一致性,并且当不同于最终写入方的客户端打开文件时,使最终写入方把全部脏块回写到服务器的高速缓存。还从AndersOn T等人的“Serverles Network FileSystems”,ACM,“Computer Transactions on Computer Systems”,ACM,New York,USA(01-02-1996),14(1)了解到,针对高速缓存中的对象维护更新信息,其中不同高速缓存可以有对象的不同版本。还从Keleher P等人的“Lazy Release Consistency for Software SharedMemory”,COMPUTER ARCHITECTURE NEWS,1992-05-01,ACM,New York,USA了解到,如果更新信息指示目标数据被修改,则应用修改。
尽管当前使用分布式高速缓存来服务于客户端万维网访问要求,然而本领域持续需要为诸如因特网请求的客户端网络请求提供服务的其它改进技术。
发明内容
在第一方面,本发明提供在分布式高速缓存中维护数据的方法,包括:在至少一个高速缓存中维护对象的拷贝,其中多个高速缓存可具有该对象的不同版本,并且其中对象能够具有可修改数据单元;针对高速缓存中维护的每个对象,在每个高速缓存中维护更新信息,其中每个高速缓存中每个对象的更新信息指示该对象、包含该对象的高速缓存,并且指示该对象中的每个数据单元是否被修改;在接收对一个目标高速缓存中一个目标对象中的目标数据单元的修改之后,更新目标对象和目标高速缓存的更新信息以指示该目标数据单元被修改,其中在任何其他高速缓存中的目标对象的更新信息指示目标数据单元未被修改;其中所述高速缓存可以包含所述对象的不同版本,并且所述高速缓存可以把所述对象的过时版本发送到所述高速缓存的客户端。
该方法最好还在接收修改数据单元的请求之后执行:如果目标对象和目标高速缓存的更新信息指示目标数据单元被修改,则把接收的修改应用到目标高速缓存中目标对象中的数据单元。
该方法最好还在接收修改之后执行:如果目标对象和目标高速缓存的更新信息指示目标数据单元未被修改,则确定另一个高速缓存是否包含目标对象和最近的目标数据单元值;如果另一个高速缓存不包含最近的目标数据单元值,则把修改应用到目标高速缓存中目标对象中的数据单元;以及更新目标对象和目标高速缓存的更新信息以指示目标数据单元被修改,其中任何其他高速缓存中目标对象的更新信息指示数据单元未被修改。
该方法最好还在接收修改之后执行:如果目标对象和目标高速缓存的更新信息指示目标数据单元未被修改,则确定另一个高速缓存是否包含目标对象和最近的目标数据单元数值;以及如果另一个高速缓存包含最近的目标数据单元值,则从所确定高速缓存检索最近的目标数据单元值并且用所检索的最近的目标数据单元值更新目标高速缓存中的目标对象。
该方法最好还包括:在用最近的目标数据单元值更新目标高速缓存中的目标对象之后,把所接收的修改应用到目标高速缓存中目标对象中的数据单元;以及更新目标对象和目标高速缓存的更新信息以指示目标数据单元被修改,其中任何其他高速缓存中的目标对象的更新信息指示数据单元未被修改。
最好是,中央服务器执行确定另一个高速缓存是否包含目标对象和最近的目标数据单元值的步骤,以及从其它高速缓存检索最近的目标数据单元值的步骤,还包括:由中央服务器返回最近的目标数据单元值,其中在最近的目标数据单元值被提供给目标高速缓存之后,对目标数据单元的修改被应用于目标高速缓存,并且其中一个高速缓存服务器被连接到每个高速缓存,并且其中每个高速缓存服务器维护该高速缓存服务器连接到的至少一个高速缓存中的每个对象的更新信息,并且其中中央服务器维护每个高速缓存中的每个对象的更新信息。
该方法最好还包括:维护每个高速缓存中的每个对象的无效信息,其中一个高速缓存中的一个对象的无效信息指示该对象中的每个数据单元是有效还是无效;如果目标对象和目标高速缓存的无效信息指示目标数据单元无效,则根据更新信息确定包含目标对象的最近的目标数据单元值的高速缓存;从所确定的高速缓存检索最近的目标数据单元值并且用最近的目标数据单元值更新目标高速缓存中的目标对象;在用最近的目标数据单元值更新目标高速缓存中的目标对象之后,把所接收的修改应用到目标高速缓存中目标对象中的目标数据单元;更新目标对象和目标高速缓存的更新信息以指示目标数据单元被修改;更新包含目标对象的每个高速缓存的无效信息以指示目标数据单元无效;更新所确定的高速缓存中的目标对象的更新信息以指示数据单元未被修改。
最好是,中央服务器执行确定目标对象和目标高速缓存的无效信息是否指示目标数据单元无效的步骤,确定包含目标对象和最近的目标数据单元值的高速缓存的步骤,以及从所确定的高速缓存检索最近的目标数据单元值的步骤,还包括:通过中央服务器返回最近的目标数据单元值,其中在最近的目标数据单元值被提供给目标高速缓存中的目标对象之后,对目标数据单元的修改被应用于目标高速缓存。
最好是,一个高速缓存服务器被连接到每个高速缓存,并且其中每个高速缓存服务器维护该高速缓存服务器所连接到的至少一个高速缓存中的每个对象的更新信息,并且其中中央服务器维护每个高速缓存中的每个对象的更新信息和无效信息,还包括:由接收对目标数据单元的修改的目标高速缓存服务器确定目标对象和目标高速缓存的更新信息是否指示目标数据单元被修改;并且在确定目标对象和目标高速缓存的更新信息指示目标数据单元被修改之后,由目标高速缓存服务器更新目标高速缓存中的目标对象中的数据单元。
该方法最好还包括:由目标高速缓存服务器向中央服务器发送请求以修改目标数据单元;并且由中央服务器向目标高速缓存服务器返回消息以继续执行(i)在没有其它高速缓存具有最近的目标数据单元值的情况下,不包含最近的目标数据单元值的修改,或(2)在另一个高速缓存具有最近的目标数据单元值的情况下,包含最近的目标数据单元值的修改;并且在把所接收修改应用到目标数据单元值之前,由目标高速缓存服务器把所接收的最近的目标数据单元值提供给目标高速缓存中的目标页面。
在第二方面,本发明提供一种维护数据的系统,包括:多个高速缓存;用于在至少一个高速缓存中维护对象的拷贝的装置,其中高速缓存可具有对象的不同版本,并且其中对象能够具有可修改数据单元;用于针对在所述高速缓存中维护的每个对象,在高速缓存中维护更新信息的装置,其中每个高速缓存中每个对象的更新信息指示该对象、包含该对象的高速缓存,并且指示对象中的每个数据单元是否被修改;以及用于在接收对一个目标高速缓存中一个目标对象中的目标数据单元的修改之后,更新目标对象和目标高速缓存的更新信息以指示目标数据单元被修改的装置,其中在任何其他高速缓存中的目标对象的更新信息指示目标数据单元未被修改;其中所述高速缓存可以包含所述对象的不同版本,并且所述高速缓存可以把所述对象的过时版本发送到所述高速缓存的客户端。
该系统最好还包括用于在接收修改数据单元的请求之后,并且如果目标对象和目标高速缓存的更新信息指示目标数据单元被修改,则把所接收的修改应用到目标高速缓存中目标对象中的数据单元的装置。
该系统最好还包括用于在接收修改之后执行以下操作的装置:如果目标对象和目标高速缓存的更新信息指示目标数据单元未被修改,则确定另一个高速缓存是否包含目标对象和最近的目标数据单元值;如果另一个高速缓存不包含最近的目标数据单元值,则把修改应用到目标高速缓存中目标对象中的数据单元;以及更新目标对象和目标高速缓存的更新信息以指示目标数据单元被修改,其中任何其他高速缓存中目标对象的更新信息指示数据单元未被修改。
该系统最好还包括用于在接收修改之后执行以下操作的装置:如果目标对象和目标高速缓存的更新信息指示目标数据单元未被修改,则确定另一个高速缓存是否包含目标对象和最近的目标数据单元数值;以及如果另一个高速缓存包含最近的目标数据单元值,则从所确定高速缓存检索最近的目标数据单元值并且用所检索的最近的目标数据单元值更新目标高速缓存中的目标对象。
该系统最好还包括用于维护每个高速缓存中的每个对象的无效信息的装置,其中一个高速缓存中的一个对象的无效信息指示该对象中的每个数据单元是有效还是无效。
该系统最好还包括:如果目标对象和目标高速缓存的无效信息指示目标数据单元无效,用于根据更新信息确定包含目标对象的最近的目标数据单元值的高速缓存的装置;和从所确定的高速缓存检索最近的目标数据单元值并且用最近的目标数据单元值更新目标高速缓存中的目标对象的装置。
最好是,中央服务器实现用于确定目标对象和目标高速缓存的无效信息是否指示目标数据单元无效,确定包含目标对象和最近的目标数据单元值的高速缓存,以及从所确定的高速缓存检索最近的目标数据单元值的装置,还包括:用于通过中央服务器返回最近的目标数据单元值的装置,其中在最近的目标数据单元值被提供给目标高速缓存中的目标对象之后,对目标数据单元的修改被应用于目标高速缓存。
在第三方面,本发明提供一种计算机程序,包括计算机程序代码,其中当计算机程序代码载入计算机系统并且在其上执行时,导致所述计算机系统执行根据第一方面的方法的所有步骤。
最好是,本发明提供一种用于在分布式高速缓存中维护数据的产品,其中该产品导致操作被执行,所述操作包括:在至少一个高速缓存中维护对象的拷贝,其中多个高速缓存可具有该对象的不同版本,并且其中该对象能够具有可修改数据单元;维护每个高速缓存中维护的每个对象的更新信息,其中每个高速缓存中每个对象的更新信息指示该对象、包含该对象的高速缓存,并且指示对象中的每个数据单元是否被修改;以及在接收对一个目标高速缓存中一个目标对象中的目标数据单元的修改之后,更新该目标对象和目标高速缓存的更新信息以指示目标数据单元被修改,其中在任何其他高速缓存中该目标对象的更新信息指示目标数据单元未被修改。
在接收修改数据单元的请求之后,该产品可以进一步执行:如果目标对象和目标高速缓存的更新信息指示目标数据单元被修改,则把所接收的修改应用到目标高速缓存中目标对象中的数据单元。
在接收修改之后,该产品可进一步执行:如果目标对象和目标高速缓存的更新信息指示目标数据单元未被修改,则确定另一个高速缓存是否包含目标对象和最近的目标数据单元值;如果另一个高速缓存不包含最近的目标数据单元值,则把修改应用到目标高速缓存中目标对象中的数据单元;以及更新目标对象和目标高速缓存的更新信息以指示目标数据单元被修改,其中任何其他高速缓存中目标对象的更新信息指示数据单元未被修改。
在接收修改之后,该产品可进一步执行:如果目标对象和目标高速缓存的更新信息指示目标数据单元未被修改,则确定另一个高速缓存是否包含目标对象和最近的目标数据单元数值;以及如果另一个高速缓存包含最近的目标数据单元值,则从所确定高速缓存检索最近的目标数据单元值并且用所检索的最近的目标数据单元值更新目标高速缓存中的目标对象。
该产品可进一步执行:在用最近的目标数据单元值更新目标高速缓存中的目标对象之后,把所接收的修改应用到目标高速缓存中目标对象中的数据单元;以及更新目标对象和目标高速缓存的更新信息以指示目标数据单元被修改,其中任何其他高速缓存中的目标对象的更新信息指示数据单元未被修改。
该产品可以是这样一种产品,其中中央服务器执行确定另一个高速缓存是否包含目标对象和最近的目标数据单元值的步骤,以及从其它高速缓存检索最近的目标数据单元值的步骤,还包括:由中央服务器返回最近的目标数据单元值,其中在最近的目标数据单元值被提供给目标高速缓存之后,对目标数据单元的修改被应用于目标高速缓存。
该产品可以是这样一种产品,其中一个高速缓存服务器被连接到每个高速缓存,并且其中每个高速缓存服务器维护该高速缓存服务器连接到的至少一个高速缓存中的每个对象的更新信息,并且其中中央服务器维护每个高速缓存中的每个对象的更新信息。
该产品可以是这样一种产品,其还包括:维护每个高速缓存中的每个对象的无效信息,其中一个高速缓存中的一个对象的无效信息指示该对象中的每个数据单元是有效还是无效。
该产品可以是这样一种产品,其还包括:如果目标对象和目标高速缓存的无效信息指示目标数据单元无效,则根据更新信息确定包含目标对象的最近的目标数据单元值的高速缓存;从所确定的高速缓存检索最近的目标数据单元值并且用最近的目标数据单元值更新目标高速缓存中的目标对象。
该产品可以是这样一种产品,其还包括:在用最近的目标数据单元值更新目标高速缓存中的目标对象之后,把所接收的修改应用到目标高速缓存中目标对象中的目标数据单元;更新目标对象和目标高速缓存的更新信息以指示目标数据单元被修改;更新包含目标对象的每个高速缓存的无效信息以指示目标数据单元无效。
该产品可以是这样一种产品,其还包括:更新所确定的高速缓存中的目标对象的更新信息以指示数据单元未被修改。
该产品可以是这样一种产品,其中中央服务器执行确定目标对象和目标高速缓存的无效信息是否指示目标数据单元无效的步骤,确定包含目标对象和最近的目标数据单元值的高速缓存的步骤,以及从所确定的高速缓存检索最近的目标数据单元值的步骤,还包括:通过中央服务器返回最近的目标数据单元值,其中在最近的目标数据单元值被提供给目标高速缓存中的目标对象之后,对目标数据单元的修改被应用于目标高速缓存。
该产品可以是这样一种产品,其中一个高速缓存服务器被连接到每个高速缓存,并且其中每个高速缓存服务器维护该高速缓存服务器所连接到的至少一个高速缓存中的每个对象的更新信息,并且其中中央服务器维护每个高速缓存中的每个对象的更新信息和无效信息,还包括:由接收对目标数据单元的修改的目标高速缓存服务器确定目标对象和目标高速缓存的更新信息是否指示目标数据单元被修改;并且在确定目标对象和目标高速缓存的更新信息指示目标数据单元被修改之后,由目标高速缓存服务器更新目标高速缓存中的目标对象中的数据单元。
该产品可以是这样一种产品,其还包括:由目标高速缓存服务器向中央服务器发送请求以修改目标数据单元;并且由中央服务器向目标高速缓存服务器返回消息以继续执行(i)在没有其它高速缓存具有最近的目标数据单元值的情况下,不包含最近的目标数据单元值的修改,或(2)在另一个高速缓存具有最近的目标数据单元值的情况下,包含最近的目标数据单元值的修改;并且在把所接收修改应用到目标数据单元值之前,由目标高速缓存服务器把所接收的最近的目标数据单元值提供给目标高速缓存中的目标页面。
提供了在分布式高速缓存中维护数据的方法,系统和程序。在至少一个高速缓存中维护对象的拷贝,其中多个高速缓存可具有该对象的不同版本,并且其中该对象能够具有可修改数据单元。维护每个高速缓存中维护的每个对象的更新信息,其中每个高速缓存中每个对象的更新信息指示该对象、包含该对象的高速缓存,并且指示对象中的每个数据单元是否被修改。在接收对一个目标高速缓存中一个目标对象中的目标数据单元的修改之后,更新该目标对象和目标高速缓存的更新信息以指示目标数据单元被修改,其中在任何其他高速缓存中该目标对象的更新信息指示目标数据单元未被修改。
在其它实现中,在接收修改数据单元的请求之后,并且如果目标对象和目标高速缓存的更新信息指示目标数据单元被修改,则把所接收修改应用到目标高速缓存中的目标对象中的数据单元。
还有,在接收修改之后,并且如果目标对象和目标高速缓存的更新信息指示目标数据单元未被修改,则可以确定另一个高速缓存是否包含目标对象和最近的目标数据单元值。如果另一个高速缓存不包含最近的目标数据单元值,则修改被应用于目标高速缓存中的目标对象中的数据单元,并且目标对象和目标高速缓存的更新信息被更新以指示目标数据单元被修改,其中任何其他高速缓存中的目标对象的更新信息指示数据单元未被修改。
在其它实现中,在接收修改之后,并且如果目标对象和目标高速缓存的更新信息指示目标数据单元未被修改,则可以确定另一个高速缓存是否包含目标对象和最近的目标数据单元值。如果另一个高速缓存包含最近的目标数据单元值,则从所确定的高速缓存检索最近的目标数据单元值并且用所检索的最近的目标数据单元值更新目标高速缓存中的目标对象。
还有,可维护每个高速缓存中的每个对象的无效信息,其中一个高速缓存中的一个对象的无效信息指示该对象中的每个数据单元是有效还是无效。
针对分布式高速缓存中维护的数据,所描述的实现提供技术,用于以避免执行任何不一致数据操作的方式管理多个分布式高速缓存中的数据对象的分布式存储。
附图说明
现在仅通过举例的方式,参照附图定义本发明的优选实施例,其中:
图1图解了分布式网络计算环境,其中实现本发明的一些方面;
图2和3图解了数据结构,用以维护有关网络计算环境中在不同高速缓存上维护的数据的信息;
图4图解了逻辑,用以根据本发明的实现处理对象或页面的请求;
图5和6图解了逻辑,用以根据本发明的实现向高速缓存返回对象或页面;
图6和7图解了逻辑,用以根据本发明的实现处理修改高速缓存中的对象的请求;
图8图解了网络环境中计算部件的结构,诸如高速缓存服务器和中央服务器,以及任何其他计算设备。
具体实施方式
在下面的说明中,对构成说明一部分以及图解若干本发明的实施例的附图进行参照。应当理解可以使用其它实施例,并且可以在不偏离本发明范围的前提下进行结构和操作的改变。
图1图解了网络计算环境,其中实现本发明的一些方面。多个高速缓存服务器2a,2b...2n连接到中央服务器4,其中中央服务器4被连接到因特网6,或本领域已知的任何其他类型网络。高速缓存8a,8b...8n和高速缓存服务器2a,2b...2n可以包括本领域已知的任何类型的计算设备,包含服务器类机器,工作站,个人计算机等。高速缓存服务器2a,2b...2n均被连接到高速缓存8a,8b...8n,所述高速缓存将通过因特网6下载的Web页面存储为存储器页面10a,10b...10n。每个存储器页面10a,10b...10n可以包含对象或部件,这里被称作数据单元12a,12b...12n,14a,14b...14n,和16a,16b...16n,其中数据单元可以被修改。数据单元可以包括存储器页面10a,10b...10n内的任何粒度,包含字,字段,行,帧,整个页面,段,对象等等。尽管图1显示每个高速缓存8a,8b...8n包含相同数量的页面,其中每个页面具有相同数量的数据单元,然而在所描述的实现中,每个高速缓存8a,8b...8n可以维护不同数量的存储器页面和不同的存储器页面,其中每个存储器页面可以具有不同数量的数据单元。在不同高速缓存8a,8b...8n中的存储器页面可以表示从在不同因特网地址(例如,通用资源定位码(URL)等)的不同因特网网服务器下载的Web页面。存储器页面可以存储相同文件格式或不同文件格式的Web页面。存储器页面可以包含本领域已知的任何媒体文件格式的内容,诸如超文本语言标记(HTML),可扩展标记语言(XML),文本文件,运动文件,图片文件,声音文件等。
多个客户端系统18a,18b,18c,18d,18e,18f,18g包含向指定的高速缓存服务器2a,2b...2n传送Web页面请求,使得可以从高速缓存8a,8b...8n服务客户端请求的浏览器20a,20b,20c,20d,20e,20f,20g。客户端系统18a,18b...18g可以包括本领域已知的任何计算设备,诸如个人计算机,膝上型计算机,工作站,大型机,电话设备,手持计算机,服务器,网络设备,等等,并且浏览器20a,20b...20g可以包括能通过网络请求文件的任何程序,诸如因特网浏览器程序,电影播放器,声音播放器,等等,并且把来自这些文件的数据以本领域已知的任何媒体格式呈现给用户。在某些实现中,浏览器20a,20b...20g处的用户可以修改或更新高速缓存8a,8b...8n中存储器页面中数据单元中的数据。
中央服务器4包含中央目录服务器程序22,高速缓存服务器2a,2b...2n,高速缓存服务器均包含高速缓存服务器程序24a,24b...24n以执行高速缓存相关操作。中央目录服务器程序22维护中央目录26,中央目录26维护有关可以在每个高速缓存8a,8b...8n中的每个存储器页面中更新的数据单元的信息。每个高速缓存服务器程序24a,24b...24n也维护本地高速缓存目录28a,28b...28n,本地高速缓存目录具有维护有关可以在本地高速缓存8a,8b...8n中的存储器页面10a,10b...10n中更新的数据单元的信息的目录项。本地高速缓存目录28a,28b...28n中的目录项对应于中央目录26中的相同存储器页面的目录项。
图2图解了中央目录26和本地高速缓存目录28a,28b...28n中维护的目录项的格式50。每个目录项50包含每个本地高速缓存目录28a,28b...28n的一或多个信息元组,其中本地高速缓存目录维护对应于本地高速缓存8a,8b...8n中目录项的页面的拷贝。每个目录项50对应于特定存储器页面地址,其中不同高速缓存8a,8b...8n可以维护该页面的拷贝。针对具有页面拷贝的每个高速缓存8a,8b...8n维护的每个信息元组包含:
高速缓存服务器ID52a...52n:指示包含目录项所指示的存储器页面的特定高速缓存服务器2a,2b...2n。这个信息在本地高速缓存目录28a,28b...28n中的目录项中可选。
更新字54a...54n:每个字具有多个位,其中一个位被提供给更新字所指示的页面中的每个数据单元,该每个数据单元是可更新的。如果高速缓存8a,8b...8n中的页面中的数据单元已经修改,则设置每个位为“on”,并且如果对应数据单元尚未修改,则设置为“off”。
无效字56a...56n:若干位组成的字,其中存在对应于高速缓存8a,8b...8n中的每个存储器页面10a,10b...10n数据单元上的数据的一个位。一个位被设置为“on”,以指示该位所表示的本地高速缓存8a,8b...8n上的存储器页面中的该数据单元上的数据是无效的或被更新,并且设置为“off”,以指示本地高速缓存8a,8b...8n上的存储器页面中的数据单元上的数据没有被更新或不是无效的。这个字对于在本地高速缓存目录28a,28b...28n中的目录项是可选的。
图3和5图解了高速缓存服务器程序24a,24b...24n中实现的逻辑,并且图4和6图解了中央目录服务器程序22中实现的逻辑,其用于协同访问其中的存储器页面和数据单元,以保证以允许客户端18a,18b...18g快速访问数据的方式维护数据一致性。
图3和4分别图解了高速缓存服务器程序24a,24b..24n和中央目录服务器程序22执行的操作,其用于向客户端浏览器20a,20b...20n提供对作为所请求Web页面一部分的存储器页面的读取访问。参照图3,控制在模块100开始,其中高速缓存服务器程序24a,24b...24n从浏览器20a,20b...20g之一接收存储器页面请求。在某些实现中,每个客户端18a,18b...18g会把其所有页面请求指引到一个指定的高速缓存服务器2a,2b...2n。可选地,每个客户端可以指引请求到许多指定的可选高速缓存服务器之一。响应于接收到请求,如果(在模块102)所请求页面在连接到作为接收方的高速缓存服务器2a,2b...2n的高速缓存8a,8b...8n中,则高速缓存服务器程序24a,24b...24n从高速缓存8a,8b...8n返回(在模块104)所请求的存储器页面。在该实现中,高速缓存服务器程序24a,24b...24n提供从高速缓存8a,8b...8n到页面的直接访问,然而所返回页面可能不具有某些数据单元的值的最近的拷贝。如果所请求页面未在附连的高速缓存8a,8b...8n中,则高速缓存服务器程序24a,24b...24n向中央服务器4发送(在模块106)针对所请求页面的请求,并且控制执行到图4中的模块120,其中中央目录服务器程序22处理请求。
参照图4,响应于接收(在模块120)到存储器页面请求,中央目录服务器程序22确定(在模块122)中央目录26是否包含所请求页面的目录项。如果没有,则中央目录服务器程序22从因特网6上下载(在模块124)所请求页面。针对检索的页面产生(在模块126)中央目录26中的目录项50,其中所产生的目录项50在高速缓存服务器ID字段52a...52n中标识发起请求的高速缓存服务器2a,2b...2n,并且包含更新字54a...54n和无效字56a...56n,其所有数据单元位(图2和3)初始设置为“off”。接着,所检索的页面和所产生的目录项50被返回(在模块128)到作为请求方的高速缓存服务器2a,2b...2n,以在本地高速缓存8a,8b...8n中缓冲,并且维护本地高速缓存目录28a,28b...28n中的新接收目录项。
如果(在模块122)中央目录26中存在所请求页面的目录项,并且如果(在模块130)所请求页面的目录项50中不存在这样的目录项,即其针对所请求页面的更新字54a...54n的数据单元位54a...54n(图2)设置为“on”,以指示没有其它高速缓存服务器2a,2b...2n更新了所请求页面的数据单元12a,12b...12n,14a,14b...14n以及16a,16b...16n,则中央目录服务器程序22向一个高速缓存服务器2a,2b...2n访问(在模块132)所请求页面,其中该高速缓存服务器2a,2b...2n在所请求页面的目录项50的一个信息元组中的高速缓存服务器ID字段52a...52n中标识。由于没有高速缓存服务器2a,2b...2n维护具有更新数据的数据单元,可以向目录项50标识的任何高速缓存8a,8b...8n访问页面。中央目录服务器程序22产生(在模块134)信息元组以加入到所请求页面的目录项50,其中所产生的信息元组在字段52a...52n中标识作为请求方的高速缓存服务器2a,2b...2n,并且包含更新字54a...54n和无效字56a...56n,其中所有数据单元位54a...54n和56a...56n设置为“off”。所检索的页面和所产生的信息元组被返回(在模块136)到作为请求方的高速缓存服务器2a,2b...2n。注意,在可选实现中,只有所产生的更新字54a...54n可以被发送,而不是发送信息元组。
如果(在模块130)所请求页面的目录项50中针对另一个高速缓存服务器2a,2b...2n的一个信息元组中的一个更新字54a...54n具有设置为“on”的一个数据单元位,则中央目录服务器程序22确定(在模块138)所请求页面的目录项50中的信息元组的更新字54a...54n具有设置为“on”的多数数据单元位。接着,中央目录服务器程序22从所确定信息元组的字段52a...52n所标识的高速缓存服务器2a,2b...2n检索(在模块140)所请求页面,其中信息元组具有最大数量的最近数据单元值。针对页面的目录项50中的每个其它元组(其更新字54a...54n具有设置为“on”的数据单元位),中央目录服务器程序22会向该元组的字段52a...52n所标识的高速缓存服务器2a,2b...2n访问(在模块142)对应于设置为“on”的位的对应数据单元,并且把所访问的数据加入到所检索页面中的对应数据单元。针对作为请求方的高速缓存服务器2a,2b...2n产生(在模块144)所检索页面的目录项的元组,其在字段52a...52n中标识作为请求方的高速缓存服务器,并且包含更新字54a...54n和无效字56a...56n,其中所有数据单元位设置为“off”。接着控制执行到模块136,以返回所检索页面和所产生元组(或其相关部分)到作为请求方的高速缓存服务器2a,2b...2n。
通过图3和4的逻辑,如果本地高速缓存中不存在拷贝,则客户端浏览器页面请求首先由本地高速缓存8a,8b...8n,并且然后由远端高速缓存服务。如果本地高速缓存或远端高速缓存中不存在所请求页面的拷贝,则从因特网6上下载该页面。由于通过因特网下载的访问等待时间最长,通过优先从本地高速缓存,接着从远端高速缓存,及最终从因特网下载来优化访问性能。此外,在某些实现中,当第一次接收存储在远端高速缓存中的页面时,所返回页面包含所有远端高速缓存中维护的数据单元的最近值。
图5图解了在高速缓存服务器程序24a,24b...24n中实现的逻辑,用于处理客户端浏览器20a,20b...20g的修改数据单元的请求,所述数据单元被称作一个页面中的目标数据单元,该页面称作目标页面。控制在模块200开始,其中高速缓存服务器程序24a,24b...24n从一个客户端18a,18b...18g接收修改一个页面中的数据单元的请求,其中指定该客户端发送页面请求到接收请求的高速缓存服务器2a,2b...2n。如果(在模块202)对应于目标数据单元、所请求页面的本地高速缓存目录28a...28n中更新字中的数据单元位被设置成“on”,以指示接收请求的高速缓存服务器2a,2b...2n(称作作为接收方的高速缓存服务器)具有目标数据单元12a,12b...12n,14a,14b14n,16a,16b...16n的最近的值,则作为接收方的高速缓存服务器程序24a,24b...24n用所接收的修改数据单元更新(在模块204)连接到作为接收方的高速缓存服务器2a,2b...2n的高速缓存8a,8b...8n中的目标页面中的数据单元。否则,如果作为接收方的高速缓存服务器2a,2b...2n上的更新字54a...54n,28a,28b...28n不具有对应于目标数据单元、设置为“on”的位,则作为接收方的高速缓存服务器程序24a,24b...24n发送(在模块202)修改目标页面中的目标数据单元的请求到中央服务器4。
图6图解了中央目录服务器程序22响应来自作为接收方的高速缓存服务器2a,2b...2n(在图5中的模块206)、修改目标页面中的目标数据单元的请求而执行的操作。响应于接收到这个请求(在模块210),中央目录服务器程序22确定(在模块214)在所请求页面的目录项50的作为接收方的高速缓存服务器2a,2b...2n(如字段52a...52n所示)的元组中,无效字56a...56n中对应于目标数据单元的数据单元位是否被设置成“on”,即指示“无效”。如果是这样的话,另一个高速缓存服务器2a,2b...2n已经修改目标数据单元。在这种情况下,中央目录服务器程序22确定(在模块216)其它高速缓存服务器2a,2b...2n的目录项中,即高速缓存服务器的具有所针对的数据单元的最近数据的目录项中,具有其目标数据单元位54(图2)被设置为“on”的更新字54的元组。接着中央目录服务器程序22从所确定的元组指示的其它高速缓存服务器2a,2b...2n检索(在模块218)目标数据单元的最近的值,并且返回(在模块220)所检索的最近的数据单元值到作为接收方的高速缓存服务器。在所确定的元组中,由于在更新操作之后作为接收方的高速缓存服务器会更新目标数据单元并且具有目标数据单元的最近的值,其它高速缓存服务器2a,2b...2n的更新字54a...54n中的目标数据单元位被设置(在模块222)为“on”。
在提供最近的数据值给作为接收方的高速缓存服务器之后(从模块222)或如果作为接收方的高速缓存服务器具有目标数据单元的最近的值(来自模块214的否分支),控制执行到模块224和226,其中中央目录服务器程序22在作为请求方的高速缓存服务器的目录项中,设置(在模块224)更新字54a...54n中对应于目标数据单元的数据单元位为“on”,并且设置作为请求方的高速缓存服务器的目录项中的无效字56a...56n中的位为“off”。中央目录服务器程序22也在所有其它高速缓存服务器的目标页面的目录项50中元组中,将无效字56a...56n中的数据单元位设置(在模块226)为“on”,以指示其它高速缓存服务器在其目标页面拷贝中具有目标数据单元的无效数据。接着,中央目录服务器程序22返回(在模块228)消息到作为接收方的高速缓存服务器以继续修改目标数据单元。该消息也可以包含显式或隐含的消息,其指示作为请求方的高速缓存服务器更新所接收页面的其有效和无效字中的相关位,以指示作为请求方的高速缓存服务器具有在页面中更新的数据单元的最近更新。在可选实现中,中央目录服务器程序22可以返回修改的有效和无效字。
当从中央目录服务器程序22接收(在图5中的模块250)修改的目标数据单元时,高速缓存服务器程序24a,24b...24n用所接收的修改数据单元更新(在模块252)其高速缓存8a,8b...8n中的目标页面中的目标数据单元。当接收(在模块254)消息以修改目标数据单元时,作为请求方的高速缓存服务器24a,24b...24n把从客户端浏览器20a,20b...20g接收的已修改数据单元加入到高速缓存8a,8b...8n中的页面10a,10b...10n。
所描述实现提供用于分布式高速缓存服务器系统的协议,以允许客户端浏览器在一个高速缓存服务器上进行更新,并且同时维护所有高速缓存服务器之间的数据一致性。这也提供了不严格的数据更新一致性,因为如果在浏览器中更新数据,则只在具有包含被修改数据单元的页面拷贝的远端高速缓存服务器的中央目录中设置无效数据位。关于更新的信息没有被包含在远端高速缓存服务器中,并且远端高速缓存服务器的浏览器和客户端可以持续从不具有最近的数据单元值的本地高速缓存读取页面。然而,如果从不具有最近数据的高速缓存服务器接收数据的浏览器试图修改数据单元,则浏览器将在应用修改之前接收最近数据。
其它实现细节
所描述用于管理分布式高速缓存服务器系统的技术可使用产生软件,固件,硬件或任何其组合的标准编程和/或工程技术实现为方法,装置或产品。这里使用的术语“产品”是指在硬件逻辑(例如,集成电路芯片,可编程门阵列(PGA),专用集成电路(ASIC)等)或诸如磁存储介质(例如,硬盘驱动器,软盘驱动器,磁带等等)的计算机可读介质,光学存储器(CD-ROM,光盘等等),易失和非易失存储器设备(例如,EEPROM,ROM,PROM,RAM,DRAM,SRAM,固件,可编程逻辑等等)中实现的代码或逻辑。处理器访问和执行计算机可读介质中的代码。其中实现优选实施例的代码还可以通过传输介质或通过网络从文件服务器访问。在这种情况下,其中实现代码的产品可以包括诸如网络传输线路,无线传输介质,空间信号传播,无线电波,红外信号等的传输介质。因而,“产品”可以包括其中体现代码的介质。另外,“产品”可以包括其中体现,处理和执行代码的硬件和软件部件的组合。当然,本领域的技术人员会认识到,可以在不偏离本发明范围的情况下对这个结构进行许多修改,并且产品可以包括本领域已知任何信息承载介质。
在已描述实现中,针对中央服务器中的每个目录项中的每个信息元组维护无效字和更新字。在可选实现中,只有更新字被维护。在这种实现中,为确定作为请求方的高速缓存服务器是否具有旧数据,中央服务器要处理其它高速缓存服务器的元组中的更新字,以确定任何其它高速缓存服务器是否已修改数据单元。
在所描述实现中,在高速缓存中维护的页面包括存储器页面,其中多个存储器页面会存储通过因特网从URL访问的单个Web页面的数据。可选地,高速缓存中的存储器页面可以包括Web页面。
在所描述实现中,中央服务器和中央目录服务器程序管理更新操作以确保作为请求方的高速缓存服务器在应用更新之前接收最近的数据。在可选实现中,所描述由中央服务器和中央目录服务器程序执行的操作可以分布在高速缓存服务器中,以提供分布式中央目录。在这种实现中(其中中央目录服务器程序执行的操作被分布),在中央服务器的更新字和无效字中维护的信息将被分布到高速缓存服务器,以允许高速缓存服务器执行分布式高速缓存管理操作。
在所描述实现中,高速缓存服务器维护高速缓存服务器2a,2b...2n的高速缓存8a,8b...8n中每个页面的更新字的拷贝。可选地,高速缓存服务器可以不维护更新字,并是通过中央服务器处理所有一致性操作。
描述为包含在更新和无效字中的信息可以在本领域已知的任何一或多个数据结构中实现,以提供更新及无效信息。例如,更新及无效信息可以在一或多个数据对象,数据库的数据记录,表项,单独对象等中实现。
在高速缓存中维护的页面可以包括任何数据对象类型,包含任何类型的多媒体对象,其中客户端或用户可以输入或添加数据以修改对象内容。
在所描述实现中,存在单独的被连接到每个高速缓存的高速缓存服务器。高速缓存和高速缓存服务器可以在相同封装单元,或可以在不同单元中。在可选实现中,一个高速缓存服务器可以被连接到多个高速缓存,并且维护多个连接的高速缓存的更新信息。
在所描述实现中,中央服务器从因特网上下载页面。可选地,中央服务器可以从任何网络下载页面,诸如内部网,局域网(LAN),广域网(WAN),存储区网络(SAN),等等。此外,高速缓存服务器可以直接访问因特网以下载页面。
图4-6所图解的逻辑说明按某个次序出现的某些事件。在可选实现中,某些操作可以按不同次序执行,修改或消除。此外,各步骤可以加入到上述逻辑并且仍然与所描述实现相符。此外,这里描述的操作可以顺序出现,或某些操作可以并行处理。此外,操作可以通过单个处理单元,或通过分布式处理单元执行。
图7图解网络部件的计算机结构300的一个实现,诸如图1中说明的中央服务器和高速缓存服务器。结构300可以包含处理器302(例如,微处理器),存储器304(例如,易失存储器设备),以及存储设备306(例如,非易失存储器,诸如磁盘驱动器,光驱,磁带驱动器等等)。存储设备306可以包括内部存储装置或附加或网络访问的存储器。存储设备306中的程序被载入存储器304并且通过处理器302以本领域已知的方式执行。结构还包含网卡308以允许与网络通信。输入设备310用于向处理器302提供用户输入,并且可以包含键盘,鼠标,输入笔,话筒,触摸显示屏,或本领域已知的任何其他激活或输入机构。输出设备312能够呈现从处理器302或其它部件,诸如显示监视器,打印机,存储器等发送的信息。