OpenStack Swift Large Object Support
Large Object Support
개술
Swift는 단일 대상을 업로드할 때 크기의 제한이 있습니다.기본값은 5GB입니다.그러나 현재 단일 대상의 크기 사실은 현재의 통용 분할 개념이 없다.업로드의 큰 대상을 분할하여 다운로드할 때 특수한 manfest 파일이 만들어지고 모든 부분을 전송하여 하나의 단독 대상이라고 연결합니다.이것 역시 가능한 한 병렬 업로드 세션을 더 빨리 업로드할 수 있도록 제공한다.
swift를 사용하여 객체 분할
가장 빠른 방법으로 이 기능을 시험해 보는 것은python-swiftclinet 라이브러리에 swift 도구를 포함하는 것입니다.큰 파일을 분할할 때 S-S 매개 변수를 사용하여 분할 크기를 지정할 수 있습니다. 예를 들어 swift upload testcontainer -S 1073741824 large_file 이것은 large파일은 1G 크기의 세션이라고 하고 그 세션을 병렬로 업로드합니다.모든 세션을 업로드하는 데 성공하면, swift는 이 세션을 전체적으로 다운로드할 수 있도록 manfest 파일을 만들 것입니다.
그래서 현재 아래의 swift 명령은 전체 대상을 다운로드합니다: swift download testcontainer large_file swift는 그의 분할 대상에 대한 엄격한 공약을 사용합니다.위의 예에서 두 번째test 로 모든 세션을 업로드합니다.container_segments 용기.이 세션의 이름은 다음과 같습니다: largefile/1290206778.25/21474836480/00000000, large_file/1290206778.25/21474836480/00000001, etc.
단독 용기를 사용하는 가장 좋은 점은 메인 용기의 시계가 모든 부분의 이름에 오염되지 않는다는 것이다.
swift는 이 세션 파일을 관리할 것입니다. 오래된 세션을 삭제하고 다시 쓰는 등 삭제할 것입니다.이 동작을 다시 쓸 수 있습니다. -leave-segments 인자가 필요하면.이것은 매우 유용하다. 만약 여러 버전의 같은 큰 대상을 원한다면 사용할 수 있다.
Direct API 직접 API
HTTP를 통해 세션과 manfest 디렉터리를 요청할 수도 있습니다.세션만 업로드할 수 있습니다. manifest 파일은 0자리 파일이고 X-Object-manifest 헤더가 추가됩니다.
모든 대상 세션은 같은 용기에 공통된 대상 접두사 이름이 있고, 이름이 연결된 순서에 따라 정렬되어야 한다.그것들은 manfest 파일과 같은 용기에 있을 필요가 없다.이것은 위의 swift와 마찬가지로 용기 목록을 조용하게 유지하는 데 도움이 된다.
manifest 파일은 추가 X-Objetc-manifest가 있는 0 바이트 파일입니다:
가장 좋은 것은 모든 부분을 업로드한 다음에 manfest를 만들거나 업데이트하는 것입니다.업로드가 완료될 때까지 전체 객체를 다운로드할 수 없습니다.따라서 두 번째 위치로 새 그룹을 업로드한 다음 manfest를 업데이트해서 전체 위치를 표시할 수 있습니다.새 세션을 업로드하는 동안, 처음의 manfest는 첫 번째 세션을 다운로드할 수 있습니다.
이것은 curl을 사용하여 작은 1바이트 세션에 대한 예가 있습니다.
# First, upload the segments
curl -X PUT -H 'X-Auth-Token: <token>' \
http://<storage_url>/container/myobject/1 --data-binary '1'
curl -X PUT -H 'X-Auth-Token: <token>' \
http://<storage_url>/container/myobject/2 --data-binary '2'
curl -X PUT -H 'X-Auth-Token: <token>' \
http://<storage_url>/container/myobject/3 --data-binary '3'
# Next, create the manifest file
curl -X PUT -H 'X-Auth-Token: <token>' \
-H 'X-Object-Manifest: container/myobject/' \
http://<storage_url>/container/myobject --data-binary ''
# And now we can download the segments as a single object
curl -H 'X-Auth-Token: <token>' \
http://<storage_url>/container/myobject
기타 주의사항 1.GET나 HEAD가 있는 manifest 파일, X-Object-manifest:
주의: 용기의 동기화 기능을 사용한다면 manfest 파일과 세션 파일이 끊임없이 용기에 동기화되어 있는지 확인해야 합니다.
History 대형 객체 지원은 구현되기 전에 여러 버전이 있습니다.
swift에서 대상의 크기를 제한하는 가장 중요한 것은 링 중의 허 노드의 균형을 유지하는 것이다.심지어 디스크의 분포를 유지하기 위해 집단을 관통하는 뚜렷한 저장 모드를 사용하는 것은 큰 대상을 작은 부분으로 나누어 다시 읽을 수 있을 때 한데 붙이는 간단한 것이다.
큰 대상 지원을 도입하기 전에, 일부 응용 프로그램은 업로드된 부분을 분리해서 클라이언트 쪽에서 하나의 부분을 검색할 수 있도록 조립할 수 있다.이 설계는 고객이 방대한 데이터 집합을 백업하고 압축할 수 있도록 허용하지만, 성능을 자주 개선하거나 네트워크 중단으로 인한 오류를 줄일 수 있도록 한다.이 방법의 주요 결함은 원시적인 구역 방안이 이 대상을 정확하게 재조립해야 한다는 것이다. 일부 장면에 있어 실제와 부합되지 않는다. 예를 들어 CDN 원본과 같다.
고객이 5G코인보다 저장 대상이 큰 시장에 진입하는 장애물을 제거하기 위해 우선 우리는 완전하고 투명하게 큰 대상을 업로드할 수 있도록 지원한다.완전 원형화 구현은 고객의 API를 바꾸지 않고 자동으로 분할된 대상을 통해 세션이 에이전트에 업로드되고 있음을 지원합니다.모든 세션은 고객의 API에 완전히 숨겨져 있습니다.
이 해결 방안은 몇몇 도전적인 실패 조건을 집단으로 만들었고, 어떠한 인자와도 병행 업로드를 할 수 없으며, 실패에서 회복할 수 있는 기초가 없었다.이런 투명화의 실현은 수익에 대해 너무 복잡하다고 여겨진다.
현재의'user manifest'디자인은 클라이언트에 투명하게 다운로드할 수 있는 큰 대상을 제공하기 위해 선택되었습니다. 클라이언트에게 세그먼트 업로드를 지원하기 위해 깨끗한 API를 제공해 왔습니다.
사용자 manifest를 표시하는 또 다른 방법은 미리 정의된 형식의 세션 목록으로 세그먼트 업로드를 완성해야 합니다.동시에 이것은 잠재적인 장점을 제공할 수 있다. 이것은 클라이언트에게 추가 부하를 전달하기로 결정했다. 이런 과정에서 젖의 행위는 더욱 간단한'API'지원을 사용해야 한다는 것을 제한한다(본질적으로'X-Object-Manifest'헤드의 형식)
개발 기간에 우리는 이러한 경로 접두사를 바탕으로 하는'은식'user manifest 방법은 최종 용기 목록 일치성 창에 영향을 미칠 수 있음을 알아차렸다. 이론적으로 한 GET가 manifest 대상에서 무효한 전체 대상을 단기간 안에 되돌려보낼 수 있다.사실 당신은 이런 상황을 겪지 않을 것이다. 아주 높은 속도로 Object-updaters나 container-replicators를 실행하는 작은 테스트 환경에 업로드하지 않으면.
모든 swift와 같이 큰 대상은 이 특성을 계속 향상시키고 변화시킬 것이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Mirantis OpenStack DVR 철저 해부(제3회)에서는 가상 머신에서 외부 네트워크로의 통신 (North-South)에 대해 썼습니다. 이번에는 가상 머신 간 통신 (East-West)에 대해 설명하고 싶습니다. 이번에는 다음 네트워크 토폴로지와 같이 모든 라우터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.