KR20010012913A - 네트워크 오브젝트 캐시 엔진 - Google Patents

네트워크 오브젝트 캐시 엔진 Download PDF

Info

Publication number
KR20010012913A
KR20010012913A KR1019997010881A KR19997010881A KR20010012913A KR 20010012913 A KR20010012913 A KR 20010012913A KR 1019997010881 A KR1019997010881 A KR 1019997010881A KR 19997010881 A KR19997010881 A KR 19997010881A KR 20010012913 A KR20010012913 A KR 20010012913A
Authority
KR
South Korea
Prior art keywords
cache
block
network
disk
mass storage
Prior art date
Application number
KR1019997010881A
Other languages
English (en)
Inventor
말콤마이클
잔키로버트
Original Assignee
마이클 말콤
캐시플로우, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이클 말콤, 캐시플로우, 인코포레이티드 filed Critical 마이클 말콤
Publication of KR20010012913A publication Critical patent/KR20010012913A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1435Saving, restoring, recovering or retrying at system level using file system or storage system metadata
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Library & Information Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

본 발명은 컴퓨터 네트워크를 사용하여 전송되는 정보 오브젝트를 캐시에 저장하는 방법 및 시스템을 제공한다. 캐시 엔진은 메모리(RAM 등)와 대용량 저장장치(하나이상의 디스크 드라이브 등)에 언제 그리고 어디에 그러한 오브젝트를 저장할지를 직접 결정하여, 지속적으로 오브젝트를 유지할 필요없이 대용량 저장장치로 그러한 오브젝트를 최적으로 기입하고 이후에 상기 대용량 저장장치로부터 판독하도록 한다. 이러한 캐시 엔진은 적극적으로 그러한 오브젝트를 메모리 또는 디스크에 할당하고, 디스크상의 어느 위치에 그러한 오브젝트를 저장하고, 네트워크 식별자(URL 등)에 응하여 그러한 오브젝트를 검색할 것인지를 결정하며, 어느 오브젝트를 캐시로부터 제거할 것인지를 결정하여 충분한 동작 공간을 확보하도록 한다. 캐시 엔진은 기입 에피소드에서 디스크로 기입될 정보를 수집하여, 디스크로 정보를 기입할 때 효율성을 최대화하고 디스크로부터 정보를 이후에 판독할 때 효율성을 최대화한다. 캐시 엔진은 기입 에피소드를 수행하여, 각 기입 에피소드 동안에 디스크로의 변화를 원자적으로 수행하도록 한다. 이로 인해, 캐시 엔진은 전원 손실 또는 저장 손실 또는 캐시의 일부의 다른 중간적 오동작에 응하여 오동작하지 않는다. 캐시 엔진은 복수의 디스크 중 각 하나상에 키 시스템 오브젝트를 또한 저장하여, 디스크의 서브세트의 손실이 단순히 가용 캐시의 양을 감소시킨다는 점에서 캐시를 홀로그래픽으로 유지하도록 한다. 캐시 엔진은 또한 삭제 에피소드에서 디스크로부터 삭제된 정보를 수집하여, 디스크로부터 정보를 삭제할 때의 효율과 이후에 이전에 삭제된 정보를 갖는 영역에 기입할 때의 효율을 최대화하도록 한다. 캐시 엔진은 가용 캐시의 양의 확장 또는 감축과 같은 디스크의 부가 또는 삭제에 응한다.

Description

네트워크 오브젝트 캐시 엔진{Network Object Cache Engine}
정보 전송용 컴퓨터 네트워크에서, 정보 제공자("서버"라고 불림)들은 동일 혹은 유사한 정보를 다수의 수신자("클라이언트"라고 불림) 또는 동일한 수신자에서 다수회 전송할 것이 자주 요청된다. 이로 인해, 동일 혹은 유사한 정보를 다수회 전송하게 되며, 네트워크의 통신 구조와 서버 자원을 혹사하게 되고 클라이언트가 상대적으로 긴 응답시간으로 인한 불편을 감수하게 된다. 이 문제는 특히 다음과 같은 여러가지 상황에서 심각하다: (a) 특정 서버가 항상 인기있거나 갑자기 상대적으로 인기있게 된 경우; (b) 특정 서버로부터의 정보가 상대적으로 많은 수의 클라이언트에게 루틴하게 분배되는 경우; (c) 특정 서버로부터의 정보가 상대적으로 긴급히 필요한 경우; 및, (d) 서버와 클라이언트간의 통신 경로 또는 클라이언트와 네트워크간의 통신 경로가 상대적으로 느린 경우.
한가지 공지된 방법은 대리(proxy)로서 기능하는 장치(그 예로 소프트웨어 제어에 의해 동작하는 범용 프로세서)를 제공하여, 하나 이상의 클라이언트로부터의 정보 요청을 수신하고, 그 정보를 하나 이상의 서버로부터 획득하고, 서버대신에 클라이언트로 그 정보를 전송하게 한다. 이러한 대리 장치는 이전에 하나 이상의 서버로부터 정보를 획득하였다면, 그 정보를 서버에 대한 요청을 반복할 필요없이 클라이언트로 전달할 수 있다. 이러한 방법은 네트워크에서 혼잡과 서버에 대한 로드(load)를 감소시키는 반면, 상기 대리 장치의 파일 서버나 지역 파일 시스템(local file system) 및 지역 오퍼레이팅 시스템에 의해 상당한 부담(overhead)이 요구된다. 이로 인해 네트워크를 운영하는 비용의 증가와 서버와 클라이언트간의 통신 경로의 속도가 늦춰지는 일이 발생한다.
대리장치가 그 지역 오퍼레이팅 시스템과 지역 파일 시스템에 그 저장장치에 대한 제어를 내어 주는 것에 의해 주로 발생하는 몇몇 지연(delay) 원인은 다음과 같다: (a) 상기 대리 장치는 가장 빠른 액세스를 위해 대용량 저장장치내에 상기 서버로부터 정보를 체계화할 수 없다; (b) 상기 대리장치는 대용량 저장장치에 대한 액세스를 최적화하는 방식으로 상기 서버로부터 받은 오래된 네트워크 오브젝트들을 삭제하거나 상기 서버로부터 받은 새로운 네트워크 오브젝트를 저장할 수 없다. 상술한 비용과 지연의 증가로 인해, 대리 장치가 그 저장 장치에 대한 제어를 내준 것은 대리 장치의 저장 장치 사용의 기능성을 다음과 같이 제한하게 된다: (a) 상기 대리장치가 동작하는 동안 상기 대리장치에 할당된 저장장치로 또는 저장장치로부터의 가감이 어렵거나 불가능한 경우; 및, (b) 상기 대리장치와 그 지역 파일 시스템은 RAID 저장 시스템과 같은 고가의 여분의 저장 기법을 사용하지 않고는 그 저장장치의 일부의 손실로부터 회복될 수 없다.
따라서, 지역 오퍼레이팅 시스템과 지역 파일 시스템 또는 파일 서버를 사용해야만 하는 것에 따른 부가적인 지연이나 제한된 기능성을 갖지 않는 컴퓨터 네트워크를 사용하여 전송된 정보를 캐시에 기억하는 방법과 시스템을 제공하는 것이 바람직하다. 이로 인한 잇점은 네트워크에 접속된 캐시 엔진이 전송된 오브젝트의 캐시를 제공하여, 그러한 오브젝트를 대용량 저장장치에 언제 그리고 어디에 저장할지에 관해 상기 캐시엔진이 직접적인 제어를 함으로써 메모리 및 대용량 저장장치내에 저장되는 본 발명의 실시예에서 달성된다. 캐시 엔진은 이러한 오브젝트를 홀로그래피식으로 저장하여 연산을 원활하게 계속하고 대용량 저장장치의 부가, 제거 또는 고장(failure)으로부터 용이하게 회복되도록 한다.
본 발명은 컴퓨터 네트워크를 사용하여 전송되는 오브젝트를 캐시에 저장하는 장치에 관한 것이다.
도 1은 컴퓨터 네트워크에서 네트워크 오브젝트 캐시 엔진의 블록도.
도 2는 캐시에 저장된 네트워크 오브젝트의 세트에 대한 저장 블록을 유지하는 데이타구조(data structure)의 블록도.
도 3은 네트워크 오브젝트를 캐시에 저장하는 데이타 구조의 블록도.
도 4는 원래의 블록과 변경된 블록 세트의 블록도.
도 5는 단일 디스크 드라이브에 대해 변경된 블록의 원자 기입에 대한 방법의 순서도.
도 6은 대용량 저장장치상의 포인터 세트와 영역의 블록도.
본 발명은 컴퓨터 네트워크를 사용하여 전송된 정보 오브젝트를 캐시에 저장하는 방법 및 시스템을 제공한다. 본 발명에서, 캐시 엔진은 메모리(RAM 등)와 대용량 저장장치(하나 이상의 디스크 드라이브 등)내에 이러한 오브젝트를 언제 및 어디에 저장할 지를 직접 결정하여, 상기 오브젝트를 지속적으로 유지할 필요 없이 대용량 저장장치에 적절하게 기입하고 이후에 대용량 저장장치로부터 오브젝트를 판독한다. 캐시 엔진은 메모리 또는 디스크로 상기 오브젝트를 원활하게 할당하고, 디스크 상의 어느 부분에 상기 오브젝트를 저장할지를 결정하고 네트워크 식별자(URL과 같은)에 응하여 상기 오브젝트를 검색하고, 적절한 여유 공간을 유지하도록 캐시로부터 어떤 오브젝트를 제거할 것인지를 결정한다.
보다 바람직한 실시예에서, 캐시 엔진은 기입 에피소드(write episodes)내에서 디스크에 기입될 정보를 수집하여, 디스크에 정보를 기입할 때의 효율성을 최대화하고 디스크로부터 그 정보를 이후에 판독할 때의 효율성을 최대화한다. 캐시 엔진은 각 기입 에피소드동안 디스크에 대해 원자식으로(atomically) 변화를 수행하도록 기입 에피소드를 수행하여, 캐시 엔진이 전력 또는 저장장치의 손실이나 상기 캐시 일부의 다른 형태의 중간적인 고장(intermediate failure)에 응하여 동작되지 않는 일이 없도록 한다. 상기 캐시 엔진은 복수의 디스크 중 각각에 대해 키 시스템 오브젝트를 저장하여 디스크의 서브세트(subset)의 손실이 이용가능한 캐시의 양을 단순히 감소시킨다는 의미에서 캐시를 홀로그래픽식으로 유지하도록 한다. 캐시 엔진은 디스크로부터 삭제된 정보를 삭제 에피소드에서 선택하여 디스크로부터의 정보를 삭제할 때와 디스크의 그 영역에 새로운 정보를 이후에 기입할 때 효율성을 최대화한다. 캐시 엔진은 이용가능한 캐시의 양의 확장 또는 감축으로서 디스크의 부가 또는 삭제에 응답한다.
이하의 상세한 설명에서는, 본 발명의 보다 바람직한 실시예가 바람직한 처리 단계와 데이타 구조에 관해 설명된다. 본 발명이 속한 분야의 당업자라면 이 출원의 검토후에 본 발명의 실시예가 범용 프로세서와 저장장치, 특수한 목적의 프로세서와 저장 장치 또는 특정 처리 단계와 데이타 구조에 적합한 다른 회로를 사용하여 구현할 수 있다는 것을 인식할 것이다. 그리고, 여기에서 설명된 처리 단계 및 데이타 구조의 구현은 다른 실험이나 발명을 요하지 않는다.
네트워크 오브젝트의 캐싱
도 1은 컴퓨터 네트워크에서 네트워크 오브젝트 캐시 엔진의 블록도를 도시한다.
캐시 엔진(100)은 컴퓨터 네트워크(110)에 접속되어, 캐시 엔진(100)이 네트워크에 접속된 장치 세트(111)로부터의 메시지를 수신할 수 있도록 한다.
보다 바람직한 실시예에서, 네트워크(110)는 통신 매체(112)를 사용하여 상호접속된 복수의 장치(111)를 포함한다. 예를 들면, 네트워크(110)가 LAN(근거리 통신망)을 포함하면, 통신 매체(112)는 이서네트 케이블(ethernet cabling), 광섬유의 광 접속, 또는 다른 매체를 포함할 수 있다. 네트워크(110)는 보다 바람직하게 종종 "인터넷" 또는 "인트라넷트"라 불리는 네트워크들의 네트워크를 포함한다.
보다 바람직한 실시예에서,네트워크(110)에 접속된 장치(111)는 통신을 위한 하나 이상의 프로토콜, 예를 들면, HTTP(하이퍼텍스트 전송 프로토콜) 또는 그 변형예중 하나인 FTP(파일 전송 프로토콜) 또는 다른 프로토콜을 사용하여 캐시 엔진(100)과 통신한다. 보다 바람직한 실시예에서, 프로세서(101)는 이하에서 설명되는 방법을 수행하고 이하에서 설명되는 데이타 구조를 구축하고 사용하기 위해 소프트웨어 제어하에서 동작하는 범용 프로세서를 포함한다. 이하에서 사용되는 바와 같이, 캐시 엔진(100)이 특정 타스크를 수행하거나 특정 데이타 구조를 유지할 때, 그 참조(reference)는 프로그램과 데이타 메모리(103)에서 유지되는 소프트웨어의 제어하에서 프로세서(101)에 의한 타당한 연산(condign operation)을 포함한다.
캐시(102)는 프로그램, 데이타 메모리(103) 및 대용량 저장장치(104)를 포함한다. 보다 바람직한 실시예에서, 대용량 저장장치(104)는 자기 디스크 드라이브와 같은 복수의 디스크 드라이브를 포함하지만, 그 대신에 광 또는 광자기 디스크 드라이브를 포함할 수 있다. 이하에서 사용된 바와 같이, "디스크" 및 "디스크 드라이브"에 대한 참조는 대용량 저장장치(104)와 그 개별적인 드라이브가 물리적인 디스크 형태의 소자를 포함하지 않을 지라도 대용량 저장장치(104)와 그 개별적인 드라이브를 참조한다. 이러한 캐시 엔진(100)은 네트워크(110)에 접속되고 상기 장치(111)가 캐시 엔진(100)과 통신하는 하나 이상의 프로토콜에 따라 한 세트의 프로토콜 메시지(1130)를 수신하고 전송할 수 있다.
캐시 엔진(100)은 캐시(102)에서 한 세트의 네트워크 오브젝트(114)를 유지한다. 캐시 엔진(100)은 "클라이언트" 장치의 세트로부터 프로토콜 메시지(113)를 수신하여 "서버" 장치(111)의 세트로부터 검색된 네트워크 오브젝트(114)를 요청하도록 한다. 그에 응하여, 캐시 엔진(100)은 프로토콜 메시지(113)를 발생하여 이러한 네트워크 오브젝트(114)를 하나 이상의 서버 장치(111)로부터 요청하고, 그러한 네트워크 오브젝트(114)를 수신하고 캐시(102)에 저장하며, 요청된 클라이언트 장치(111)로 그 네트워크 오브젝트(114)를 전송한다.
여기에서 사용된 바와 같이, 용어 "클라이언트"와 "서버"는 클라이언트 또는 서버와 캐시 엔진(100)간의 관계를 언급하는 것으로, 반드시 특정된 물리적 장치(111)일 필요는 없다. 여기에서 사용된 바와 같이, 하나의 "클라이언트 장치(111)" 또는 하나의 "서버 장치(111)"는 다음 중 하나를 포함할 수 있다: (a) 캐시 엔진(100)에 대해 클라이언트 또는 서버 관계를 갖는 소프트웨어를 실행하는 단일 물리적 장치(111); (b) 하나의 하드웨어 장치(111)상에서 실행되는 소프트웨어 프로세서 또는 소프트웨어 프로세서의 세트와 같이 물리적 장치(111)의 일부로서, 그 일부가 캐시 엔진(100)에 대해 클라이언트 또는 서버 관계를 형성하는 것; 또는 (c) 캐시 엔진(100)에 대해 클라이언트나 서버 관계를 형성하는 논리적 엔티티(logical entity)를 형성하도록 상호동작하는 복수의 물리적 장치(111) 또는 그 일부. 용어 "클라이언트 장치" 및 "서버 장치"는 그러한 논리적 엔티티를 참조하며 특정의 개별적인 물리적 장치(111)를 반드시 참조하는 것은 아니다.
캐시 엔진(100)은 캐시(102)에서 네트워크 오브젝트(114)를 보존하고 그러한 네트워크 오브젝트(114)를 그를 요청하는 클라이언트 장치(111)에 대해 계속 사용되도록 함으로써 재사용된다. 캐시(102)가 충분히 가득차게 되면, 캐시 엔진(100)은 네트워크 오브젝트(114)를 캐시(102)로부터 제거한다. 예를 들면, 캐시 엔진은 이하의 "캐시로부터의 오브젝트 제거" 부분에 기재된 바와 같이 오브젝트를 제거할 수 있다.
보다 바람직한 실시예에서, 캐시 엔진(100)은 대용량 저장장치(104)에서 유지되는 네트워크 오브젝트(114)에 대한 캐시로서 메모리(103)를 사용하는 반면, 파일 네트워크(110)상에서 이용가능한 네트워크 오브젝트(114)에 대해서는 결합된 메모리(103)와 대용량 저장장치(104)가 캐시(102)로서 사용된다.
캐시(102)는 파일 저장 시스템이 아니며, 캐시(102)에 저장된 네트워크 오브젝트(114)는 캐시 엔진(100)에 의해 언제라도 캐시(102)로부터 자동적으로 제거될 수 있다. 모든 네트워크 오브젝트(114) 및 캐시(120)에 의해 유지되는 다른 모든 데이타는 동작을 위해 요구되는 극소수의 시스템 오브젝트를 제외하고는 임시적인 것이며, 상기 시스템 오브젝트는 대용량 저장장치(104)의 일부의 가능한 손실(하나 이상의 디스크 드라이브의 손실 등)에 대해 그러한 시스템 오브젝트를 보존하기 위해 대용량 저장장치(104)에서 여분으로 유지된다. 따라서, 캐시 엔진(100)은 캐시(102)에 저장되는 네트워크 오브젝트(114)가 저장된 후의 특정 시간에 이용가능하다는 것을 보장할 필요가 없으며, 캐시(102)의 일부(대용량 저장장치(104) 등)의 고의적인 제거나 고장은 상기 캐시 엔진(100)의 고장을 유발할 수 없다. 유사하게, 부가적인 대용량 저장장치(104)의 복구나 고의적인 부가(디스크 드라이브의 "빠른 교체(hot swapping)" 등)는 캐시 엔진(100) 동작의 방해없이 캐시(120)내로 무리없이 일체화된다.
게다가, 캐시 엔진(100)은 네트워크 오브젝트(114)의 동작을 배타적으로 수행하도록 동작한다. 프로세서(101) 상에서 독립적으로 실행하는 어떠한 사용자도, 어떠한 사용자 응용 프로그램도, 어떠한 분리된 "오퍼레이팅 시스템"도 존재하지 않는다. 캐시 엔진(100) 그 자체는 네트워크 오브젝트(114)의 캐시(102)를 유지하고 캐시(102)에서의 보유(retention) 또는 캐시(102)로부터의 제거를 위해 네트워크 오브젝트(114)를 선택하여, (1) 대용량 저장장치(104)에 네트워크 오브젝트(114)의 기입을 지역화하고 (2) 대용량 저장장치(104)로부터 네트워크 오브젝트(114)의 삭제를 지역화하고 (3) 캐시(102)내의 네트워크 오브젝트(114)를 새로운 네트워크 오브젝트(114)로 효율적으로 교환하도록 동작하게 한다. 보다 바람직한 실시예에서, 캐시 엔진(100)은 네트워크 오브젝트(114)로 상대적으로 채워진 캐시(102)가 동작하는 동안 효율적으로 이러한 동작을 수행한다.
보다 바람직한 실시예에서, 캐시 엔진(100)은 캐시(102)로의 액세스에 관해 통계(statistics)를 유지한다. 이러한 통계는 다음과 같은 사항을 포함한다.
- 캐시(102)에서 발견되는 네트워크 오브젝트(114) 대 서버 장치(111)로부터 검색되어야 하는 네트워크 오브젝트에 대한 히트율(hit rate) 및 메모리(103)에서 발견되는 네트워크 오브젝트(114) 대 대용량 저장장치(104)로부터 검색되어야 하는 네트워크 오브젝트(114)에 대한 히트율을 포함하는 캐시(102)에 대한 히트율 세트;
- (1) 메모리(103)에서 유지되는 다수의 네트워크 오브젝트(114); 및 (2) 네트워크 오브젝트(114)를 캐시에 저장하는 메모리(103) 대 시스템 오브젝트를 저장하거나 할당되지 않은 메모리(103)의 비를 포함하는 메모리(103)상의 동작에 대한 통계 세트; 및,
- (1) 대용량 저장장치(104)로부터 다수의 판독 동작; (2) 다수의 "기입 에피소드"를 포함하는 대용량 저장장치(104)로의 다수의 기입 동작; 및, (3) 네트워크 오브젝트(114)를 캐시에 저장하는 데 사용되는 대용량 저장장치(104) 대 시스템 오브젝트를 저장하거나 할당되지 않은 대용량 저장장치(104)의 비.
캐시 엔진(100)은 이상과 같은 것의 조합이나 변형인 통계를 유지할 수 있다.
캐시 엔진의 사용
캐시 엔진(100)이 네트워크(100)에서 향상된 성능 또는 부가적인 기능성을 제공할 수 있는 몇가지 환경이 있다. 예를 들면, 캐시 엔진(100)은 대리 캐시(방화벽을 제공하는지 여부, 근거리 통신망에 접속된 클라이언트 장치(111)에 대해 캐시를 제공하는 지 여부, 등등), 역 대리 캐시(reverse proxy cache), 단일 ISP의 사용자에 의한 요청용 캐시, "푸시(push)" 프로토콜용 캐시 또는 액셀러레이터(accelerator) 또는 서버 캐시로서 사용될 수 있다.
캐시 엔진(100)은 클라이언트 장치(111)에 네트워크 오브젝트(114)에 대한 비교적 빨라진 액세스를 제공하거나 서버 장치(111)로부터 직접 네트워크 오브젝트를 이용가능하게 한다. 통상, 클라이언트 장치(111)는 그러한 네트워크 오브젝트(111)를 캐시 엔진(100)으로부터 요청하고, 캐시 엔진(100)은 캐시(102)로부터 클라이언트 장치(111)로 네트워크 오브젝트(114)를 전송하거나 서버 장치(111)로부터 네트워크 오브젝트(114)를 얻은 다음 클라이언트 장치(111)로 전송한다.
캐시 엔진(100)은 클라이언트 장치(111)에 의해 요청된 다큐먼트(documents)를 단순히 기다리는 것 보다 더 뛰어난 지능과 활동성(proactivity)을 발휘할 수 있다.
- 캐시 엔진(100)은 클라이언트 장치(111)에 의해 요청될 것이 예상되는 선택된 네트워크 오브젝트(114)를 미리 로딩하도록 구성된다. 예를 들면, 소정 네트워크 오브젝트(114)는 인터넷과 같은 네트워크(110)를 통해 클라이언트 장치(111)에 의해 통상 요청되는 것으로 공지되어 있다. 이러한 네트워크 오브젝트(114)는 제조에 의해 캐시 엔진(100)내에 미리 로딩될 수 있다. 이러한 네트워크 오브젝트(114)는 공지된 회사(네스케이프 등)에 대한 홈페이지 및 공지된 검색 엔진(예를 들면, 디지탈사의 "알타 비스타")를 포함할 수 있다.
- 캐시 엔진(100)은 통상 요청된 네트워크 오브젝트(114)에 관해 통계 세트에 응답하는 네트워크 오브젝트(114)를 주기적으로 요청할 수 있다. 예를 들면, 통상 요청되는 네트워크 오브젝트(114)에 관한 정보는 서버 장치(111)상에 유지될 수 있다. 캐시 엔진(100)은 이러한 정보를 서버 장치(111)로부터 요청할 수 있고 주기적으로 그러한 네트워크 오브젝트(114)를 캐시(102)내의 저장장치용으로 요청한다. 보다 바람직한 실시예에서, 캐시 엔진(100)은 이러한 동작을 클라이언트 장치(111)가 캐시 엔진(100)을 사용하여 활동중이 아닌 때, 예를 들면, 늦은 밤 또는 이른 아침과 같은 상대적으로 한가한 시간에 주기적으로 수행할 수 있다.
- 캐시 엔진(100)은 클라이언트 장치(111)에서 사용자 선호도 세트에 응하여 네트워크 오브젝트(114)를 주기적으로 요청할 수 있다. 예를 들면, 캐시 엔진(100)은 클라이언트 장치(111)로부터 북마크 세트를 수신할 수 있고(요청에 의해 또는 다른 방법으로), 네트워크 오브젝트(114)를 서버 장치(111)로부터 수신할 수 있다. 보다 바람직한 실시예에서, 캐시 엔진(100)은 하루와 같이 선택된 시간 주기내에 변화된 그러한 네트워크 오브젝트(114)를 요청할 수 있다.
- 캐시 엔진(100)은 주기적으로 혹은 요청에 의해 서버 장치(111)에 의해 클라이언트 장치(111)로 전달되는 서버 장치(111)로부터의 네트워크 오브젝트(114)를 수신하는 미러 사이트(mirror site)를 하나 이상의 서버 장치(111)에 제공할 수 있다.
- 캐시 엔진(100)은 하나 이상의 서버 장치(111)에 대한 액셀러레이터를 복수의 캐시 엔진(100)중에 분포된 서버 장치(111)에 대한 요청을 수신함으로써 제공할 수 있다. 각 캐시 엔진(100)은 서버 장치(111)에 의해 클라이언트 장치(111)로 전달되는 네트워크 오브젝트(114)를 갖는 캐시(102)를 유지한다. 서버 장치(111)에 의한 서비스는 그로 인해 가속화되는데, 이는 각 캐시 엔진(100)이 전달되고 서버 장치(111) 그 자체에 의해 다루어져야만 하고 그를 통해 전달되는 정보의 다수의 요청을 제한하는 동안, 정보에 대한 요청부하(load of requests)의 일부에 응답할 수 있기 때문이다.
- 캐시 엔진(100)은 하나 이상의 서버 장치(111)를 어시스트하는 제1 타입의 푸시 프로토콜을 하나 이상의 클라이언트 장치(111)로 네트워크 오브젝트(114)나 대리 캐시(proxy caches)로 푸시 프로토콜을 사용하여 전달함으로써 제공할 수 있다. 예를 들면, 서버 장치(111)가 네트워크 동시전송 서비스(network broadcast service)를 제공할 때, 캐시 엔진(100)은 서버 장치(111)로부터 네트워크(110)의 서브세트로 동시전송될 네트워크 오브젝트(114)를 수신할 수 있고 독자적으로 그러한 네트워크 오브젝트(114)를 동시전송할 수 있다.
- 캐시 엔진(100)은 하나 이상의 서버 장치(111)를 어시스트하는 제2 타입의 푸시 프로토콜을 서버 장치(111)가 복수의 캐시 엔진(100)으로 네트워크 오브젝트(114)를 동시전송하도록 함으로써 제공할 수 있다. 각 캐시 엔진(100)은 마치 캐시 엔진(100)이 그러한 네트워크 오브젝트(114)에 대한 서버 장치(111)인 것 처럼 동시전송된 네트워크 오브젝트(114)를 캐시 엔진(100)으로부터 그러한 네트워크 오브젝트(114)를 요청한 클라이언트 장치(111)에 이용가능하도록 만들 수 있다.
네트워크 오브젝트(114)는 HTML 페이지, 텍스트, 그래픽, 사진, 오디오, 비디오와 같은 데이타, 자바 또는 ActiveX 애플렛 또는 응용 프로그램과 같은 프로그램; 또는 푸시 프로토콜 오브젝트와 같은 다른 타입의 네트워크 오브젝트를 포함할 수 있다. 캐시 엔진(100)은 복수의 클라이언트 장치(111)에 의해 지연된 사용을 위해 캐시(102)내의 오디오 또는 비디오 정보를 스트리밍(streaming)하는 프레임을 리코드할 수 있다. 공지된 네트워크 오브젝트(114)의 일부 타입은 서버 장치(111)에 의해 캐시로 저장되지 않는 것으로 마크된 아이템 또는 CGI 출력과 같이, 캐시에 저장되지 않는다.
보다 바람직한 실시예에서, 캐시 엔진(100)은 프로토콜 메시지(113)로부터 또는 네트워크(110)에서 질문형 라우팅 장치와 같은 다른 수단으로부터 클라이언트 장치(111)에 관한 정보를 수집할 수 있다. 그리고, 그 정보에 응하여 다른 클라이언트 장치(111)로 다른 네트워크 오브젝트(114)를 제공할 수 있다. 예를 들면, 캐시 엔진(100)은 클라이언트 장치(111)에 대한 정보에 응하여 근접성(proximity) 또는 내용(content)에 대해 서버 장치(111)를 다음과 같이 선택할 수 있다.
- 캐시 엔진(100)은 네트워크 루팅 근접성(network routing proximity) 또는 복수의 서버 장치(111)에 대해 서비스 부하를 확산시키는 것과 같은 빠른 응답을 위해 특정 서버 장치(111)를 선택할 수 있다.
- 캐시 엔진(100)은 예를 들면, 응답의 언어를 결정하는 것(영어 또는 불어로 페이지를 나타내는 것), 지역 정보를 결정하는 것(광고, 뉴스 또는 날씨와 같은)과 같이 클라이언트 장치(111)에 대한 정보에 응하여 서버 장치(111)에서 내용을 선택할 수 있다. 보다 바람직한 실시예에서, 광고와 같은 지역 정보는 지역 클라이언트 장치(111)에 공급되는 페이지로의 삽입에 대한 광고를 공급하는 지역 서버 장치(111)로부터 검색될 수 있다.
캐시
도 2는 캐시에 저장된 네트워크 오브젝트 세트에 대한 저장 블록을 유지하기 위한 데이타 구조의 블록도를 도시한다.
블록(200) 각각은 캐시 엔진(100)에 의해 사용되는 것이 아니라 클라이언트 장치(111)를 위해 유지되는 정보, 즉, 데이타 또는 제어 정보, 즉, 캐시 엔진(100)에 의해 사용되고 클라이언트 장치(111)에 의해 사용되지 않는 정보 중 어느 하나를 포함하는 데이타 블록(200)을 포함한다.
블록(200)은 오브젝트(210) 세트로 체계화되는데, 각각의 오브젝트는 오브젝트 기술어(object descriptor:211), 데이타 블록 세트(200) 및 오브젝트 기술어(211)로부터 데이타 블록(200)을 나타내는 블록 포인터 세트(212)를 포함한다. 오브젝트 기술어(211)는 분리된 제어 블록(200)을 포함한다. 블록 포인터(212)가 단일의 제어 블록(200) 또는 다른 타입의 상대적인 큰 오브젝트(210)에 적합하지 않은 경우, 오브젝트 기술어(211)는 간접 블록 세트(216)를 참조할 수 있다. 간접 블록(216) 각각은 하위의 간접 블록(216) 또는 데이타 블록(200)을 참조한다. 각각의 간접 블록(216)은 분리된 제어 블록(200)을 포함한다. 상대적으로 작은 오브젝트(210)는 간접 블록(216)을 요구하지 않는다.
캐시(102)는 블록(200) 세트를 포함하며, 각 블록은 보다 바람직한 실시예에서 4096 바이트를 포함하며, 메모리(103) 또는 대용량 저장장치(102)내에 저장될 수 있다. 다른 실시예에서, 블록(200) 각각은 4096 바이트 이외의 사이즈를 포함하고, 이용가능한 메모리(103) 또는 대용량 저장장치(104)에 응답할 수 있다.
블록 포인터(212)는 각각 단일 32 비트 워드를 포함하고 물리적 디스크 블록 어드레스와 같은 대용량 저장장치(104)에 관해 블록(200)의 위치를 나타내는 포인터 값(215)을 포함한다.
다른 실시예에서, 블록 포인터(212) 각각은 참조 블록(200)이 메모리(103) 또는 대용량 저장장치(104)내에 저장되는 것을 나타내는 제1 비트(213), 참조 블록(200)이 제어 블록(200)(제어 정보를 포함하는)인지 또는 데이타 블록(200)(네트워크 오브젝트(114)에 대한 데이타를 포함하는) 인지를 나타내는 제2 비트(214) 를 포함하고, 포인터 값(215)은 블록(200)의 위치를 나타내는 30 비트 값을 포함한다. 이러한 다른 실시예에서, 블록(200)이 메모리(103)내에 저장될 때, 포인터 값(215)은 메모리(103)내에 바이트 어드레스를 나타낸다. 블록이 대용량 저장장치(104)내에 저장될 때, 포인터 값(215)은 대용량 저장장치(104)에 대한 물리적 디스크 블록 어드레스를 나타낸다.
보다 바람직한 실시예에서, 오브젝트(210)는 루트 오브젝트(220)에 의해 각각 참조되며, 대용량 저장장치(104)의 각 디스크 드라이브상의 복수의(바람직하게는 2)의 루트 블록의 복사체내에 여분으로 유지된다. 보다 바람직한 실시예에서, 대용량 저장장치(104)의 각 디스크 드라이브에 대한 하나의 루트 오브젝트(220)가 있다. 따라서, 대용량 저장장치(104)의 각 디스크 드라이브는 분리된 루트 오브젝트(210)를 가지며, 루트 블록(221)의 두개의 복사체를 이용하여 유지된다. 각 디스크 드라이브의 루트 오브젝트(220)는 그 디스크 드라이브에 대한 각각의 현재의 오브젝트(210)를 참조한다.
보다 바람직한 실시예에서, 루트 블록(221)의 하나의 복사체는 대용량 저장장치(104)의 각 디스크 드라이브의 물리적 디스크 블록(2, 3) 각각내에 유지된다. 그 디스크 드라이브에 대한 루트 블록(221)이 대용량 저장장치(104)에 기입될 때, 물리적 디스크 블록(2)에 처음 기입되고, 이어서 물리적 디스크 블록(3)에 동일하게 기입된다. 캐시 엔진(100)이 시작 또는 재시작될 때, 루트 블록(221)은 물리적 디스크 블록(2)으로부터 판독된다. 이러한 판독 동작이 성공적이면, 물리적 디스크 블록(3)으로 동일하게 기입된다. 그러나, 이러한 판독 동작이 비성공적이면, 루트 블록(221)은 물리적 디스크 블록(3)으로부터 대신 판독되며, 물리적 디스크 블록(2)에 동일하게 재기입된다.
보다 바람직한 실시예에서, 캐시 엔진(100)은 대용량 저장장치(104)의 각 디스크 드라이브상에 여분으로 소정의 시스템 오브젝트(210)를 저장하여, 디스크 드라이브의 임의의 서브세트의 손실이 유용한 캐시의 양을 감소시킨다는 의미에서 캐시(201)를 홀로그래픽으로 유지하도록 한다. 따라서, 그러한 각각의 시스템 오브젝트(210)는 그 디스크 드라이브에 대해 루트 오브젝트(220)에 의해 참조되며 그 오브젝트 기술어(211)의 두개의 복사체를 사용하여 유지된다. 여분으로 유지되는 이러한 시스템 오브젝트(210)는 루트 오브젝트(220), 블록맵 오브젝트(210), 및 해시 테이블(350: 도 3)을 포함하며, 수집된 통계, 문서화 및 프로그램 코드를 위한 오브젝트(210)와 같은 다른 시스템 오브젝트도 포함한다.
블록(200)의 서브세트는 메모리(103)내에 유지되어, 대용량 저장장치(104)용의 캐시로서 메모리(103)를 사용하도록 한다(단지 메모리(103)와 대용량 저장장치(104)가 네트워크 오브젝트(114)에 대한 캐시(102)로서 집합적으로 기능한다). 메모리(103)내에 유지된 블록(200)은 블록핸들세트(230)(a set of block handles)에 의해 참조되며, 메모리(103)내에 유지된다.
각각의 블록핸들(230)은 포워드 핸들 포인터(232), 백워드 핸들 포인터(233), 참조 카운터(234), 블록 어드레스(235), 버퍼 포인터(236) 및 플래그 세트(237)를 포함한다.
포워드 핸들 포인터(232) 및 백워드 핸들 포인터(233)는 블록 핸들(230)의 이중 링크된 리스트내에서 다른 블록 핸들(230)을 참조한다.
참조 카운터(234)는 캐시 엔진(100)의 처리에 의해 블록(200)의 참조 카운트를 유지한다. 참조 카운터(234)는 블록(200)에 대한 블록 핸들(230)이 캐시 엔진(100)에 대한 처리에 의해 사용되거나 해제되었을 때(claimed or released) 업데이트된다. 참조 카운터(234)가 0에 도달했을 때 블록(200)에 대한 참조가 없고,다음 기입 에피소드내에서 변경되었다면, 디스크로 기입된 후에 이용가능한 블록(200)의 프리 리스트(free list)상에 위치한다.
블록 어드레스(235)는 블록 포인터(212)와 동일한 포맷을 가진다. 버퍼 포인터(236)는 블록(200)에 사용되는 버퍼를 참조한다. 플래그(237)는 블록(200)에 대한 부가 정보를 기록한다.
한 실시예에서, 블록 핸들(230)은 2Q 포인터(238) 세트와 2Q 참조 카운터(239) 세트를 사용하고, 테오도어 존슨과 데니스 샤샤에 의한 "2Q: 낮은 오버헤드와 높은 성능의 버퍼 운영 교체 알고리즘"내에 기술된 바와 같고 본 발명에 참조로 병합되는 "2Q" 기법을 사용하여 연결된다.
네트워크 오브젝트가 캐시에 저장되는 방법
도 3은 네트워크 오브젝트를 캐시에 저장하기 위한 데이타 구조의 블록도를 도시한다.
캐시 엔진(100)은 네트워크(110)로부터 프로토콜 요청을 수신한다. 보다 바람직한 실시예에서, 각 프로토콜 요청은 HTTP 프로토콜(또는 SHTTP와 같은 변형)을 사용하며, 각 HTTP 요청은 네트워크(110)에 네트워크 오브젝트(114)를 식별하는 URL(uniform resource locator:310)을 포함한다. 보다 바람직한 실시예에서, 각 URL(310)은 네트워크 오브젝트(114)에 대한 서버 장치(111)와 그 서버 장치(111)상의 네트워크 오브젝트(114)의 위치를 식별한다.
다른 실시예에서, 캐시 엔진(100)은 HTTP 또는 그 변형이외에 다른 프로트콜을 사용할 수 있다. 그리고, 캐시 엔진(100)은 URL(310) 이외에 네트워크 오브젝트(114)에 대한 하나 이상의 다른 식별자에 대해 응답할 수 있다. 따라서, 여기에 사용된 바와 같이, "URL"은 특정 네트워크 오브젝트(114)를 식별하거나 식별하는데 도움을 줄 수 있는 식별자의 타입을 일반적으로 칭한다.
URL(300)은 네트워크 오브젝트(114)가 위치한 서버 장치(111)를 식별하는 호스트 식별자, 네트워크 오브젝트(114)가 서버 장치(111)에 위치하는 위치를 식별하는 다큐먼트 식별자를 포함한다. 보다 바람직한 실시예에서, 호스트 식별자는 서버 장치(111)에 대한 문자열 이름을 포함하는데, 이것은 IP(인터넷 프로토콜) 어드레스로 해결될 수 있다. 그러나, 다른 실시예에서, 호스트 식별자는 서버 장치(111)에 대한 문자열 이름보다 서버 장치(111)용 IP 어드레스를 포함할 수 있다.
캐시 엔진(100)은 캐시(102)내의 해시 테이블(350)에 해시 버킷(hash bucket:340)의 인덱스를 다는(index) 해시 서명(330:hash signature)과 URL(310)을 연관시키는 해시 함수(320:hash function)를 포함한다. 보다 바람직한 실시예에서, 해시 테이블(350)은 해시 테이블 세트(350)를 포함한다. 각 디스크 드라이브마다 하나씩, 각각이 대용량 저장장치(104)의 디스크 드라이브상의 캐시(102)에 저장된 네트워크 오브젝트(114)를 참조한다. 각 해시 테이블(350)은 그 오브젝트 기술어(211)를 가진다. 집합적으로 해시 테이블(350)은 단일 논리 해시 테이블을 형성한다.
보다 바람직한 실시예에서, 해시 서명(330)은 URL(310)에 응하여 결정되며 모든 가능한 32 비트의 부호없는 정수값의 범위에 대해 상대적으로 균일하게 분배되는 32비트의 부호없는 정수값을 포함한다. 보다 바람직한 실시예에서, URL(310)은 부호없는 정수값이며, URL(310)에 응하여 결정되며 모든 가능한 64비트 부호없는 정수값의 범위에 대해 상대적으로 균일하게 분해된 것으로 예측되는 64 비트 URL 서명과 관련된다. URL(310)을 비교할 때, URL 서명은 먼저 비교되며 동일한 경우에만 URL(310) 그 자체가 비교된다. 보다 바람직한 실시예에서, URL(310)은 예를 들면, 모든 알파벳 문자를 단일 형태(소문자 또는 대문자)로 변경하는 것과 같이, 해시 서명(330) 또는 URL 서명을 결정하기에 앞서 규범형(canonical form)으로 변경된다. 보다 바람직한 실시예에서, 각 논-널 해시 버킷(340:non-null hash bucket)은 하나의 데이타 블록(200)을 포함한다.
해시 테이블(350)은 URL(310)을 해시 테이블(350)내의 해시 버킷(340)과 직접 연관시키기 때문에, 캐시(102)내의 네트워크 오브젝트(114)의 저장은 계층적(hierarchical)이 아니다. 각 네트워크 오브젝트(114)는 약 두개의 디스크 판독 액세스 시간보다 작은 일정 시간의 순서내에서 참조되며 캐시(102)로부터 액세스될 수 있다. 게다가, 캐시(102)내에 네트워크 오브젝트(114)가 단일 이름을 가져야만 한다는 특별한 요구사항이 없다; 네트워크 오브젝트(114)가 동일한 이름을 가질 때(예를 들면, 동일한 네트워크 오브젝트(114)의 구 및 신 버젼일 때), 해시 테이블(350)은 양자를 위해 동일한 해시 버킷(340)을 단순히 지적한다.
동일한 네트워크 오브젝트(114)의 신, 구 버젼이 있을 때,캐시 엔진(100)은 네트워크 오브젝트(114)의 새로운 버젼에만 URL(310)에 의해 새 참조로 한다. 네트워크 오브젝트(114)가 캐시(102)내에 저장된 때 네트워크 오브젝트(114)의 구 버젼에 이미 액세스하는 클라이언트 장치(111)는 네트워크 오브젝트(114)의 구 버젼에 계속 액세스할 것이다. 그러나, 네트워크 오브젝트(114)로의 계속적인 액세스는 동일한 클라이언트 장치(111)에 의할지라도, URL(310)을 사용하여 캐시 엔진(100)에 의해 네트워크 오브젝트(114)의 새로운 버젼으로 해결될 것이다. 네트워크 오브젝트(114)의 구 버젼은 모든 클라이언트 장치(111)가 그것을 사용하여 행해질 때 가능한한 빨리 삭제된다.
캐시(102)는 (1) 네트워크 오브젝트(114)의 저장에 대해 캐시(102)에서의 이름 공간, (2) 네트워크 오브젝트(114)의 이름을 만들거나 이름을 바꾸는 능력, (3) 어느 때나 캐시(102)로부터 네트워크가 제거되는지 여부, 및, (4) 네트워크 오브젝트(114)가 캐시(102)내에 저장되는지 여부를 포함하여, 클라이언트 장치(111)가 캐시(102)내의 네트워크 오브젝트(114)의 저장에 대한 제어를 갖지 않는다는 점에서 파일 시스템과 다르다.
보다 바람직한 실시예에서, 캐시 엔진(100)은 메모리(103)와 대용량 저장장치(104: 보다 바람직하게, 복수의 자기 디스크 드라이브)를 사용하여 네트워크 오브젝트(114)를 캐시에 저장하도록 함으로써, 클라이언트 장치(111)에 의해 가장 많이 요청되는 네트워크 오브젝트(114)가 캐시(102)내에 유지되도록 한다. 그러나, 다른 실시예에서, 캐시 엔진(100)은 항상 또는 낮동안의 선택된 시간 및 선택된 날에 클라이언트 장치(111)에 의해 가장 많이 사용될 가능성이 높은 네트워크 오브젝트를 유지하며 또한 선택된 운영상의 요구사항, 예를 들면, 네트워크 오브젝트(114)의 소정 클래스를 더 선호하거나 그러한 클래스를 배척하는 것과 같은 요구사항을 시행한다.
캐시 엔진(100)은 해시 함수(320)와 해시 테이블(350)을 URL(310)과 관련된(따라서 네트워크 오브젝트(114)와 관련된) 오브젝트(210)[그리고 하나 이상의 데이타 블록(200)]를 식별하기 위해 사용한다. 이러한 캐시 엔진(100)은 캐시(102)로부터 HTTP 요청에 의해 요청되는 네트워크 오브젝트(114)를 검색하고 클라이언트 장치(111)로 네트워크 오브젝트(114)를 전달하도록 오브젝트(210)상에서 동작한다. 캐시 엔진(100)은 메모리(103)와 대용량 저장장치(104)를 사용하여 캐시(102)를 유지하여, 오브젝트(210)가 캐시내에 있는지 여부, 및 캐시(102)내에 있다면, 오브젝트(210)는 메모리(103)내에 있는지 또는 대용량 저장장치(104)에 있는지 여부가 클라이언트 장치(111)에 명백하도록 한다(메모리(103) 또는 대용량 저장장치(104)로부터 오브젝트(210)를 검색하는 때의 서로 다른 시간 지연을 가능한 제외).
"디스크로의 기입" 부분에서 설명되는 바와 같이, 캐시 엔진(100)은 때때로 메모리(103)로부터 대용량 저장장치(104)에 블록(200)(그리고 그러한 블록(200)을 포함하는 오브젝트(210))을 기입하여, 더욱 자주 액세스되는 메모리(103)에서 그러한 블록(200)을 유지하도록 한다.
이하에서 설명되는 바와 같이, 메모리(103)로부터 대용량 저장장치(104)로 블록(200)을 기입할 때, 캐시 엔진(100)은 블록(200)이 대용량 저장장치(104)상으로 기입되는 장소(대용량 저장장치에 대한 디스크 드라이브와 그 디스크 드라이브상의 위치를 결정하는 것과 같은), 및 블록(200)이 대용량 저장장치(104)로 기입되는 때(예를 들면, 대용량 저장장치(104)에 데이타를 기입하는데 잇점이 있는 때를 결정하는 것)를 제어한다. 캐시 엔진(100)은 블록(200)이 디스크로 기입되는 시간과 위치를 최적화하도록 시도하여, 디스크에 기입하고 디스크로부터 판독하는데 요구되는 시간과 공간을 최소화한다.
해시 테이블(350)은 시스템 오브젝트(210)이고 다른 시스템 오브젝트(210)와 유사하며, 오브젝트 기술어(211), 0 이상의 간접 블록(216), 및 0 이상의 데이타 블록(200)을 포함한다. 해시 테이블(350)은 상대적으로 자주 쓰이는 것이 예상되므로, 그 간접 블록(216)은 상대적으로 큰 해시 테이블(350)에 대해, 데이타 블록(200)의 일부가 대용량 저장장치(104)에서 유지될 지라도 메모리(103)에 모두 유지될 것이 예상된다. 보다 바람직한 실시예에서, 해시 테이블(350)은 대용량 저장장치(104)용 복수의 디스크 드라이브에 대해 분배되며, 각 디스크 드라이브에 대한 해시 테이블(350)의 일부는 디스크 드라이브에 대한 루트 오브젝트(220)에서 참조된다.
각 해시 서명(330)은 해시 테이블(350)내의 해시 서명(330)과 해시 버킷(340)의 수의 모듈로(modulo)를 사용하여 해시 테이블(350)에서 인덱스를 단다. 각 해시 버킷(340)은 하나의 블록(200)을 포함한다. 각 해시 버킷(340)은 0 이상의 해시 엔트리(360)를 포함한다. 각 해시 엔트리(360)는 해시 엔트리(360)(그 오브젝트(210)용 오브젝트 기술어(211)에 대한 포인터를 포함한다)에서의 오브젝트(210)에 대한 참조를 포함한다.
해시 버킷(340)은 제2 해시 테이블을 포함하는데, 상기 테이블은 복수의 제2 해시 테이블 엔트리의 체인(예를 들면, 32 체인)을 갖는다. 상기 해시 서명(330)은 체인중 하나를 선택하여 URL(310)과 관련된 해시 엔트리(360)를 서치하도록 사용된다.
다른 실시예에서, 해시 엔트리(360)는 해시 버킷(340)내에서 널 엔트리가 가능하면 점재된 상태에서(interspersed) 제2 해시값에 의한 오더 리스트(ordered list)로 유지된다(관련 네트워크 오브젝트(114)는 삭제되거나 그렇치 않으면 해시 테이블(350)로부터 제거된다); 제2 해시값은 예를 들면, 해시 서명(330)과 2**32와 같이 선택된 값의 모듈로를 계산함으로써 상기 해시 서명(330)에 응하여 결정된다. 동일한 제2 해시값을 갖는 많은 해시 엔트리(360)가 있다면, 캐시 엔진(100)은 관련된 해시 서명(330)을 갖는 URL(310)과 관련된 정확한 네트워크 오브젝트(114)의 URL(310)에 대한 많은 해시 엔트리(360)중 각각 하나와 관련된 오브젝트 기술어(211)를 검사한다.
보다 바람직한 실시예에서, 각 해시 버킷(340)은 해시 엔트리(360)가 완전히 균일하게 분배되었다면 예상되는 해시 엔트리(360)의 수의 적어도 1.5 내지 2배를 유지하기에 충분한 정도의 선택된 크기를 가진다(이러한 선택된 크기는 보다 바람직하게 정확히 하나의 데이타 블록(200)이다). 해시 엔트리(360)가 가득 찬 해시 버킷(340)에 할당되면, 관련된 해시 엔트리(360)를 따라 해시 버킷(340)에 이미 할당된 네트워크 오브젝트(114) 중 하나는 새로운 해시 엔트리(360)를 위해 자리를 비우도록 해시 버킷(340)과 캐시(102)로부터 삭제된다.
보다 바람직한 실시예에서, 어떤 오브젝트(210)가 삭제가능한지만을 선택하는 복수의 서로 다른 동작의 폴리시(policy)가 있을 수 있다.
다수의 디스크 드라이브를 갖는 대용량 저장장치
캐시 엔진(100)은 대용량 저장장치(104)상에 현재 또는 최근에 존재하는 각 디스크 드라이브에 대한 DSD(디스크 세트 기술어:disk set descriptor) 오브젝트(210)를 유지하며, 상기 대용량 저장장치(104)는 그 디스크 드라이브를 나타내는 데이타 구조를 포함한다. 이러한 캐시 엔진(100)은 DS(디스크 세트) 오브젝트(210)를 또한 유지하며, 모든 DSD 오브젝트(210)를 참조하며, 대용량 저장장치(104)에 대한 하나 이상의 디스크 드라이브에 여분으로 유지한다. 따라서, DS 오브젝트(210)는 DSD 오브젝트(210)내의 디스크 드라이브상에 각 디스크 드라이브 정보가 유지되면서 복수의 디스크 드라이브(보다 바람직하게는 전부)에 대한 대용량 저장장치(104)에 대해 여분으로 유지된다.
각 DSD 오브젝트(210)는 적어도 다음 정보를 포함한다: (1) 디스크 드라이브 수; (2) 모든 디스크 드라이브의 집합적인 총 사이즈; (3) 각 디스크 드라이브용, 디스크 드라이브의 개별 사이즈, 상기 디스크 드라이브에 대한 식별자, 및 모든 디스크 드라이브의 배열에서의 인덱스, 및 (4) 각 디스크 드라이브용, 그 디스크 드라이브에서 유지되는 해시 서명(330)의 범위. 또한, 각 디스크 드라이브에 유지되는 해시 서명의 범위는 특정 디스크 드라이브에 대해 각각의 해시 서명(330)을 맵핑하는 분리된 시스템 오브젝트(210)내에 유지된다. 보다 바람직한 실시예에서, 사이즈는 1 메가바이트와 같이 선택된 값의 몇배로 표현된다.
해시 엔트리(360)는 각 디스크 드라이브의 사이즈에 비례하여 복수의 디스크 드라이브에 걸쳐 분배되며, 상기 사이즈는 해시 엔트리(360)의 정수가 되도록 반올림한다(rounded).
디스크 드라이브가 부가, 제거 또는 교체될 때, 캐시 엔진(100)은 관련 DSD 오브젝트(210)를 생성 또는 변경하고 DS 오브젝트(210)를 업데이트한다. 이러한 동작은 데이타 블록(200)을 업데이트하는 방식으로 진행된다; 따라서, DS 오브젝트(201) 또는 DSD 오브젝트(210) 중 하나를 참조하는 임의의 제어 블록(200)은 또한 업데이트되고, 이러한 업데이트는 다음 기입 에피소드를 갖는 대용량 저장장치(104)에 대해 원자적으로 수행된다(DS 오브젝트(210)에 대한 업데이트는 한번씩 각 디스크 드라이브에 대해 원자적으로 수행된다). 따라서, 대용량 저장장치(104)는 다이나믹하게 업데이트되며, 디스크 드라이브의 변화하는 식별정보 또는 수를 포함하는 반면, 캐시 엔진(100)은 계속 동작하며, 캐시 엔진(100)에 대한 유일한 효과는 캐시(102)에 대해 가용한 대용량 저장장치(104)의 양의 개념을 변화시키는 것이다.
디스크로의 기입
캐시 엔진(100)은 캐시(102)로 기입된 오브젝트(210)(캐시(102)내에 이미 존재하는 구 오브젝트(210)의 새로운 버젼인 오브젝트(210)를 포함하는)가 메모리(103)로 우선 기입되고, 대용량 저장장치(104)로는 이후에만 기입되는 "지연된 기입" 동작을 구현한다. 지연된 기입 기법을 사용하는 파일 시스템과 달리, 비휘발성 RAM 또는 UPS(인터럽트되지 않는 전원:uninterruptable power supply) 및 관련된 순서에 따른 셧다운 절차(orderly shutdown procedure)를 제공할 필요가 없는데, 이는 캐시 엔진(100)이 캐시(102)내에 네트워크 오브젝트(114)의 지속성을 보장하지 않기 때문이다. 예를 들면, 특정 네트워크 오브젝트(114)가 캐시(102)로부터 손실되면, 그 네트워크 오브젝트(114)는 관련 서버 장치(111)로부터 통상 재획득될 수 있다.
그러나, 지연된 기입 기법은 캐시(102)의 일관성을 유지하도록 동작하며, 제어 블록(200) 또는 데이타 블록(200)중 어느 하나를 중복기입하는 것이 아니다(루트 블록(221) 제외). 대신, 변경된 블록(200)은 원래 블록(200)을 대신하여 대용량 저장장치(104)로 기입되며, 원래 블록(200)은 "기입 에피소드"라고 불리는 원자 동작에서 모두 비게 된다. 기입 에피소드가 인터럽트되거나 제대로 동작하지 않으면, 전체적인 기입 에피소드는 원자적으로 동작하지 않고 원래 블록(200)은 유효하게 유지된다.
변경된 데이타 블록(200)은 원래 데이타 블록(200)에 대한 하부 데이타가 변경될 때(또는 새로운 네트워크 오브젝트(114)와 같은 새로운 하부 데이타가 새로운 데이타 블록(200)에 저장될 때) 생성된다. 변경된 제어 블록(200)은 원래 제어 블록(200)에 의해 참조되는 원래 블록(200) 중 하나[원래 데이타 블록(200) 또는 원래 제어블록(200)]가 변경된 블록(200)[변경된 데이타 블록(200), 새로운 데이타 블록(200) 또는 변경된 제어 블록(200)]으로 교체될 때 생성된다; 변경된 제어 블록(200)은 원래 블록(200)이 아닌 변경된 블록(200)을 참조한다.
각 기입 에피소드는 기입 블록(200)의 대용량 저장장치(104)로의 동작과 대용량 저장장치(104)로부터의 그러한 블록(200)의 판독 이후 동작 모두를 최적화하도록 구성된다. 다음 기법은 판독 및 기입의 최적화 목적을 달성하는데 사용된다:
- 기입되는 변경된 블록(200)이 대용량 저장장치(104)에 사용되는 디스크 드라이브중 하나의 순차적인 트랙으로, 가능할 때 수집되고 기입된다;
- 간접 블록(216)이 참조하는 데이타 블록(200) 이전에 근접한 저장 블록에 기입되어, 가능할 때는 언제나 동일한 판독 동작에서 참조된 데이타 블록(200)을 판독할 수 있도록 한다.
- 순차적으로 관련된 데이타 블록(200)은 대용량 저장장치(104)용으로 사용되는 디스크 드라이브중 하나상에 순차적인 빈 저장 블록으로 기입되어(가능하면, 이웃한 비어있는 저장 블록), 관련된 데이타 블록(200)을 가능하면 언제나 동일한 판독동작내에서 판독하는 것을 가능하도록 한다.
- 기입된 블록(200)[제어 블록(200) 또는 데이타 블록(200)]은 관련 오브젝트(210)와 함께 수집되고 상대적인 어드레스에 의해 각 오브젝트(210)내에서 명령되어, 가능하면 언제나 동일한 판독 동작에서 특정 오브젝트(210)용 블록(200)의 판독을 가능하게 한다.
도 4는 원래 및 변경된 블록 세트의 블록도를 도시한다.
도 5는 단일 디스크 드라이브로 변경된 블록에 원자기입하는 방법의 플로우도를 도시한다.
블록(200)의 트리 구조(400)(도 4)는 원래 제어 블록(200)과 원래 데이타 블록(200)을 포함하며, 이들은 대용량 저장장치(104)로 이미 기입되어 있으며 루트 오브젝트(220)에 의해 참조된다. 원래 블록(200)의 일부 또는 전부는 사용시에 메모리(103)내에서 유지될 수 있다.
방법(500)(도 5)은 주요 플로우 지점의 세트와 캐시 엔진(100)에 의해 실행된 단계를 포함한다.
플로우 지점(510)에서, 변경된 데이타 블록(200)과 새로운 데이타 블록(200)은 메모리(103)에서 유지되며 디스크에 아직 기입되어 있지 않다.
어떠한 데이타 블록(200)도 대신에 재기입되지 않으므로, 변경된 데이타 블록(200)을 참조하는 각 원래의 제어 블록(200)[그리고 변경된 제어 블록(200)을 참조하는 각 원래의 제어 블록(200)]은 트리 구조(400)를 거쳐 루트 오브젝트(200)까지 변경된 제어 블록(200)으로 교체되어야만 한다.
단계(521)에서, 각 변경된 데이타 블록(200)에 대하여, 대용량 저장장치(104)의 비어있는 저장 블록은 변경된 데이타 블록(200)을 리코드하도록 할당된다. 블록맵 오브젝트(210)는 변경된 데이타 블록(200)에 대한 저장 블록의 할당을 반영하고 원래 데이타 블록(200)용 저장 블록을 비어 있도록 변경된다.
블록맵 오브젝트(210)는 대용량 저장장치(104)에 대한 어떤 저장 블록이 할당되며 그 안에 저장된 데이타를 갖는 지 및 어떤 저장 블록이 비어있고 사용가능한 지에 관해 정보를 유지한다. 캐시 엔진(100)은 비어있는 저장블록에 대한 블록맵 오브젝트(210)를 서치하고, 블록맵 오브젝트(210)로 기입 포인터(250)를 유지하여, 라운드 로빈 방식(round-robbin manner)으로 서치를 수행하도록 한다. 따라서, 기입 포인터(250)가 블록맵 오브젝트(210)의 종단을 지나 진행하면, 블록맵 오브젝트(210)의 시작으로 돌아온다. 기입 포인터(250)는 루트 오브젝트(220)에 유지되어, 라운드 로빈 방식의 서치는 캐시(102)의 중단(failure) 및 재시작 후일지라도 계속된다.
중단의 경우에서 캐시(102)의 지속성을 유지하기 위해, 비어있는 저장 블록(200)이 비간접적일지라도 루트 오브젝트(220)에 의해 여전히 참조된다면 비어있다고 할 수 없다(따라서 사용되는 것이다). 따라서, 루트 오브젝트(220)의 원자 처리(atomic commitment)이전에 비어있는 이러한 블록(200)은 루트 오브젝트(220)가 원자적으로 디스크에 기입될 때까지 비어있다고 여겨지지 않는다.
단계(522)에서 이러한 기입 에피소드에서 변경된 원래 블록(200)을 참조하는 각각의 원래 제어 블록(200)에 대해, 변경된 제어 블록(200)이 발생된다. 단계(521)과 같은 방식에서, 대용량 저장장치(104)상의 비어있는 저장 블록은 변경된 제어 블록(200)을 기록하기 위해 할당된다. 단계(521)와 같은 방식에서, 블록맵 오브젝트(210)는 변경된 제어 블록(200)에 대한 저장 블록의 할당을 반영하고 원래 제어 블록(200)에 대한 저장 블록을 비어있게 하도록 변경된다.
단계(522)는 루트 오브젝트(200)까지 트리 구조(400)의 각 레벨에 대해 반복된다.
단계(523)에서, 단계(521)과 단계(522)의 동작은 변경된 블록맵 오브젝트(200)의 블록에 대해 반복된다.
단계(524)에서, 변경된 데이타 블록(200)과 변경된 제어 블록(200:블록맵 오브젝트(210)를 포함)은 대용량 저장장치(104)에 대한 할당된 저장 블록으로 기입된다.
단계(525)에서, 루트 오브젝트(220)는 대용량 저장장치(104)의 적절한 장소에 재기입된다.
플로우 지점(530)에서, 루트 오브젝트(220)는 적절한 위치에 재기입되며, 트리 구조(400)에 대한 모든 변화는 원자적으로 처리된다; 변경된 블록(200)은 트리 구조(400)의 일부가 되고 변경된 블록(200)을 교체하는 원래 블록(200)은 비어 있게 되어 재사용할 수 있다. 변경된 블록맵 오브젝트(210)는 루트 오브젝트(220)가 적절한 위치에 재기입될 때까지 원자적으로 처리되지 않는다. 그래서, 할당되거나 비어있는 것으로 지정된 저장 블록은 기입 에피소드가 플로우 지점(530)에 원자적으로 처리될 때까지 할당 또는 비어있는 것으로 지정되지 않는다.
변경 블록(200)이 실제로 저장 블록에 할당되고 대용량 저장장치(104)의 저장 블록에 기입될 때, 다음과 같은 방식으로 기입된다:
- 트리 구조(400)는 깊이 우선의 톱-다운 방식(depth first top-down manner)으로 진행되어, 변경된 제어 블록(200)이 참조하는 변경된 데이타 블록(200) 이전에 저장 블록의 시퀀스에 상기 변경된 제어 블록(200)이 기입되도록 보장한다.
- 각 변경 제어 블록(200)에서, 참조된 변경 데이타 블록(200)은 깊이 우선의 톱 다운 방식으로 진행되어, 참조된 변경 데이타 블록(200)이 그들을 참조하는 변경된 제어 블록(200) 이후에 저장 블록의 시퀀스에 함께 군을 이루도록 보장한다.
이러한 기법은 제어 블록(200)을 판독할 때, 그들이 참조하는 데이타 블록이 가능하면 언제나 미리 판독되어, 제어 블록(200)과 데이타 블록(200)을 대용량 저장장치(104)로부터 판독하는데 요구되는 동작의 수를 감소시킨다.
캐시 엔진(100)은 기입 에피소드를 수행할 때를 메모리(103)의 조건(메모리(103)내에 변경된 블록(200)의 수를 포함하여), 대용량 저장장치(104)의 조건(대용량 저장장치(104)에 유용한 비어있는 저장 블록의 수를 포함)과 캐시(102)의 조건(캐시(102)내에 네트워크 오브젝트(114)의 히트율 포함)에 응하여 결정한다.
보다 바람직한 실시예에서, 방법(500)을 사용한 기입 에피소드는 다음 조건중 어느 하나에 따라 수행된다.
- 소정 시간(10초정도)이 이전 기입 에피소드이후로 경과했을 때; 또는,
- 변경된 블록이 너무 많은 메모리의 일부를 포함할 때;
방법(500)을 사용한 기입 에피소드는 다음 조건중 어느 하나에 따라 수행될 수 있다:
- 메모리(103)에서 변경된 블록(200)의 수는 블록맵 오브젝트(210)에 대해 필요한 저장 블록의 수를 뺀 대용량 저장장치(104)에서의 비어있는 가용 저장 블록의 수와 비슷하다.
- 메모리(103)에서 변경 블록(200)의 비는 캐시(102)에서 네트워크 오브젝트(114)의 미스율(miss rate)과 비슷하다.
그러나, 대용량 저장장치(104)에서의 비어있는 블록(200)의 수는 기입 에피소드 동안에 기입될 블록(200)의 수보다 훨씬 크다.
각 오브젝트(210)는 관련된 "액세스 시간"을 가지며, 이는 그 오브젝트(210)가 마지막으로 기입되거나 판독된 때를 나타낸다. 그러나, 오브젝트(210)가 판독될 때마다 각 오브젝트(210)에 대한 디스크상의 액세스 시간을 업데이트하는 것은 바람직하지 못한데, 이는 임의의 오브젝트(210)가 판독될 때마다 변경된 제어 블록(200)의 세트(다음 기입 에피소드동안 디스크에 기입되어야만 하는)를 발생시키기 때문이다.
따라서, 판독된 오브젝트(210)에 대한 액세스 시간과 그 오브젝트(210)에 대한 액세스의 수를 포함하는 오브젝트(210)에 대한 일시적 정보를 기록하는 일시적 정보 테이블(volatile information table)이 유지된다. 오브젝트(210)가 판독될 때, 그 액세스 시간은 오브젝트(210) 그 자체에 대한 오브젝트 기술어(211) 보다 일시적 정보 테이블에서만 업데이트된다. 일시적 정보 테이블은 메모리(103)내에 유지되며 디스크로 기입되지 않는다.
보다 바람직한 실시예에서, 네트워크 오브젝트(114)는 변경된 데이타 블록(200)을 포함하는 네트워크 오브젝트(114)에 대한 것일지라도 상기 방법(500)을 사용한 기입 에피소드가 수행되는 동안 계속 판독될 수 있는데, 이는 대용량 저장장치(104)에 실제 성공적으로 기입되는 지 여부와 무관하게 기입 에피소드가 수행되는 동안 변경된 데이타 블록(200)이 메모리(103)내에서 계속 유지되기 때문이다.
캐시로부터의 오브젝트의 제거
도 6은 대용량 저장장치에 대한 포인터 세트와 영역의 블록도를 도시한다.
대용량 저장장치(104)의 각 디스크 드라이브에 대한 저장 블록 세트는 0에서 최대값 Nmax를 갖는 원형 맵(600)에 의해 나타난다. 도면에서, 인덱스는 시계 반대방향으로 증가하면서, 최대값 Nmax의 모듈로로 각 디스크 드라이브의 끝부터 시작까지 돌아간다.
각 삭제가능한 오브젝트(210)에 대한 엔트리를 포함하는 DT(delete table) 오브젝트(210)가 유지된다. 해시 테이블(350)에서 해시 버킷(340)중 하나는 매번 액세스되고, 해시 버킷(340)에서 해시 엔트리(350) 중 하나에 의해 참조되고 삭제가능한 것으로 인정되는 각 오브젝트(210)에 대해 DT 오브젝트(210)로 참조로 삽입된다.
다른 실시예에서, 블록맵 오브젝트(210)에서 블록맵 엔트리의 각각에 대해 엔트리를 포함하는 오브젝트맵 오브젝트(210)가 유지된다. 다른 실시예에서, 오브젝트맵 오브젝트(210)의 각 엔트리는 비어 있어 대응 블록(200)이 오브젝트 기술어(211)를 포함하지 않는 것을 나타내거나, 비어있지 않아서 대응 블록(200)이 오브젝트 기술어(211)를 포함하는 것을 나타낸다. 그리고, 대응 오브젝트(210)가 삭제될 수 있는지를 결정하는 정보를 더 포함한다. 오브젝트맵 오브젝트(210)에서 각 비어있지 않은 엔트리는 적어도 히트율, 로드 시간, 값을 살리는 시간 및 해시 테이블(350)에서 인덱스를 다는 해시 서명(350)을 포함한다.
캐시 엔진(100)은 삭제가능한 오브젝트(210)[DT 오브젝트(210)에 의해 참조되는 오브젝트(210)]에 대해 블록맵 오브젝트(210)를 서치하고, 블록맵 오브젝트(210)로 기입 포인터(250)와 유사한 삭제 포인터를 유지하여, 라운드 로빈 방식으로 서치를 수행하도록 한다. 따라서, 기입 포인터(250)와 유사하게, 삭제 포인터(260)는 블록맵 오브젝트(210)의 종단을 지나서 나아가, 블록맵 오브젝트(210)의 시작점으로 돌아온다. 또한, 기입 포인터(250)와 유사하게, 삭제 포인터(260)는 루트 오브젝트(220)로 유지되어, 서치가 캐시(102)의 중단과 재시작후일지라도 라운드 로빈 방식으로 계속된다.
대용량 저장장치(104)에서 각 디스크 드라이브에 대한 기입 포인터(250) 및 삭제 포인터(260)는 각각 맵(600)으로의 인덱스를 포함한다.
보다 바람직한 실시예에서, 삭제 포인터(260)는 기입 포인터(250) 이전에 적어도 선택된 최소한의 길이(d0 601)로 유지되나, 기입 포인터(250)를 지나서 다시 돌아갈 정도로 멀리는 아니어서, 변경된 새 오브젝트(210)를 기입하는 데 사용되는 기입 영역(620) 근방에 있는 삭제가능한 오브젝트(210)를 삭제하기 위해 각 디스크 드라이브의 삭제 영역(610)을 선택하도록 한다. 기입 영역(620)은 적어도 최소 길이(d0 601)에 의해 특정된 사이즈이다. 삭제 영역(610)의 사이즈에 대한 구체적인 요구사항은 없을 지라도, 삭제 영역(610)은 기입 영역(620)의 사이즈의 수배이다(바람직하게는 약 5배). 캐시 엔진(100)은 따라서 거의 모든 디스크로의 기입이 각 디스크 드라이브의 상대적으로 작은 부분에서 발생하는 것을 제공한다. 이로 인해 대용량 저장장치(104)의 빠른 동작을 가능하게 하는데, 이는 대용량 저장장치(104)에 대한 디스크 헤드 세트가 각 기입 에피소드동안 상대적으로 작은 거리만을 이동해야하기 때문이다.
캐시 엔진(100)은 기입 포인터(250)와 삭제 포인터(260) 사이에서 상대적으로 고정된 거리 관계를 유지하도록 시도되기 때문에, 기입 에피소드와 삭제 에피소드는 상대적으로 자주 발생할 것이다. 보다 바람직한 실시예에서, 캐시 엔진(100)은 기입 에피소드와 삭제 에피소드 사이에서 교번하여, 각 삭제 에피소드가 이후의 기입 에피소드(다음의 연속되는 기입 에피소드는 블록맵 오브젝트(210)를 디스크에 기입하여, 블록(200)이 삭제되는 것을 보인다; 그 이후의 기입 에피소드는 새로운 빈 블록(200)을 사용할 수 있다)에 대해 디스크상의 공간을 만들도록 동작하며 각 기입 에피소드는 디스크상에 빈 공간을 소모하고 이후의 삭제 에피소드를 요구하도록 동작한다.
수집 영역(630)은 삭제 영역(610)의 근처에 더 앞서 선택되어, 삭제를 위한 오브젝트(210)를 선택하도록 한다. 수집 영역(630)의 사이즈는 수집 영역(630)으로 진행되는 기입 포인터(250)에 대한 예상 시간내에(몇몇 기입 에피소드를 거쳐야 한다) 거의 모든 해시 엔트리(360)가 캐시 엔진(100)의 정상 동작을 통해 액세스될 수 있도록 선택된다. 따라서, 각 해시 엔트리(360)가 관련 오브젝트(210)가 삭제가능한 것인지 결정하기에 충분한 정보를 포함하기 때문에, 거의 모든 오브젝트(210)는 수입 영역(630)을 통해 이동하는 기입 영역(620)에 필요한 몇몇 기입 에피소드내에서 삭제를 위해 액세스될 것이다.
삭제용으로 액세스되었던 오브젝트(210)는 삭제 리스트에 위치하고, 삭제적합성(eligibility for deletion)에 따라 소팅된다. 보다 바람직한 실시예에서, 오브젝트(210)는 이러한참조 중 하나에 따라 삭제용으로 액세스된다.
- 오브젝트(210)가 HTTP 프로토콜(또는 SHTTP와 같은 그 변형)의 동작으로 인해 캐시 엔진(100)에 의해 삭제용으로 명확하게 선택되면, 오브젝트(210)는 삭제 리스트의 앞부분에 즉시 놓인다.
- 동일한 이름을 갖는 새로운 오브젝트(210)가 생성되면, 구 오브젝트(210)는 그에 대한 모든 참조가 노출되자마자 삭제 리스트의 앞부분에 놓인다(즉, 캐시 엔진(100) 상의 어떠한 처리도 더 이상 구 오브젝트(210)를 참조하지 않는다).
- 오브젝트(210)가 종료되면, 삭제 리스트의 앞 부분에 즉시 위치시킨다.
- 제1 오브젝트(210)가 제2 오브젝트(210)보다 더 오래된 액세스 시간을 가지면, 상기 제1 오브젝트(210)는 제2 오브젝트(210)에 앞서 삭제용으로 더욱 적합하도록 선택되고 따라서 상기 제2 오브젝트(210)의 삭제 리스트로 소팅된다.
앞의 두가지 참조(즉, 만료 또는 오래된 액세스 시간으로 인한)으로 선택되며 삭제 리스트상의 오브젝트(210)의 1/3인 오브젝트(210)의 일부가 삭제용으로 선택된다.
각 기입 에피소드 이후에, 수집 영역(630)은 다음 기입 영역(620)에 예상 사이즈만큼 진행된다. 바람직한 실시예에서, 다음 기입 영역(620)의 예상 사이즈는 지난 몇몇(바람직하게 7) 기입 에피소드에 대한 기입 영역(620)의 사이즈를 평균하여 예측된다. 삭제 영역(610)을 진행하기에 앞서 삭제 리스트상에 있고 삭제를 위해 예정된 이후의 삭제 영역(610)에 있는 오브젝트(210)는 개별적으로 선택되고 다음 삭제 에피소드에서 삭제된다(보다 바람직한 실시예에서, 다음 삭제 에피소드는 기입 에피소드의 종료 직후이다).
보다 바람직한 실시예에서, 대용량 저장장치(104)상의 각 디스크 드라이브에 대한 기입 에피소드와 삭제 에피소드는 독립적이어서, 대용량 저장장치(104) 상의 각 디스크 드라이브에 대한 분리된 삭제 영역(610), 기입 영역(620) 및 수집 영역(630)이 있다.
다른 실시예
바람직한 실시예가 개시되었지만, 많은 다양한 변형이 본 발명의 개념, 범위 및 정신을 유지한 상태에서 가능하며, 이러한 변형은 이 발명의 설명을 숙지한 후에 당업자에게 명백할 것이다.

Claims (1)

  1. 네트워크상의 오브젝트에 대한 시스템에 있어서, 상기 시스템은,
    상기 네트워크에 접속된 수신기; 및,
    대용량 저장장치상의 상기 네트워크로부터 오브젝트를 리코드하도록 동작하는 캐시 엔진;
    을 포함하고,
    상기 캐시 엔진은 상기 오브젝트를 리코드하는 시간을 선택할 수 있고, 상기 오브젝트를 리코드하는 위치를 선택할 수 있고, 상기 대용량 저장장치의 일부의 손실 이후에도 동작을 지속하도록 상기 오브젝트를 홀로그래픽으로 저장할 수 있고 또는 상기 대용량 저장장치에 기입하는데 필요가 있는 시간을 최소화할 수 있는 시스템.
KR1019997010881A 1997-06-09 1998-06-09 네트워크 오브젝트 캐시 엔진 KR20010012913A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US4898697P 1997-06-09 1997-06-09
US60/048,986 1997-06-09

Publications (1)

Publication Number Publication Date
KR20010012913A true KR20010012913A (ko) 2001-02-26

Family

ID=21957486

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019997010881A KR20010012913A (ko) 1997-06-09 1998-06-09 네트워크 오브젝트 캐시 엔진

Country Status (8)

Country Link
EP (1) EP0988598A1 (ko)
JP (1) JP2002511170A (ko)
KR (1) KR20010012913A (ko)
CN (1) CN1260887A (ko)
AU (1) AU8061798A (ko)
EA (1) EA200000004A1 (ko)
IL (1) IL133241A0 (ko)
WO (1) WO1998057265A1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7171469B2 (en) * 2002-09-16 2007-01-30 Network Appliance, Inc. Apparatus and method for storing data in a proxy cache in a network
CN100353340C (zh) * 2003-07-04 2007-12-05 中国科学院计算技术研究所 可定制的网络存储系统
KR100654462B1 (ko) 2005-08-24 2006-12-06 삼성전자주식회사 캐쉬 메모리를 메모리 블록으로 나누어 파일의 데이터를저장하는 캐쉬 방법 및 캐쉬 시스템
CN101707684B (zh) * 2009-10-14 2014-04-30 北京东方广视科技股份有限公司 一种Cache调度的方法、设备及系统
WO2013141198A1 (ja) * 2012-03-21 2013-09-26 日本電気株式会社 キャッシュサーバ、コンテンツ配信方法およびプログラム
US9298391B2 (en) * 2012-12-19 2016-03-29 Dropbox, Inc. Application programming interfaces for data synchronization with online storage systems
US9311343B2 (en) 2014-04-02 2016-04-12 International Business Machines Corporation Using a sequence object of a database

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5065354A (en) * 1988-09-16 1991-11-12 Compaq Computer Corporation Queued posted-write disk write method with improved error handling
JPH0679293B2 (ja) * 1990-10-15 1994-10-05 富士通株式会社 計算機システム
US5564011A (en) * 1993-10-05 1996-10-08 International Business Machines Corporation System and method for maintaining file data access in case of dynamic critical sector failure
WO1997001765A1 (en) * 1995-06-26 1997-01-16 Novell, Inc. Apparatus and method for redundant write removal

Also Published As

Publication number Publication date
WO1998057265A1 (en) 1998-12-17
IL133241A0 (en) 2001-03-19
EP0988598A1 (en) 2000-03-29
JP2002511170A (ja) 2002-04-09
EA200000004A1 (ru) 2000-10-30
AU8061798A (en) 1998-12-30
CN1260887A (zh) 2000-07-19

Similar Documents

Publication Publication Date Title
US7539818B2 (en) Network object cache engine
US7058763B2 (en) File system for caching web proxies
US7269608B2 (en) Apparatus and methods for caching objects using main memory and persistent memory
US6883068B2 (en) Methods and apparatus for implementing a chche replacement scheme
US5896506A (en) Distributed storage management system having a cache server and method therefor
US9959280B1 (en) Garbage collection of data tiered to cloud storage
JP3612271B2 (ja) ファイルシステム
US10262005B2 (en) Method, server and system for managing content in content delivery network
US9588977B1 (en) Data and metadata structures for use in tiering data to cloud storage
US6182111B1 (en) Method and system for managing distributed data
JP4294494B2 (ja) 複数のキャッシュサーバによる共有ストレージの使用を管理するデバイスおよび方法
US6542967B1 (en) Cache object store
US9503542B1 (en) Writing back data to files tiered in cloud storage
KR100962055B1 (ko) 컴퓨터 시스템들간의 객체 공유
US8463846B2 (en) File bundling for cache servers of content delivery networks
US7694103B1 (en) Efficient use of memory and accessing of stored records
US6237060B1 (en) Cache management techniques
US20020078170A1 (en) Method and system for minimizing network bandwidth bottlenecks
US20040148279A1 (en) Scalable distributed hierarchical cache
US6654856B2 (en) System and method for managing storage space of a cache
CN108319634A (zh) 分布式文件系统的目录访问方法和装置
JP3954296B2 (ja) ファイル共有システム
KR20010012913A (ko) 네트워크 오브젝트 캐시 엔진
US20020184441A1 (en) Apparatus and methods for caching objects using main memory and persistent memory
US20030225967A1 (en) Dense allocation for data storage

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid