Git Product home page Git Product logo

s3's Introduction

s3

  • s3같은 object storage 📥 만들기

object storage란

  • 데이터 블록보다는 오브젝트(개별 유닛) 관리 (데이터, 메타데이터, 고유한 식별자)
  • API 또는 http/https 를 통해 즉시 액세스 할 수 있음 (데이터 보호)
  • 필요한 경우 여러 데이터센터에 복제 가능

구현 방법

  • 디바이스 수준
  • 시스템(요소간의 관계) 수준
  • 인터페이스(컴퓨터와 사용자간의 통신이 가능하도록 하는 장치/프로그램) 수준

참조


고려사항

- 버킷 이름은 unique 해야 함
- 데이터를 업로드하기 전에 버킷을 생성해야 함
- 버킷에 저장되는 데이터는 개별 데이터 조각인 object(payload 라고도 불림), metadata
  * payload는 HTTP 요청을 보낼 때 전달되는 데이터
  * 최대 사이즈는 API마다 다른듯.. (페이지네이션으로 설정하기 나름?)
- object data는 우리가 저장하기 원하는 any sequence of bytes 일 수 있음
- metadata는 object를 설명하는 name-value 의 pairs
  * metadata는 mutable
  * object data는 immutable 
- 가십 프로토콜로 서버 간의 상태 파악

설계

- metadata는 NoSQL 저장소에(버킷, object의 metadata가 있음)
- object data를 효율적으로 저장하는 방법을 고려
- payload의 최대 사이즈 결정, 최대 사이즈 넘을 경우는?

TODO

1. object를 저장할 저장소 고려
2. HTTP PUT/POST/DELETE 등으로 api 작동
3. 파일을 찾는 알고리즘은 어떤 게 좋을까?
  - UUID 사용
  - 이것도 하나의 데이터베이스 같군... 
  - 시간복잡도, 공간복잡도는 어떻게 될까?

(나중)
- CLI로 api 사용할 수 있게 하기 
- 웹 페이지로 api 사용할 수 있게 하기

API

1. 사용자, 권한 식별(S3은 IAM 사용)
  - 생성 권한이 있는가?
  - 업로드, 수정, 삭제 권한이 있는가?
  => IAM은 일단은 저장소에 정보를 넣자...

2. 버킷 생성
  - metadata가 생겨야 함

3. object 업로드
  - /bucket/object/path/file 식으로 path 제공
  - metadata가 생겨야 함 (object UUID, bucket_id, object_name, etc)
  - 업로드 성공하면 success message, UUID가 리턴되어야 함
  - 데이터 전송 전에 압축하기!
  - 데이터 보내고 압축을 풀어줘야 하나?

* http 응답의 최대 요청 시간은 얼마인가?

저장소

- RAID6?
- Storage Node는 3개 이상이 이상적
  * 데이터는 이중화 되어야 함
- 데이터의 일관성을 유지해야 하므로 동기화가 필요..
  * trigger 방식?

s3's People

Contributors

da-head0 avatar

Watchers

 avatar

s3's Issues

object 저장소 선택

참고

  • minio 는 어떻게 구성되는가?

구성

  • 하드 드라이브 기반
    • S3 서비스 공급자가 미리 하드 드라이브들을 사놔서 사용자가 필요한 용량 이상으로 미리 확장 가능하다면 사용자가 보기엔 무한대로 확장 가능한 것처럼 보인다..
    • 한 하드 드라이브 안에 여러 사용자의 데이터 보관
    • ssd 1TB 기준 10-15만원
    • AWS s3은 1TB 기준 월 $30

고려사항

  • 손쉽게 확장 가능하면 좋음
  • 빨라야 함
  • 가용성
    • SLO, SLA, 장애 복구 시간은?
    • 이거에 따라 백업 주기가 달라짐
    • 복원은 어떻게 하나?
  • 어떤 파일 포맷이든 저장할 수 있으면 좋음
    • 하지만 일단은 이미지, 텍스트, zip 파일부터 시작하면 좋을 듯
    • 동영상은 추가적으로...
  • 파일은 암호화되어야 함
    • 권한이 없는 사용자는 데이터를 볼 수 없도록?
    • IAM을 이용해서 애초에 막아버리면?
  • 버킷 설정 파일 (ACI)
  • 버킷에서 object 를 SELECT 할 때 일단 메타데이터만 GET 하도록

제한 사항

  • 한 사용자당 생성할 수 있는 버킷의 숫자
    • AWS S3의 경우 100개
  • 버킷에 올라갈 수 있는 object의 크기 제한
    • AWS S3의 경우 5TB
  • 무료 용량
    • AWS S3의 경우 5GB
    • GET 요청 월 20,000 건
    • PUT 요청 월 2,000 건

추가로 제공되면 좋을 사항

  • web interface로 제공되면 좋음 #5 #6
  • 세계 어디던 제공할 수 있어야 함 -> CDN 이용?
    • 직접 데이터센터와 장비를 할 순 없으니 결국 클라우드를 이용해야 하나..
  • 액세스한 사용자의 정보 저장, 제공 (audit log)

현우님에게 물어볼 사항

  • 온프렘으로 스토리지를 구성하시는지?
  • hdd, sdd?
  • 확장은 어떻게 하시는지?
  • 데이터 Compliance.. AWS 한국 데이터 프라이버시
    • ISO 27001
    • ISO 27017
    • ISO 27018

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.