샤드 피드 파일 (기존)

인벤토리에 따라 샤딩 (또는 피드를 여러 파일로 분할)이 필요할 수 있습니다.

샤딩을 사용해야 하는 경우

  • 피드가 gzip 압축 후 파일 1개의 200MB를 초과합니다.

    • 예: 생성된 이용 가능 여부 피드는 1GB입니다. 5개 이상의 별도 파일 (또는 샤드)으로 샤딩해야 합니다.
  • 파트너 인벤토리가 시스템 또는 리전에 분산되어 있어 인벤토리를 조정하기가 어렵습니다.

    • 예: 파트너가 별도의 시스템에 상주하는 미국 및 EU 인벤토리를 보유하고 있습니다. 동일한 noncegeneration_timestamp를 가진 파일 2개 (또는 미국 1개, EU 1개)로 피드가 생성될 수 있습니다.

일반 규칙

  • 각 샤드는 파일 1개당 200MB를 초과할 수 없습니다 (gzip 압축 후).
  • 피드당 샤드는 20개를 넘지 않는 것이 좋습니다. 사업상 정당한 사유로 이 금액보다 더 많은 금액을 사용해야 하는 경우 지원팀에 문의하여 추가 안내를 받으세요.
  • 개별 레코드 (예: Merchant 객체 1개)는 하나의 샤드로 전송되어야 하며 여러 샤드로 분할될 수 없습니다. 그러나 이후 피드의 경우 동일한 shard_number를 사용하여 샤드로 전송할 필요는 없습니다.
  • 성능을 향상하려면 데이터를 샤드 간에 균등하게 분할하여 모든 샤딩된 파일의 크기가 비슷하도록 해야 합니다.

피드를 샤딩하는 방법

각 파일 (또는 샤드)에 FeedMetadata를 다음과 같이 설정합니다.

  • processing_instructionPROCESS_AS_COMPLETE로 설정합니다.
  • shard_number가 피드의 현재 샤드로 설정됨(0에서 total_shards - 1부터 시작, 중단 없음)
  • total_shards가 피드의 총 샤드 수로 설정됨 (1부터 시작).
  • nonce동일한 피드의 모든 샤드에서 동일하지만 다른 피드의 값과 다른 고유 식별자로 설정됨
  • generation_timestamp는 Unix 및 EPOCH 형식의 타임스탬프입니다. 피드의 모든 샤드에서 동일해야 합니다.

권장: 각 파일 (또는 샤드)의 파일 이름을 설정하여 피드 유형, 타임스탬프, 샤드 번호, 총 샤드 수를 나타냅니다. 샤드의 크기는 거의 같아야 하며 모든 샤드가 업로드되면 처리됩니다.

  • Example: “availability_feed_1574117613_001_of_002.json.gz”

샤딩된 재고 피드 예

샤드 0

{
  "metadata": {
    "processing_instruction": "PROCESS_AS_COMPLETE",
    "shard_number": 0,
    "total_shards": 3,
    "nonce": "111111",
    "generation_timestamp": 1524606581
  },
  "service_availability": [
    {
      "availability": [
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1577275200,
          "merchant_id": "merchant1",
          "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
        }
      ]
    }
  ]
}

샤드 1

{
  "metadata": {
    "processing_instruction": "PROCESS_AS_COMPLETE",
    "shard_number": 1,
    "total_shards": 3,
    "nonce": "111111",
    "generation_timestamp": 1524606581
  },
  "service_availability": [
    {
      "availability": [
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1577620800,
          "merchant_id": "merchant2",
          "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
        }
      ]
    }
  ]
}

샤드 2

{
  "metadata": {
    "processing_instruction": "PROCESS_AS_COMPLETE",
    "shard_number": 2,
    "total_shards": 3,
    "nonce": "111111",
    "generation_timestamp": 1524606581
  },
  "service_availability": [
    {
      "availability": [
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1576670400,
          "merchant_id": "merchant3",
          "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
        }
      ]
    }
  ]
}

파트너 배포 인벤토리에 샤딩 사용

파트너가 여러 시스템 또는 리전에 분산된 인벤토리를 단일 피드로 통합하기가 어려울 수 있습니다. 샤딩은 각 분산 시스템의 인벤토리 세트와 일치하도록 각 샤드를 설정하여 조정 문제를 해결하는 데 사용할 수 있습니다.

예를 들어 파트너의 인벤토리가 2개의 개별 시스템에 있는 2개의 지역 (미국 및 EU 인벤토리)으로 분리되어 있다고 가정해 보겠습니다.

파트너는 각 피드를 다음 2개의 파일 (또는 샤드)으로 나눌 수 있습니다.

  • 판매자 피드: 미국의 경우 샤드 1개, EU의 경우 샤드 1개
  • 서비스 피드: 미국의 경우 샤드 1개, EU의 경우 샤드 1개
  • 이용 가능 여부 피드: 미국의 경우 샤드 1개, EU의 경우 샤드 1개

피드가 제대로 처리되도록 하려면 다음 단계를 따르세요.

  1. 업로드 일정을 결정하고 일정을 따르도록 인벤토리의 각 인스턴스를 구성합니다.
  2. 각 인스턴스에 고유한 샤드 번호를 할당합니다 (예: US = N, EU = N + 1). total_shards를 총 샤드 수로 설정합니다.
  3. 예약된 각 업로드 시간에 generation_timestampnonce를 결정합니다. FeedMetadata에서 모든 인스턴스가 이 두 필드에 동일한 값을 갖도록 설정합니다.
    • generation_timestamp은 현재 또는 최근 과거여야 합니다(파트너의 읽기 대상 데이터베이스 타임스탬프가 가장 좋음).
  4. 모든 샤드가 업로드되면 Google에서는 generation_timestampnonce를 통해 샤드를 그룹화합니다.

각 샤드가 파트너 인벤토리의 다른 리전을 나타내고 generation_timestamp이 모든 샤드에서 같다면 다른 시간에 업로드될 수 있더라도 Google에서는 피드를 하나로 처리합니다.

지역별 샤딩된 가용성 피드의 예

샤드 0 - 미국 인벤토리

{
  "metadata": {
    "processing_instruction": "PROCESS_AS_COMPLETE",
    "shard_number": 0,
    "total_shards": 2,
    "nonce": "111111",
    "generation_timestamp": 1524606581
  },
  "service_availability": [
    {
      "availability": [
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1577275200,
          "merchant_id": "US_merchant_1",
          "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
        }
      ]
    }
  ]
}

샤드 1 - EU 인벤토리

{
  "metadata": {
    "processing_instruction": "PROCESS_AS_COMPLETE",
    "shard_number": 1,
    "total_shards": 2,
    "nonce": "111111",
    "generation_timestamp": 1524606581
  },
  "service_availability": [
    {
      "availability": [
        {
          "spots_total": 1,
          "spots_open": 1,
          "duration_sec": 3600,
          "service_id": "1000",
          "start_sec": 1577620800,
          "merchant_id": "EU_merchant_1",
          "confirmation_mode": "CONFIRMATION_MODE_SYNCHRONOUS"
        }
      ]
    }
  ]
}