확장성
소프트웨어나 서비스의 요구사항 수준이 증가할 때 대응할 수 있는 능력이다. 주로 데이터 크기, 트래픽의 증가에 따른 규모 확장을 말한다.
- Scale-Up : 수직적 확장. 하드웨어의 물리적인 성능을 향상시키는 방법으로 고성능 서버로의 교체가 있다.
- Scale-Out : 수평적 확장. 트래픽을 처리할 수 있는 물리 서버의 갯수를 늘려 분산처리 하는 방식이 있다.
수직적 확장은 수평적 확장에 비해 확장성이 떨어진다. 수직적 확장에서 하드웨어의 성능을 올리는 데에는 분명한 한계가 존재하며 비용 또한 증가된 요구사항에 비해 많이 소모된다. 반면, 수평적 확장은 똑같은 물리 서버를 요구사항에 맞춰 증설하여 해결할 수 있다.
그러나, 수평적 확장의 분산시스템에서 얻는 이득이 있다면 어디선가 trade-off가 발생하게 된다.
분산 시스템에 따라오는 문제
- 부분 장애
- 네트워크 실패
- 데이터 동기화
- 로드밸런싱
- 유지 보수 복잡성
Redis Cluster
데이터를 자동으로 여러 노드에 분산하여 노드의 실패나 통신 단절에도 지속적으로 작동하는 가용성을 보장한다. 분산 처리를 통해 고성능과 선형 확장성을 제공한다.
특징
- Full-Mesh 구조 : 모든 노드가 서로 연결되어 있는 구조, Cluster Bus라는 추가 채널(port)를 사용한다.
- 모든 노드가 서로 연결될 경우 성능 이슈가 생길 수 있으며, 중복 데이터 통신이 자주 일어난다. → Gossip Protocol을 사용함으로써 극복.
- Hash Slot을 이용한 데이터 베이스 샤딩.
- 하나의 DB만 사용 가능하며 multi key 명령어가 제한된다. 또한, 클라이언트는 모든 노드에 접속해야 한다.