수직적 규모 확장
- 스케일 업(scale up)이라고도 부름.
- 서버에 고사양 자원(더 좋은 CPU, 더 많은 RAM 등)을 추가하는 행위.
수평적 규모 확장
- 스케일 아웃(scale out)이라고도 부름.
- 더 많은 서버를 추가하여 성능을 개선하는 행위.
주(master)-부(slave) 관계 설정, 데이터 원본은 주 서버에, 사본은 부 서버에 저장.
쓰기 연산(write operation)은 마스터에서만 지원.
부 데이터베이스는 주 데이터베이스로부터 그 사본을 전달받으며, 읽기 연산(read operation)만을 지원함.
데이터베이스 다중화 이득
데이터베이스 서버 가운데 하나가 다운될 경우
복구 스크립트(recovery script)
- 프로덕션(production) 환경에서는 부 서버에 보관된 데이터가 최신 상태가 아닐 수 있기 때문에 없는 데이터는 복구 스크립트(recovery script)를 돌려서 추가해야 함.
- 다중 마스터(multi-masters)나 원형 다중화(circular replication) 방식을 도입하면 이런 상황에 대처하는 데 도움이 될 수 있지만 해당 구성은 훨씬 복잡함.
캐시는 어떤 상황에 바람직한가? 데이터 갱신은 자주 일어나지 않지만 참조는 빈번하게 일어난다면 고려해볼 만함.
어떤 데이터를 캐시에 두어야 하는가? 캐시는 데이터를 휘발성 메모리에 두므로, 영속적으로 보관할 데이터를 캐시에 두는 것은 바람직하지 않음.
캐시에 보관된 데이터는 어떻게 만료(expire)되는가? 만료된 데이터는 캐시에서 삭제되어야 함. 만료 정책이 없으면 데이터는 캐시에 계속 남게 된다. 만료 기간이 너무 짧으면 데이터베이스를 너무 자주 읽게 되고, 너무 길면 원본과 차이가 날 가능성이 높아짐.
일관성(consistency)은 어떻게 유지되는가? 일관성은 데이터 저장소의 원본과 캐시 내의 사본이 같은지 여부다. 저장소의 원본을 갱신하는 연산과 캐시를 갱신하는 연산이 단일 트랜잭션으로 처리되지 않는 경우 이 일관성은 깨질 수 있다.
장애에는 어떻게 대처할 것인가? 캐시 서버를 한 대만 두는 경우 해당 서버는 단일 장애 지점(Single Point of Failure, SPOF)이 되어버릴 가능성이 있다.
단일 장애 지점(Single Point of Failure, SPOF)
- 어떤 특정 지점에서의 장애가 전체 시스템의 동작을 중단시켜버릴 수 있는 경우.
캐시 메모리는 얼마나 크게 잡을 것인가? 캐시 메모리가 너무 작으면 액세스 패턴에 따라서는 데이터가 너무 자주 캐시에서 밀려나버려(eviction) 캐시의 성능이 떨어지게 된다. 이를 막을 한 가지 방법은 캐시 메모리를 과할당(overprovision)하여, 캐시에 보관될 데이터가 갑자기 늘어났을 때 생길 문제도 방지할 수 있게 된다.
데이터 방출(eviction) 정책은 무엇인가? 캐시가 꽉 차버리면 추가로 캐시에 데이터를 넣어야 할 경우 기존 데이터를 내보내야 한다. 이것을 캐시 데이터 방출 정책이라 하는데, LRU(Least Recently Used - 마지막으로 사용된 시점이 가장 오래된 데이터를 내보내는 정책), LFU(Least Frequently Used - 사용된 빈도가 가장 낮은 데이터를 내보내는 정책), FIFO(First In First Out - 가장 먼저 캐시에 들어온 데이터를 가장 먼저 내보내는 정책) 등이 있다.
image.png?v=2
)출처