요구 사항을 명확하게 해라
Scope와 해결하고자 하는 문제를 명확히 해야한다. SD(System design)은 정답이 없다.
시스템 사이즈를 예측해라
우리가 SD할 Scale은 얼마인가? 이것을 예측 함으로써 scaling, Partitioning, load balancing, caching 등을 할지 정의 할 수 있다.
- 시스템 Scale은 얼마인가요? 얼마나 많은 TX가 발생할까요? 1초에 1분에 1시간에...
- Storage는 얼마나 필요할까요? 사용자가 사진을 최대 얼마만큼 올릴 수 있죠?
- 네트워크 사용량(Bandwidth)은 얼마일까요?
시스템 인터페이스를 정의 해라
이 시스템에서 사용하게될 API는 어떤 종류가 있는가?
이를 통해서 정확한 요구조건과 비용이 측정될 수 있다.
Data Mode을 정의해라
Data Model을 초기 정의함으로써 시스템 컴포넌트간에 해당 Data Model을 어떻게 사용할지 알 수 있게 된다.
이를 통해서 Data Partitioning과 관리 부분을 어떻게 할지 알 수 있게 된다.
다양한 시스템에서 접근하는 entities를 정의하고 어떻게 저장(Storage), 전달(transportation), 보안(Encryption) 할지 정리해야 한다.
또한 목적에 따라서 SQL을 사용할지 No-SQL을 사용할지도 분리 가능하다.
High-level design
Block diagram을 Core components를 배치하면서 우리의 시스템을 그려 보아라.
주어진 문제를 해결하기위한 Core Components를 빼먹지 않게 충분히 그려 넣어야 한다.
상세 설계
Core components를 하나씩 깊게 설계해 내려간다. 해당 설계의 장점과 단점을 명확히 이해하면서 접근해 나가야한다. 이를 통해서 Tradeoff 하는 부분을 명확히 해야한다.
Bottlenecks이 발생 발생가능한 부분을 찾고 해결하라
가능한한 많은 bottlenecks이 발생가능한 부분을 찾고 이부분을 경감하기 좋은 방법을 찾아서 해결 해야한다.
728x90
반응형
'System Design' 카테고리의 다른 글
System Designing Pastebin (0) | 2021.08.03 |
---|---|
Shortening Url Service Design (0) | 2021.08.01 |
Realization (0) | 2020.10.10 |
Aggregation and Composition (0) | 2020.10.10 |
Dependency (0) | 2020.10.10 |