system desgin 질문에서의 파악해야할 4가지
1. 사용자 : 시스템을 누가 어떻게 사용하는가?
2. 스케일 : 시스템 증가에 따른 데이터 처리 방법
3. 성능 : 시스템이 얼마나 빨라야 하는가?
4. 비용 : 어떤 구조가 더 빠르고 효율적인가?
System desgin 시 생각해야할 사항들
- 요구 사항에 맞는 제약사항 도출
- 사용자 수
- 트래픽, 1년, 5년
- 파일 저장 용량 - 1년 5년
- 디비 저장 용량 - 1년 5년
- 웹 서버 메모리 + 캐시 메모리
- 사용 API 도출 및 설계
- API에 따른 디비 설계
- 서비스에 필요한 기본 알고리즘 도출
- 수정 및 최적화
- DB 최적화 ( 용도, 사이즈에 맞는 DB 선택 및 파티셔닝 여부 )
- 데이터의 성향에 맞는 디비 선택
- 테이블간의 조인이 많이 필요하면 RDB
- 확장과 테이터의 타입이 key-value / document / graph 라면 NoSQL서비스에 맞는 디비 선택
- 쿼리에 따른 인덱스 고려하기
- 데이터량에 따른 파티션 고려 → 파티션에 따른 검색 최적화 고려
- 데이터의 성향에 맞는 디비 선택
- 데이터 캐시
- 수백만명이 보는 첫번째 페이지 캐시
- 글로벌 서비스일 경우 지역별 캐시
- 이미지 사용시 사용량에 따른 이미지 서버 확장 및 관리 방법
- 트래픽과 단일중단점(single point of failure, SPOF)을 고려한 로드밸런스와 서버의 확장
- 서버(웹서버, 디비서버, 파일서버)의 확장시 데이터를 어떻게 컨트롤 할것인가?
- 일관된 해싱
- 2대 vs n대 일때 처리가 가능한가? (해시 생성 서버의 경우 두대만 있어도 충분하다.)
- 서버(웹서버, 디비서버, 파일서버)의 확장시 데이터를 어떻게 컨트롤 할것인가?
추가로 필요한 스킬들
- 다양한 어플리케이션의 성능 모니터링 데이터 습득 ( 요청수 / 오류수 / 평균등답 시간등 )
- 인터뷰는 보통 45~60분 이내 이다.
- 인터뷰어는 처음부터 모든 세부 사항을 말해주지 않는다.(정확히는 말할 수 없는 상황도 있다) 계속 시스템 변경이 일어날것으로 생각하고, 필요한 지점을 계속 물어봐야 한다.
참고
https://www.youtube.com/watch?v=bUHFg8CZFws&ab_channel=SystemDesignInterview
'server > system design' 카테고리의 다른 글
5. dropbox // google drive (0) | 2021.07.30 |
---|---|
4. instagram // Flickr // Picasa (0) | 2021.07.23 |
3. twitter (0) | 2021.07.21 |
2. pastebin ( text storage site ) (0) | 2021.07.17 |
1. TinyURL // bitly (URL shortening service) (0) | 2021.07.09 |