S3 - Baseline Performance

S3의 κΈ°μ€€ μ„±λŠ₯에 λŒ€ν•΄ μ•Œμ•„λ³΄μž

  • S3 λŠ” μžλ™μœΌλ‘œ μ•„μ£Ό λ§Žμ€ 수의 μš”μ²­μ„ μ²˜λ¦¬ν•˜λ„λ‘ μŠ€μΌ€μΌλ§μ΄ κ°€λŠ₯ν•˜λ©°, 첫 λ°”μ΄νŠΈλ₯Ό μ–»κΈ°κΉŒμ§€ 100-200ms
    μ •λ„λ‘œ 지연 μ‹œκ°„μ΄ ꡉμž₯히 짧닀.
  • μ΄ˆλ‹Ή κ°€λŠ₯ν•œ μš”μ²­μœΌλ‘œ ν™˜μ‚°ν•˜λ©΄ 접두어 및 μ΄ˆλ‹Ή 3,500개의 PUT/ COPY/ POST/ DELETE μš”μ²­μ„ μ²˜λ¦¬ν•˜λ©° 접두어 및 μ΄ˆλ‹Ή 5,500개의 GET/ HEAD μš”μ²­μ„ 버킷 λ‚΄μ—μ„œ μ²˜λ¦¬ν•˜λŠ” 속도이닀.
  • μ•„μ£Ό κ³ μ„±λŠ₯μ΄λΌλŠ” μ˜λ―Έμ΄λ‹€.
  • 버킷 λ‚΄μ˜ μ ‘λ‘μ–΄μ˜ κ°œμˆ˜μ—λŠ” μ œν•œμ΄ μ—†λ‹€.

  • μ˜ˆμ‹œ (object path –> prefix)
    • file μ΄λΌλŠ” μ΄λ¦„μ˜ 객체 4개λ₯Ό μ˜ˆμ‹œλ‘œ λ“€μ–΄ ν•΄λ‹Ή 객체의 접두어λ₯Ό λΆ„μ„ν•΄λ³΄μž
      1. bucket/folder1/sub1/file –> /folder1/sub1/
      2. bucket/folder1/sub2/file –> /folder2/sub2/
      3. bucket/1/file –> /1/
      4. bucket/2/file –> /2/
    • μ ‘λ‘μ–΄λŠ” bucket κ³Ό file μ‚¬μ΄μ˜ 뭐든 될 수 μžˆλ‹€.

첫번째 νŒŒμΌμ— λŒ€ν•΄μ„œ 이 접두어(/folder1/sub1/)λŠ” μ΄ˆλ‹Ή 3,500개의 PUTκ³Ό 5,500개의 GET을 얻을 수 μžˆλ‹€.
그리고 λ‹€λ₯Έ νŒŒμΌμ€ folder1/sub2 에 μžˆλ‹€κ³  ν•˜λ©΄ bucketκ³Ό file μ‚¬μ΄μ˜ 뭐든 접두어가 될 수 μžˆμœΌλ‹ˆ
μ ‘λ‘μ–΄λŠ” /folder1/sub2 κ°€ λœλ‹€. 이 μ—­μ‹œ 3,500개의 PUTκ³Ό 5,500개의 GET을 ν•œ 접두뢀에 λŒ€ν•΄ 얻을 수 μžˆλ‹€.

μ΄λ ‡κ²Œ 1κ³Ό 2κ°€ 있으면 μ„œλ‘œ 접두어가 λ‹€λ₯΄λ‹€. 이렇듯, 버킷 λ‚΄μ˜ 접두어 및 μ΄ˆλ‹Ή 3,500개의 PUTκ³Ό 5,500개의 GET을 μ–»λŠ”λ‹€λŠ” κ·œμΉ™μ΄ 이해가 될 것이닀.

λ‹€μ‹œλ§ν•΄, 이 4개의 접두어에 읽기 μž‘μ—…μ„ κ· μΌν•˜κ²Œ λΆ„μ‚°μ‹œν‚€λ©΄ μ΄ˆλ‹Ή 22,000개의 HEAD와 GET μš”μ²­μ„ μˆ˜ν–‰ν•˜λŠ” μ…ˆμ΄λ‹ˆ μ„±λŠ₯이 μ•„μ£Ό μ’‹λ‹€κ³  λ³Ό 수 μžˆλ‹€.

접두어 (prefix) - 버킷이름과 파일λͺ… μ‚¬μ΄μ˜ λͺ¨λ“  경둜라고 이해

1. S3 - KMS Limitation

S3 μ„±λŠ₯ μ œν•œμΈ KMS에 λŒ€ν•΄ μ•Œμ•„λ³΄μž

image-20220813021214294

  • λ§Œμ•½ SSE-KMSλ₯Ό μ‚¬μš©ν•΄ 객체λ₯Ό μ•”ν˜Έν™” ν•˜λŠ” 경우 KMS μ œν•œμ— μ˜ν•΄ 영ν–₯을 받을 수 μžˆλ‹€.
  • νŒŒμΌμ„ μ—…λ‘œλ“œν•˜λ©΄ KMS Limitation(μ œν•œ)이 우리λ₯Ό λŒ€μ‹ ν•΄μ„œ S3μ—μ„œ GenerateDateKey KMS APIλ₯Ό 호좜
  • SSE-KMS λ₯Ό 톡해 S3μ—μ„œ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œ ν•˜λŠ” κ²½μš°μ—λŠ” Decrypt KMS-API λ₯Ό ν˜ΈμΆœν•˜κ²Œ λœλ‹€.
  • 그리고 이 두 가지 μš”μ²­μ€ KMS ν• λ‹ΉλŸ‰μ— 집계가 λœλ‹€.
    • 예λ₯Ό λ“€μ–΄ μœ μ €λ“€μ΄ S3 버킷에 μ—°κ²°ν•˜κ³  SSE-KMS μ•”ν˜Έν™”λ₯Ό μ‚¬μš©ν•΄ νŒŒμΌμ„ μ—…λ‘œλ“œ/λ‹€μš΄λ‘œλ“œ ν•˜λ €λŠ” 상황이면, S3 버킷이 APIλ₯Ό ν˜ΈμΆœν•˜κ³  ν‚€λ₯Ό μƒμ„±ν•˜κ±°λ‚˜ KMSν‚€λ‘œ 해독해 κ·Έλ‘œλΆ€ν„° κ²°κ³Όλ₯Ό 가지고 μ˜¨λ‹€.
    • κ·Έλž˜μ„œ KMSλŠ” 기본적으둜 μ΄ˆλ‹Ή μš”μ²­μ— λŒ€ν•œ ν• λ‹ΉλŸ‰μ„ 가지고 μžˆλ‹€.
    • Region에 따라 μš”μ²­μ΄ μ΄ˆλ‹Ή 5,500개 λ˜λŠ” 10,000개 or 30,000개일 μˆ˜λ„ μžˆλ‹€.
  • 이보닀 λ§Žμ€ μ–‘μ˜ μš”μ²­μ΄ ν•„μš”ν•œ κ²½μš°μ—λŠ” μ„œλΉ„μŠ€ ν• λ‹ΉλŸ‰ μ½˜μ†”μ„ 톡해 ν• λ‹ΉλŸ‰ 증가λ₯Ό μš”μ²­ν•  수 μžˆλ‹€.
    • μ„œλΉ„μŠ€ ν• λ‹ΉλŸ‰ μ½˜μ†” (Service Quotas Console)
    • 즉, μ„œμšΈ λ¦¬μ „μ—μ„œλŠ” μ΄ˆλ‹Ή 5,500개의 μš”μ²­μ„ μ§€μ›ν•˜λŠ”κ³³μΈλ°, 10,000개의 μš”μ²­μ΄ λ°œμƒν•˜λ©΄ μš”μ²­μ΄ μ§€λ‚˜μΉ˜κ²Œ λ§Žμ•„μ§„λ‹€.

S3 버킷을 많이 μ“°λŠ” 경우λ₯Ό λŒ€λΉ„ν•΄μ„œ μ•Œμ•„λ‘λ©΄ 쒋을 지식이닀.

2. S3 Performance

S3 μ„±λŠ₯에 λŒ€ν•΄ μ•Œμ•„λ³΄μž

image-20220813021620782

  • μ΅œμ ν™”λ₯Ό μœ„ν•œ 첫 번째 방법은 λΆ„ν•  μ—…λ‘œλ“œ(Multi-Part Upload) 이닀.
    • 100MBκ°€ λ„˜λŠ” νŒŒμΌμ€ λΆ„ν•  μ—…λ‘œλ“œ ꢌμž₯
    • 5GBκ°€ λ„˜λŠ”λ‹€λ©΄ λΆ„ν• μ—…λ‘œλ“œ ν•„μˆ˜

λΆ„ν•  μ—…λ‘œλ“œλŠ” 병렬화λ₯Ό 톡해 전솑 속도λ₯Ό 높이고 λŒ€μ—­ν­μ„ κ·ΉλŒ€ν™”ν•œλ‹€. S3 에 μ—…λ‘œλ“œν•  큰 파일이 있으면 이 νŒŒμΌμ„ μž‘μ€ λ©μ–΄λ¦¬μ˜ μ—¬λŸ¬ 파트둜 λ‚˜λˆ μ„œ 각 νŒŒμΌμ„ S3에 λ³‘λ ¬λ‘œ μ—…λ‘œλ“œν•œλ‹€. S3 μ—μ„œλŠ” λͺ¨λ“  νŒŒνŠΈκ°€ μ—…λ‘œλ“œλ˜λ©΄ 이듀을 λ‹€μ‹œ λͺ¨μ•„ 큰 파일둜 합쳐 주게 λœλ‹€.

image-20220813021643123

  • S3 Transfer Acceleration은 μ—…λ‘œλ“œ/λ‹€μš΄λ‘œλ“œλ₯Ό μœ„ν•œ κΈ°λŠ₯? μ„œλΉ„μŠ€μ΄λ‹€.
  • νŒŒμΌμ„ AWS의 Edge Location으둜 νŒŒμΌμ„ μ „μ†‘ν•¨μœΌλ‘œμ¨ 전솑 속도λ₯Ό 높인닀.
  • 엣지 λ‘œμΌ€μ΄μ…˜μ—μ„œλŠ” 데이터λ₯Ό λŒ€μƒ Region에 S3 λ²„ν‚·μœΌλ‘œ 보내쀀닀.
  • 리전보닀 μ—£μ§€λ‘œμΌ€μ΄μ…˜μ˜ μˆ˜κ°€ 더 λ§Žλ‹€.
    • 200κ°œκ°€ λ„˜κ³  계속 늘고 μžˆλ‹€.
  • 이 κΈ°λŠ₯은 λΆ„ν• μ—…λ‘œλ“œ(Multi-Part) κΈ°λŠ₯κ³Ό ν˜Έν™˜μ΄ λœλ‹€.

파일이 미ꡭ에 μžˆλŠ” μƒνƒœμ—μ„œ ν˜Έμ£Όμ— μžˆλŠ” S3 버킷에 이 νŒŒμΌμ„ μ—…λ‘œλ“œν•˜λ €ν•œλ‹€. 이 λ•Œ νŒŒμΌμ„ 미ꡭ에 μžˆλŠ” μ—£μ§€λ‘œμΌ€μ΄μ…˜μ— μ—…λ‘œλ“œν•œλ‹€. 곡용 인터넷을 μ‚¬μš©ν•΄ μ•„μ£Ό λΉ λ₯΄κ²Œ μ²˜λ¦¬ν•œλ‹€. 그러면 ν•΄λ‹Ή μ—£μ§€λ‘œμΌ€μ΄μ…˜μ—μ„œ 호주의 S3 λ²„ν‚·μœΌλ‘œ 고속 사섀 AWS λ„€νŠΈμ›Œν¬λ₯Ό 톡해 파일이 μ „μ†‘λœλ‹€.

Transfer Acceleration이라고 λΆˆλ¦¬λŠ” μ΄μœ λŠ” 곡용 인터넷을 μ΅œμ†Œν•œμœΌλ‘œ κ±°μΉ˜λ©΄μ„œ 사섀 AWS λ„€νŠΈμ›Œν¬ μ‚¬μš©μ„ μ΅œλŒ€ν™” ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. Transfer Accelerationλ₯Ό μ‚¬μš©ν•˜λ©΄ 전솑속도λ₯Ό 높일 수 μžˆλ‹€.

κ·Έλ ‡λ‹€λ©΄ νŒŒμΌμ„ λ‹€μš΄λ°›λŠ” κ²½μš°μ—λŠ” μ–΄λ–»κ²Œ ν• κΉŒ? νŒŒμΌμ„ κ°€μž₯ 효율적으둜 μ½λŠ” 방법은 뭘까? μ•„λž˜μ˜ S3 byte range fetches 을 μ΄μš©ν•˜λ©΄ λœλ‹€. 파일의 νŠΉμ • λ°”μ΄νŠΈ λ²”μœ„λ₯Ό μ–»μ–΄ GET을 λ§ˆλΉ„μ‹œν‚€λŠ” 방식이닀. λ°”μ΄νŠΈ λ²”μœ„λ₯Ό μ–»λŠ” 데 μ‹€νŒ¨ν•œ κ²½μš°μ—λ„ μž‘μ€ λ°”μ΄νŠΈ λ²”μœ„λ₯Ό μ–»λŠ” μž‘μ—…μ„ λ‹€μ‹œ μ‹œλ„ν•¨μœΌλ‘œμ¨ μ‹€νŒ¨μ— λŒ€ν•œ 볡원성을 κ°€μ§€κ²Œ λœλ‹€.

이 방법은 λ‹€μš΄λ‘œλ“œ 속도λ₯Ό λ†’μ΄λŠ” 데에 μ‚¬μš©λœλ‹€.

3. S3 Performance - S3 Byte-Range Fetches

image-20220813022710542

  • νŠΉμ • byte λ²”μœ„ μš”μ²­μ„ ν†΅ν•œ 병렬 GETμš”μ²­
  • λ°”μ΄νŠΈ λ²”μœ„λ₯Ό μ–»λŠ” 데 μ‹€νŒ¨ν•œ κ²½μš°μ—λ„ μž‘μ€ λ°”μ΄νŠΈ λ²”μœ„λ₯Ό μ–»λŠ” μž‘μ—…μ„ λ‹€μ‹œ μ‹œλ„ν•¨μœΌλ‘œμ¨ μ‹€νŒ¨μ— λŒ€ν•œ 볡원성을 κ°€μ§€κ²Œ λœλ‹€.
  • 이 방식은 λ‹€μš΄λ‘œλ“œμ˜ 속도λ₯Ό λ†’μ΄λŠ” 데에 μ‚¬μš©λœλ‹€.

S3 에 μ•„μ£Ό 큰 파일이 있고, 파일의 첫 λͺ‡ λ°”μ΄νŠΈμ— ν•΄λ‹Ήν•˜λŠ” Part1 을 μš”μ²­ν•œλ‹€. 그리고 λ‘λ²ˆμ§Έ νŒŒνŠΈμ— 이어 λ§ˆμ§€λ§‰ νŒŒνŠΈκΉŒμ§€ μžˆμ„ 것이닀. 이 λͺ¨λ“  νŒŒνŠΈλ“€μ„ νŠΉμ • Byte Range Fetches κΈ°λŠ₯을 μš”μ²­ν•œλ‹€. λ°”μ΄νŠΈ λ²”μœ„λΌκ³  λΆˆλ¦¬λŠ” 건 파일의 νŠΉμ • λ²”μœ„λ§Œμ„ μš”μ²­ν•  것이기 λ•Œλ¬Έμ΄λ‹€. 그리고 이 μš”μ²­μ€ μ „λΆ€ λ³‘λ ¬μ μœΌλ‘œ 이루어진닀. 즉 GET λ₯Ό λ³‘λ ¬ν™”ν•΄μ„œ λ‹€μš΄λ‘œλ“œλ₯Ό κ°€μ†ν™”μ‹œν‚€λŠ” 원리이닀.



두 번째 μ‚¬μš© μ‚¬λ‘€λŠ” 파일의 일뢀λ₯Ό νšŒμˆ˜ν•˜λŠ” κ²½μš°μ΄λ‹€.

λ§Œμ•½ S3에 μžˆλŠ” 파일의 첫 50λ°”μ΄νŠΈκ°€ νŒŒμΌμ— λŒ€ν•œ 정보λ₯Ό μ œκ³΅ν•˜λŠ” ν—€λ”λΌλŠ” 사싀을 μ•Œκ³  μžˆλ‹€λ©΄ 헀더 μš”μ²­μ„ λ°”λ‘œ 보낸닀. 헀더에 ν•΄λ‹Ήν•˜λŠ” 첫 50λ°”μ΄νŠΈλ₯Ό λ°”μ΄νŠΈ λ²”μœ„ μš”μ²­μœΌλ‘œ μ „μ†‘ν•¨μœΌλ‘œμ¨ ν•΄λ‹Ή 정보λ₯Ό λΉ λ₯΄κ²Œ 얻을 수 μžˆμ„ 것이닀.

Summary

이번 ν¬μŠ€νŒ…μ—μ„œλŠ” S3 μ„±λŠ₯κ³Ό μ—…λ‘œλ“œ/λ‹€μš΄λ‘œλ“œ 가속화 방법 및 κΈ°μ€€ μ„±λŠ₯κ³Ό KMS μ œν•œμ— λŒ€ν•΄ μ•Œμ•„λ³΄μ•˜λ‹€.

  • κΈ°μ€€ μ„±λŠ₯
    • prefix λ‹Ή 3,500개 PUT, 5,500개 GET
  • KMS Limitation
    • SSE-KMS μ•”ν˜Έν™” μ‚¬μš©ν•˜λ©΄ KMS 집계에 할당됨
    • 리전에 따라 μš”μ²­μˆ˜κ°€ 닀름
    • μš”μ²­μˆ˜κ°€ λΆ€μ‘±ν•˜λ©΄ μ„œλΉ„μŠ€ ν• λ‹ΉλŸ‰ μ½˜μ†” μ΄μš©ν•΄μ„œ 늘리기
  • μ„±λŠ₯
    • λΆ„ν•  μ—…λ‘œλ“œ
      • 100MB 이상 ꢌμž₯
      • 5GB 이상 ν•„μˆ˜
    • 전솑 가속화 (transfer Accelerate)
      • λ―Έκ΅­ –> 엣지 λ‘œμΌ€μ΄μ…˜ –> ν˜Έμ£Όλ²„ν‚·
  • λ°”μ΄νŠΈ λ²”μœ„ μš”μ²­
    • 큰 νŒŒμΌμ„ 병렬 GETμš”μ²­μœΌλ‘œ λΆ€λΆ„μ μœΌλ‘œ λ‹€μš΄λ°›μŒ
    • 첫 λΆ€λΆ„ ν—€λ”λ§Œ κ°€μ Έμ˜΄

λŒ“κΈ€λ‚¨κΈ°κΈ°