Design Cloud Storage Service
μꡬμ¬ν
νμΌ μ λ‘λ / λ€μ΄λ‘λ / λκΈ°ν, μλ¦Ό κΈ°λ₯ μ§μ
λͺ¨λ°μΌ μΉ / μ± μ§μ
νμΌ μνΈν μ§μ
νμΌ ν¬κΈ° 10GB μ ν
λμ κ°μ©μ± / κ·λͺ¨ νμ₯μ± / μμ μ±
λΉ λ₯Έ λκΈ°ν μλ
λΆνμν λ€νΈμν¬ λμν μ¬μ© μ΅μν
μ 체 μ΄μ©μ 5,000λ§λͺ / DAU 1,000λ§λͺ
λͺ¨λ μ¬μ©μμκ² 10GBμ μ μ₯ κ³΅κ° μ 곡
λ§€μΌ κ° μ¬μ©μ νκ· 500kb νμΌ 2κ° μ λ‘λ
μ½κΈ° μ°κΈ° λΉμ¨ 1:1
ν΄λΌμ°λ μ μ₯μ μλΉμ€λ₯Ό ꡬννκΈ° μν΄ μμ κ°μ μꡬμ¬νμ λ§μ‘±ν΄μΌν λ, μλμ κ°μ΄ μΆμ ν μ μλ€.
νμν μ μ₯κ³΅κ° μ΄λ: 5,000λ§λͺ * 10GB = 50PB
μ λ‘λ API QPS = 1,000λ§λͺ * 2ν μ λ‘λ / 24 / 3600 = 231
μ΅λ QPS = 231 * 2(λΆνλ₯Ό κ³ λ €νμ¬) = 460
κΈ°λ₯ μ μ
ν΄λΌμ°λ μ μ₯μ μλΉμ€λ₯Ό ꡬννκΈ° μν κΈ°λ₯μ API λ¨μλ‘ λλμ΄ μ μνλ©΄ λ€μκ³Ό κ°λ€.
νμΌ μ λ‘λ: μ¬μ©μκ° νμΌμ μ λ‘λν μ μλ API
/files/upload
μΈμ:
{uploadType: 'normal' | 'resumable', data: File}
(normal: λ¨μ μ λ‘λ, resumable: μ΄μ΄ μ¬λ¦¬κΈ°)
νμΌ λ€μ΄λ‘λ: μ¬μ©μκ° νμΌμ λ€μ΄λ‘λν μ μλ API
/files/download
μΈμ:
{path: 'path/to/file'}
νμΌ κ°±μ νμ€ν 리 API: νμΌ κ°±μ νμ€ν 리λ₯Ό μ‘°νν μ μλ API
/files/list_revisions
μΈμ:
{path: 'path/to/file', limit: 10}
(limit: νμ€ν 리 κΈΈμ΄ μ΅λμΉ)
μμ€ν
μ€κ³
ν΄λΌμ°λ μ μ₯μλ₯Ό νλμ μλ²λ‘ ꡬννκ² λλ©΄, κ²°κ΅ κΈλ°© μ©λμ΄ λΆμ‘±ν΄μ§κ³ , μλ²μ μ₯μ κ° λ°μνλ©΄ μλΉμ€ μ μ²΄κ° μ€λ¨λ μ μκΈ° λλ¬Έμ λ€λ₯Έ λ°©λ²μ κ³ λ €ν΄μΌ νλ€.
λ°μ΄ν° μ€λ©: μ©λ λ¬Έμ λ ν΄κ²°ν μ μμ§λ§, λ°μ΄ν° μ μ€ λ¬Έμ μ λν λμ± νμ
AWS S3: ν΄λΌμ°λ μλΉμ€λ₯Ό μ΄μ©νλ©΄ μ©λ λ¬Έμ μ λ°μ΄ν° μ μ€ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ§λ§, λΉμ© λ°μ
S3λ₯Ό μ΄μ©νλ©΄ λΉμ©μ΄ λ°μνλ λ¨μ μ΄ μ‘΄μ¬νμ§λ§, μλμ κ°μ μ₯μ μ μ 곡ν΄μ£Όκ³ μ΄λ―Έ λ§μ κΈ°μ μμ μ¬μ©νκ³ μκΈ° λλ¬Έμ S3λ₯Ό μ΄μ©νλ κ²μ΄ μ’λ€.
νμ₯μ±
κ°μ©μ±
보μ
ν΄λΌμ°λ μ μ₯μ μλΉμ€λ₯Ό ꡬννκΈ° μν΄ μμ μΈκΈλ λ°μ΄ν° μ μ₯μλ₯Ό ν¬ν¨ν μμ€ν μ μ€κ³νλ©΄ λ€μκ³Ό κ°λ€.
λΈλ‘ μ μ₯μ μλ²: μ¬λ¬ λΈλ‘μΌλ‘ λλ νμΌμ ν΄λΌμ°λ μ μ₯μμ μ λ‘λνλ μλ²
κ° λΈλ‘μλ κ³ μ ν ν΄μκ°μ΄ ν λΉλμ΄ ν΄μκ°μ λ©νλ°μ΄ν° λ°μ΄ν°λ² μ΄μ€μ μ μ₯
κ° λΈλ‘μ λ 립μ μΈ κ°μ²΄λ‘ μ·¨κΈλμ΄ ν΄λΌμ°λ μ μ₯μμ μ μ₯
ν΄λΌμ°λ μ μ₯μ: λΈλ‘ λ¨μλ‘ λλ νμΌμ μ μ₯νλ μ μ₯μ(=S3)
μμΉ΄μ΄λΉ μ μ₯μ: μ€λ«λμ μ¬μ©λμ§ μμ λΉνμ± νμΌμ μ μ₯νλ μ μ₯μ
λ‘λλ°Έλ°μ: λ€νΈμν¬ νΈλν½ λΆμ° λ° μ₯μ λ°μ μ μλ² μ°ν
API μλ²: νμΌ μ λ‘λ μΈ λ€λ₯Έ μμ² μ²λ¦¬(μ¬μ©μ μΈμ¦ / νμΌ λ©νλ°μ΄ν° κ°±μ λ±)
λ©νλ°μ΄ν° λ°μ΄ν°λ² μ΄μ€: μ¬μ©μ / νμΌ / λΈλ‘ / λ²μ λ±μ λ©νλ°μ΄ν° μ 보 κ΄λ¦¬
μλ¦Ό μλΉμ€: νΉμ μ΄λ²€νΈ λ°μ μ μ¬μ©μμκ² μλ¦Ό μ μ‘(νμΌ μΆκ° / νΈμ§ / μμ λ±)
μ€νλΌμΈ μ¬μ©μ λ°±μ ν: μ΅μ μνλ₯Ό νμΈν μ μλ μ€νλΌμΈ μ¬μ©μμ νμΌμ λ£μ΄ μ μ μ λκΈ°ν κ°λ₯νλλ‘ ν¨
μμΈ μ€κ³
λΈλ‘ μ μ₯μ μλ² - λ€νΈμν¬ λμν μ΅μ ν
κ°±μ λλ νμΌλ€μ΄ μ λ°μ΄νΈ λ λλ§λ€ μ 체 νμΌμ μλ²λ‘ 보λ΄κ² λλ©΄ λΆνμν λ€νΈμν¬ λμνμ μ¬μ©νκ² λλ―λ‘, μλ λ κ°μ§ λ°©λ²μ μκ°ν΄λ³Ό μ μλ€.
λΈν λκΈ°ν μ λ΅: νμΌ μμ λ°μ μ μ 체 νμΌ λμ μμ μ΄ μΌμ΄λ λΈλ‘λ§ λκΈ°ν
μμΆ μκ³ λ¦¬μ¦: λΈλ‘ λ¨μλ‘ μμΆν΄ λμ΄ λ°μ΄ν° ν¬κΈ°λ₯Ό μ€μ
λμ μΌκ΄μ± 보μ₯
ν΄λΌμ°λ μ μ₯μ μλΉμ€λ μ¬μ©μμ λ°λΌ λ€λ₯΄κ² 보μ΄λ©΄ μλλ κ°ν μΌκ΄μ±μ 보μ₯ν΄μΌ νκΈ° λλ¬Έμ λ©νλ°μ΄ν° μΊμμ λ°μ΄ν°λ² μ΄μ€ κ³μΈ΅μλ κ°μ΄ κ°ν μΌκ΄μ± μμΉμ΄ μ μ©λμ΄μΌ νλ€.
λ©λͺ¨λ¦¬ μΊμ: λ³΄ν΅ μ΅μ’ μΌκ΄μ± λͺ¨λΈμ μ§μνκΈ° λλ¬Έμ μΆκ°μ μΌλ‘ μλ μ¬ν 보μ₯ νμ
μΊμμ 보κ΄λ μ¬λ³Έκ³Ό λ°μ΄ν°λ² μ΄μ€ μλ³Έ μΌμΉ
λ°μ΄ν°λ² μ΄μ€μ 보κ΄λ μλ³Έ λ³κ²½ λ°μ μ μΊμμ μλ μ¬λ³Έ 무ν¨ν
λ°μ΄ν°λ² μ΄μ€: κ°ν μΌκ΄μ±μ 보μ₯νκΈ° μ¬μ΄ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€ μ¬μ©
λ©νλ°μ΄ν° λ°μ΄ν°λ² μ΄μ€
λ©νλ°μ΄ν° λ² μ΄μ€μ μ€ν€λ§λ₯Ό κ°λ΅ν λνλ΄λ©΄ λ€μκ³Ό κ°λ€.
user: μ¬μ©μ κΈ°λ³Έ μ 보
device: λ¨λ§ μ 보
namespace: μ¬μ©μμ λ£¨νΈ λλ ν 리 μ 보
file: νμΌμ μ΅μ μ 보
file_version: νμΌμ κ°±μ μ΄λ ₯, κ°±μ μ΄λ ₯ νΌμμ λ°©μ§νκΈ° λͺ¨λ λ μ½λλ₯Ό μ½κΈ° μ μ©μΌλ‘ κ΄λ¦¬
block: νμΌ λΈλ‘μ λν μ 보
μ
λ‘λ μ μ°¨
νμΌ μ λ‘λ μμ²μ νκ² λλ©΄ νμΌ λ©νλ°μ΄ν° μΆκ°μ νμΌμ ν΄λΌμ°λμ μ μ₯μμ μ λ‘λνλ λ κ°μ§ μμ²μ΄ λ³λ ¬μ μΌλ‘ μ§νλλ€.
νμΌ λ©νλ°μ΄ν° μΆκ°
μ νμΌ λ©νλ°μ΄ν° μΆκ° μμ²
μ νμΌμ λ©νλ°μ΄ν°λ₯Ό λ°μ΄ν°λ² μ΄μ€μ μ μ₯νκ³ μ λ‘λ μνλ₯Ό λκΈ°λ‘ λ³κ²½
μ νμΌμ΄ μΆκ°λμμμ μλ¦Ό μλΉμ€μ μ μ‘
λ€λ₯Έ κ΄λ ¨λ ν΄λΌμ΄μΈνΈμκ² νμΌμ΄ μΆκ°λμμμ μλ¦Ό
νμΌ ν΄λΌμ°λ μ μ₯μ μ λ‘λ
λΈλ‘ μ μ₯μ μλ²μ μ λ‘λ μμ²
λΈλ‘ μ μ₯μ μλ²λ νμΌμ λΈλ‘ λ¨μλ‘ μͺΌκ° λ€ μμΆ λ° μνΈννμ¬ ν΄λΌμ°λ μ μ₯μμ μ μ‘
ν΄λΌμ°λ μ μ₯μμμ μ λ‘λ μλ£ ν μλ£ μ½λ°±μ API μλ²λ‘ μ μ‘
API μλ²μμ λ©νλ°μ΄ν° λ°μ΄ν°λ² μ΄μ€λ₯Ό μλ£ μνλ‘ κ°±μ
μλ¦Ό μλΉμ€λ λ€λ₯Έ κ΄λ ¨λ ν΄λΌμ΄μΈνΈμκ² νμΌμ΄ μ λ‘λλμμμ μλ¦Ό
μμ λ° μμ λ μμ κ°μ λ°©λ²μΌλ‘ μ§νλλ€.
λ€μ΄λ‘λ μ μ°¨
νμΌ λ€μ΄λ‘λλ νμΌμ΄ μλ‘ μΆκ°λκ±°λ μμ λλ©΄ μλμΌλ‘ μμλλλ°, μμ λ° μΆκ° κ°μ§λ μλ λ κ°μ§ λ°©λ²μΌλ‘ μ§νλλ€.
μ μ μ€μΈ κ²½μ°: μλ¦Ό μλΉμ€κ° ν΄λΌμ΄μΈνΈμκ² μ§μ μλ¦Ό
μ μ μ€μ΄ μλ κ²½μ°: μλ¦Ό μλΉμ€κ° μ€νλΌμΈ μ¬μ©μ λ°±μ νμ μΆκ°
ν΄λΌμ΄μΈνΈκ° νμΌ λ€μ΄λ‘λκ° νμν¨μ μΈμ§νλ©΄, μλ μ μ°¨λ‘ μ§νλλ€.
μλ¦Όμ νμΈν ν΄λΌμ΄μΈνΈλ API μλ²μ μλ‘μ΄ λ©νλ°μ΄ν° μμ²
API μλ²μμ λ©νλ°μ΄ν° λ°μ΄ν°λ² μ΄μ€μμ μ νμΌ λ©νλ°μ΄ν°λ₯Ό μ‘°ννμ¬ ν΄λΌμ΄μΈνΈμκ² λ°ν
ν΄λΌμ΄μΈνΈλ λΈλ‘ μ μ₯μ μλ²μ λΈλ‘ λ€μ΄λ‘λ μμ²
λΈλ‘ μ μ₯μ μλ²λ ν΄λΌμ°λ μ μ₯μμμ λΈλ‘μ λ€μ΄λ‘λνμ¬ ν΄λΌμ΄μΈνΈμκ² λ°ν
ν΄λΌμ΄μΈνΈλ λΈλ‘μ μ‘°ν©νμ¬ νμΌμ μ¬κ΅¬μ±
μλ¦Ό μλΉμ€
νμΌ μΆκ° λ° μμ μ λν κ°μ§ λ° μλ¦Όμ μν΄ μλ¦Ό μλΉμ€λ₯Ό μ΄μ©νλλ°, μλ¦Ό μ μ‘ λ°©λ²μΌλ‘ λ κ°μ§ μ λλ₯Ό κ³ λ €ν΄λ³Ό μ μλ€.
λ‘± ν΄λ§: ν΄λΌμ΄μΈνΈκ° μλ²μ μ°κ²°μ μ μ§νκ³ μμ§λ§, μλ²κ° μλ΅μ 보λ΄κ±°λ νμμμμ΄ λ°μν λκΉμ§ μ°κ²°μ μ μ§νλ λ°©μ
μΉ μμΌ: μ§μμ μΈ ν΅μ μ±λμ μ 곡νμ¬ μλ°©ν₯ ν΅μ κ°λ₯
μλ°©ν₯ ν΅μ μ΄ νμνμ§ μκ³ , μλ¦Όμ λ³΄λΌ μΌμ΄ λΉλ²νμ§ μκΈ° λλ¬Έμ λ‘± ν΄λ§ λ°©λ²μ μ±ννμ¬λ 무방νλ€.
μ μ₯μ κ³΅κ° μ μ½
νμΌ κ°±μ μ΄λ ₯μ 보쑴νκ³ μμ μ±μ 보μ₯νκΈ° μν΄μ νμΌμ μ¬λ¬ λ²μ μ μ¬λ¬ λ°μ΄ν°μΌν°μ 보κ΄ν΄μΌνλλ°, κ·Έλ κ² λλ©΄ μ μ₯μ©λμ λ§μ΄ μ°¨μ§νκ² λλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ μλ λ³΄ν΅ μλ μΈ κ°μ§ λ°©λ²μ μ¬μ©νλ€.
μ€λ³΅ μ κ±°(de-dupe): ν΄μ κ°μ λΉκ΅νμ¬ μ€λ³΅λ νμΌ λΈλ‘μ κ³μ μ°¨μμμ μ κ±°νλ λ°©λ²
μ§λ₯μ λ°±μ μ λ΅ λμ : 보κ΄ν΄μΌνλ νμΌ λ²μ κ°μ μν μ ν / μ λ°μ΄νΈ λ λλ§λ€ λͺ¨λ λ²μ μ μ μ₯νλ κ²μ΄ μλ νΉμ μμ μ λ²μ λ§ μ μ₯
μμΉ΄μ΄λΉ μ μ₯μ: μ€λ«λμ μ¬μ©λμ§ μμ νμΌμ μμΉ΄μ΄λΉ μ μ₯μλ‘ μ΄κ΄
κΈ°ν μ₯μ μ²λ¦¬
λ‘λλ°Έλ°μ μ₯μ : λΆ λ‘λλ°Έλ°μλ₯Ό ꡬμΆνμ¬ λ‘λ λ°Έλ°μλΌλ¦¬ μν λͺ¨λν°λ§
λΈλ‘ μ μ₯μ μλ² μ₯μ : λ€λ₯Έ λΈλ‘ μ μ₯μ μλ²μμ λ―Έμλ£ νΉμ λκΈ° μν μμ μ κ°μ Έμ μ²λ¦¬
ν΄λΌμ°λ μ μ₯μ μ₯μ : μ¬λ¬ μ§μμ λ€μ€ν μμΌλμ μ₯μ λ°μ μ λ€λ₯Έ μ§μμμ νμΌ μ‘°ν
API μλ² μ₯μ : API μλ² λ€μ€ν
λ©νλ°μ΄ν° μΊμ μ₯μ : μΊμ μλ² λ€μ€ν
λ©νλ°μ΄ν° λ°μ΄ν°λ² μ΄μ€ μ₯μ
μ£Ό λ°μ΄ν° μλ² μ₯μ : λΆ λ°μ΄ν°λ² μ΄μ€ μλ² μ€ νλλ₯Ό μ£Ό λ°μ΄ν°λ² μ΄μ€ μλ²λ‘ μΉκ²©
λΆ λ°μ΄ν°λ² μ΄μ€ μλ² μ₯μ : λ€λ₯Έ λΆ λ°μ΄ν°λ² μ΄μ€ μλ²λ‘ μ‘°ν
μλ¦Ό μλΉμ€ μ₯μ : μ μ§λλ λ‘± ν΄λ§μ λ€λ₯Έ μλ²λ‘ μ ν μ λμμ λ‘± ν΄λ§ μλνμ§ μλλ‘ μ€μ
μ€νλΌμΈ μ¬μ©μ λ°±μ ν μ₯μ : λ°±μ ν λ€μ€ν
μ°Έκ³ μλ£
Last updated
Was this helpful?