DB
Hot Key
choiyc
2022. 11. 9. 18:51
- 과도하게 읽기/쓰기 요청이 집둥되게 되는 Key를 의미한다.
- 해당 Key의 접근으로 인해 Storage(DB, Cache) 성능 저하가 발생하게 된다.
문제 상황
Cache Server의 최대 성능은 100,000 TPS라고 가정한다.
API Server로 부터 A Key에 대한 요청이 150,000개가 발생한다면, Cache Server에 해당 Key가 존재하지만 서버 부하가 높아져 응답할 수 없어 Timeout이 발생하고 50,000 개의 요청은 DB Server로 보내지게 된다.
Hot Key에 대한 일반적인 해결책
- Query Off (Read From Secondry)
- Read Replica를 여러 개 생성해두고 요청을 나누어 처리한다.
- Write는 Primary, Read는 Secondary를 사용해서 Read의 부하를 줄인다.
- Local Cache
- API Server 내에서 특정 Key에 대한 Value를 캐시해두고 응답한다.
- 데이터가 변경되었을 때, 이를 통지 받는 메커니즘이 필요하다.
- 변경 통지가 없다면, TTL이 끝날 때까지 데이터의 불일치가 발생한다. -> Client-Side Caching을 사용해서 해결할 수 있다.
- Multiple Write And Read From One
- Hot Key를 여러 Server에 저장하고 요청을 나누어 처리하며, Update 가 발생 시 여러 Server 전부를 Update한다.