IBM Cloud Docs
Aspera 고속 전송 사용

Aspera 고속 전송 사용

Aspera 고속 전송은 기존 FTP 및 HTTP 전송의 한계를 넘어 대부분의 조건, 특히 높은 대기 시간과 패킷 손실이 발생하는 네트워크에서 데이터 전송 성능을 향상시킵니다.

이 기능은 현재 Satellite용 Object Storage 에서 지원되지 않습니다. 자세히 보기

표준 HTTP PUT 조작 대신 Aspera 고속 전송은 FASP 프로토콜을 사용하여 오브젝트를 업로드합니다. 업로드 및 다운로드에 Aspera 고속 전송을 사용하는 경우 다음과 같은 이점이 있습니다.

  • 빠른 전송 속도
  • 콘솔에서는 200MB, SDK 또는 라이브러리 사용 시 1GB를 초과하는 대형 오브젝트 업로드 전송
  • 멀티미디어 파일, 디스크 이미지 및 기타 구조화되거나 구조화되지 않은 데이터와 같은 모든 데이터 유형의 전체 폴더 업로드
  • 전송 속도 및 기본 환경 설정 사용자 정의
  • 전송을 독립적으로 보거나 일시정지하거나 재개하거나 취소할 수 있음

Aspera 고속 전송은 IBM Cloud 콘솔 에서 사용 가능하며 Aspera Transfer SDK를 사용하여 프로그래밍 방식으로 사용할 수도 있습니다.

Aspera 고속 전송은 특정 지역에서만 사용 가능합니다. 세부사항은 통합 서비스를 참조하십시오.

대상 버킷에 불변 Object Storage 정책이 있는 경우 Aspera 고속 전송을 사용할 수 없습니다.

콘솔 사용

지원되는 지역에서 콘솔을 사용하여 오브젝트를 추가하면 Aspera Connect 클라이언트를 설치하는 옵션이 프롬프트됩니다. 이 브라우저 플러그인은 파일 또는 폴더를 업로드하기 위한 Aspera 고속 전송을 제공합니다.

Aspera Connect 설치

  1. Aspera Connect 설치 클라이언트를 선택하십시오.
  2. 사용 중인 운영 체제 및 브라우저에 해당하는 설치 지시사항을 따르십시오.
  3. 파일 또는 폴더 업로드를 재개하십시오.

Aspera 웹 사이트에서 직접 Aspera Connect 플러그인을 설치할 수도 있습니다. Aspera Connect 플러그인에 대한 문제점 해결에 도움을 받으려면 문서를 참조하십시오.

플러그인이 설치된 후 동일한 브라우저를 사용하는 대상 버킷에 대한 업로드의 기본값으로 Aspera 고속 전송을 설정하는 옵션이 제공됩니다. 내 브라우저 환경 설정 기억을 선택하십시오. 옵션은 전송 옵션 아래 버킷 구성 페이지에서도 사용 가능합니다. 이러한 옵션을 사용하면 업로드 및 다운로드를 위한 기본 전송으로 표준과 고속 중에서 선택할 수 있습니다.

일반적으로 IBM Cloud Object Storage 웹 기반 콘솔 사용은 Object Storage를 사용하는 가장 일반적인 방법은 아닙니다. 표준 전송 옵션은 오브젝트 크기를 200MB로 제한하며 파일 이름과 키가 동일합니다. 대규모 오브젝트 크기 및 성능 향상에 대한 지원(네트워크 요인에 따라 다름)은 Aspera 고속 전송을 통해 제공됩니다.

Aspera 서버는 구성 가능한 TCP 포트 (기본적으로 33001) 에서 하나의 SSH 서버를 실행합니다. 서버 측의 방화벽은 이 하나의 TCP 포트가 Aspera 서버에 도달하도록 허용해야 합니다. UDP 포트에서 청취 중인 서버가 없습니다. Aspera 클라이언트가 전송을 시작하면 클라이언트는 지정된 TCP 포트에서 SSH 서버에 대한 SSH 세션을 열고 데이터가 이동할 UDP 포트를 협상합니다. 기본적으로 Aspera 클라이언트 및 서버는 UDP 포트 33001을 사용하도록 구성됩니다. 세션 시작 단계 후에 클라이언트와 서버 모두 조정된 포트에서 UDP 트래픽을 전송하고 수신합니다. UDP 세션이 시작되도록 하려면 Aspera 서버 측의 방화벽이 포트 UDP 33001이 Aspera 서버에 도달하도록 허용해야 합니다. 자세한 정보는 방화벽 고려사항을 참조하십시오.

전송 상태

활성: 전송을 시작하면 전송 상태가 활성으로 표시됩니다. 전송이 활성 상태인 동안 활성 전송을 일시정지하거나 재개하거나 취소할 수 있습니다.

완료됨: 전송 완료 시 이에 대한 정보와 이 세션의 모든 전송이 완료됨 탭에 표시됩니다. 이 정보를 지울 수 있습니다. 현재 세션에서 완료된 전송에 대한 정보만 볼 수 있습니다.

환경 설정: 업로드 및 다운로드의 기본값을 고속으로 설정할 수 있습니다.

Aspera 고속 전송을 사용하는 다운로드에는 Egress 비용이 발생합니다. 자세한 정보는 가격 페이지를 참조하십시오.

고급 환경 설정: 업로드 및 다운로드를 위한 대역폭을 설정할 수 있습니다.

Aspera Transfer SDK 사용

  1. IBM API 허브에서 Aspera Transfer SDK 를 다운로드하십시오. SDK는 2진 (전송 요청을 청취하기 위한 명령행 유틸리티 및 디먼), 구성 파일 및 언어 특정 커넥터의 콜렉션입니다.
  2. 적절한 패키지 관리자 (pip, maven, gem등) 에서 grpc 종속성을 설치하십시오.
  3. 디먼을 실행하고 관련 프로그래밍 언어 커넥터 파일을 프로젝트로 가져오십시오.
  4. 디먼이 사용하는 로컬 포트를 전달하여 Aspera 클라이언트를 인스턴스화하십시오.
  5. 전송에 필요한 모든 정보를 포함하는 transfer_spec 를 작성하십시오.
    1. icos 정보:
      1. API 키
      2. 서비스 인스턴스 ID입니다.
      3. 대상 엔드포인트
      4. 버킷 이름
      5. 전송 방향
      6. 원격 호스트 ( ?faspConnectionInfo 조회 매개변수를 사용하여 버킷에 GET 요청을 전송하여 이를 찾을 수 있음)
      7. 전송할 자산 (기본적으로 파일 경로 세트)
  6. 전송 스펙 및 구성 정보를 전송 요청에 전달하십시오.

다음은 Python을 사용하는 예입니다.

import random
import string

import grpc
import json
import os.path

from urllib3.connectionpool import xrange

import transfer_pb2 as transfer_manager
import transfer_pb2_grpc as transfer_manager_grpc


def run():
    # create a connection to the transfer manager daemon
    client = transfer_manager_grpc.TransferServiceStub(
        grpc.insecure_channel('localhost:55002'))

    # create file
    file_path = generate_source_file()

    # create transfer spec
    transfer_spec = {
        "session_initiation": {
            "icos": {
                "api_key": os.environ.get('IBMCLOUD_API_KEY'),
                "bucket": os.environ.get('IBMCLOUD_BUCKET'),
                "ibm_service_instance_id": os.environ.get('IBMCLOUD_COS_INSTANCE'),
                "ibm_service_endpoint": os.environ.get('IBMCLOUD_COS_ENDPOINT')
            }
        },
        "direction": "send",
        "remote_host": "https://ats-sl-dal.aspera.io:443",
        "title": "strategic",
        "assets": {
            "destination_root": "/aspera/file",
            "paths": [
                {
                    "source": file_path
                }
            ]
        }
    }
    transfer_spec = json.dumps(transfer_spec)

    # create a transfer request
    transfer_request = transfer_manager.TransferRequest(
        transferType=transfer_manager.FILE_REGULAR,
        config=transfer_manager.TransferConfig(),
        transferSpec=transfer_spec)

    # send start transfer request to transfer manager daemon
    transfer_response = client.StartTransfer(transfer_request)
    transfer_id = transfer_response.transferId
    print("transfer started with id {0}".format(transfer_id))

    # monitor transfer status
    for transfer_info in client.MonitorTransfers(
            transfer_manager.RegistrationRequest(
                filters=[transfer_manager.RegistrationFilter(
                    transferId=[transfer_id]
                )])):
        print("transfer info {0}".format(transfer_info))

        # check transfer status in response, and exit if it's done
        status = transfer_info.status
        if status == transfer_manager.FAILED or status == transfer_manager.COMPLETED:
            print("finished {0}".format(status))
            break


def generate_source_file(name='file'):
    with open(name, 'w') as file:
        # file.write('Hello World!')
        file.write(''.join(random.choice(string.ascii_lowercase) for i in xrange(10 ** 10)))
    return os.path.abspath(name)


if __name__ == '__main__':
    run()