사용자 데이터는 상당히 큰 (> 1 PB) OpenStack Swift 스토리지 클러스터에 저장됩니다. 그것들을 클러스터 A 와 클러스터 B 라고하자 .
또한 해당 데이터와 상호 작용해야하는 몇 가지 PoP 가 있습니다. 이러한 PoP의 서버는 사실상 디스크가 없으므로 사용자 데이터가 서버에 저장되거나 다운로드되지 않습니다. PoP는 일반적인 세계 지역 (예 : 북미 , 남아프리카 , 중앙 유럽 등) 으로 그룹화 할 수 있습니다 .
일부 PoP는 클러스터의 Swift 끝점에서 멀리 떨어져있어 원하지 않는 대기 시간이 발생합니다. 이를 완화하기 위해 각 리전에서 캐싱 게이트웨이 서버를 설정하여 가장 가까운 클러스터에 r / w 요청을 캐시합니다.
현재 모든 PoP의 클라이언트는 영구적으로 장착 된 신속한 가상 파일 시스템 ( Swift Object Storage를 블록 장치로 또는 그 이하)으로 마운트하는 FUSE 모듈을 통해 사용자 데이터에 액세스합니다 . 그러나 svfs는 처음부터 안정적이지 않으며 미래에는 클라이언트가 NFS를 통해 캐시 서버에 액세스해야합니다.
이것은 원하는 아키텍처의 한 분기에 대한 다이어그램입니다.
+------------------+ +------------------+ NFS +------------------+
| Cluster A | SVFS | Region 1 Cache +----------> R1 PoP a Client |
| +----------------> | | |
|Persistent Storage| |Ephemeral Storage+----+ |Generates R/W Load|
+-----------------++ +------------------+ | +------------------+
| |
| +------------------+ | NFS +------------------+
| SVFS | Region 2 Cache | +-----> R1 PoP b Client |
+-----------------> | | |
|Ephemeral Storage| |Generates R/W Load|
+------------------+ +------------------+
NFS 및 svfs 설정 의 기본 사항에 익숙합니다 .
질문은 다음과 같습니다. 캐싱 서버가 svfs 마운트 지점에 쓰기 전에 가능한 한 많은 데이터를 최대한 적극적으로 캐시하기 위해 사용 가능한 모든 리소스 (지정된 캐시 파티션, RAM)를 사용하도록 설정하려면 어떻게해야합니까? 기본적으로 리눅스에서 디렉토리를 어떻게 캐시 할 수 있습니까?
가능하면 읽기 및 쓰기를 통합해야하며 캐시가 클러스터에 기록해야하는 경우 처리량을 최대화하고 대기 시간을 최소화하기 위해 가능하면 FUSE 요청의 블록 크기는 최소 128k 이상이어야합니다.
부록 1 : 몇 개의 서버에서 클러스터 마운트 모듈을 svfs에서 S3QL로 전환했습니다. S3QL의 캐싱 성능이 약간 향상되었습니다. 완전성을 위해 성능 데이터를 얻으려고 노력할 것입니다.