- 신뢰성: 하드웨어나 소프트웨어 결함, 심지어 인적 오류(human error) 같은 역경에 직면하더라도 시스템은 지속적으로 올바르게 동적(원하는 성능 수준에서 정확한 기능을 수행)해야 한다.
- 올바르게 동작이라는 것은 “무언가 잘못되더라도 지속적으로 올바르게 동작함”을 의미한다.
- 잘못될 수 있는 일은 결함(fault)라고 부른다. 결함에 대처할 수 있는 시스템을 내결함성(fault-tolerant) 또는 탄력성(resilient)를 지녔다고 말한다.
- 결함은 장애와 다르다. 장애는 서비스 자체가 멈추는 것이고 결함이 발생해도 장애는 발생하지 않도록 해야 한다.
- 확장성: 시스템의 데이터 양, 트래픽 양, 복잡도가 증가하면서 이를 처리할 수 있는 적절한 방법이 있어야 한다.
- 트위터 홈 타임라인 구현 방식
- 모든 트윗을 한 곳에 저장하고 사용자 별로 팔로우한 유저를 찾고 그 유저들의 모든 트윗을 가져오는 방식
- 읽을 때마다 질의가 발생하므로 부하가 커진다.
- 개별 사용자 별로 홈 타임라인 캐시를 갖고 있어서 사용자가 트윗을 작성하면 팔로우한 모든 사용자의 타임라인에 저장한다. (쓰기 비용을 늘려 읽기 비용을 낮춘다.)
- 읽는 비용이 줄어들어 평균적으로 부하가 작아진다.
- 쓰기 비용이 늘어난 것으로 유명인의 트윗의 경우엔 한 번 쓸 때마다 쓰기 비용이 커져서 오히려 힘들다.
- 모든 트윗을 한 곳에 저장하고 사용자 별로 팔로우한 유저를 찾고 그 유저들의 모든 트윗을 가져오는 방식
- 성능을 기술할 때는 단순 평균보다는 분포나 백분위 등을 사용해야 한다.
- 부하의 대응 방식에는 수평 확장과 수직 확장이 있는데, 일부 시스템에서는 탄력적(elastic)이다. 탄력적이면 부하 예측이 힘들 때 유용하지만, 복잡하고 운영상 예상치 못 한 일이 발생한다.
- 크기가 1KB인 초당 100,000 건의 요청을 처리하는 것과 2GB인 분당 3건의 요청을 처리하는 건 같은 처리량이여도 설계는 매우 다르다.
- 트위터 홈 타임라인 구현 방식
- 유지보수성: 시간이 지남에 따라 여러 다양한 사람들이 시스템 상에서 작업할 것이기 때문에 모든 사요자가 시스템 상에서 생산적으로 작업할 수 있게 해야 한다.
- 레거시를 줄이는 시스템 설계 원칙
- 운용성
- 상태 복원
- 자동화
- 단순성: 강한 커플링, 의존성, 일관성 없는 명명법, 성능 해결을 위한 해킹 등이 증상
- 추상화
- 발전성
- 운용성
- 레거시를 줄이는 시스템 설계 원칙
'Studying > Data System Design' 카테고리의 다른 글
파티셔닝 [데이터 중심 애플리케이션 설계 6장] (0) | 2023.07.13 |
---|---|
복제 [데이터 중심 애플리케이션 설계 5장] (0) | 2023.07.09 |
부호화와 발전 [데이터 중심 애플리케이션 설계 4장] (0) | 2023.07.08 |
저장소와 검색 [데이터 중심 애플리케이션 설계 3장] (0) | 2023.07.07 |
데이터 모델 및 질의 언어 [데이터 중심 애플리케이션 설계 2장] (0) | 2023.06.14 |