[서버] Cache Invalidation(캐시 무효화)
캐쉬는 속도를 빠르게 하기 위해 참 다양한 곳에서 쓰이고 있습니다. CPU만 보더라도.. l1 캐쉬 l2캐쉬 등이 있고 컴퓨터 전체를 보더라고 메모리가 HDD/SSD의 캐쉬 역할을 하죠. 서버에서도 속도 향상을 위해 캐쉬를 사용합니다.
캐쉬를 사용하면 메모리의 속도가 HDD/SSD보다 빠르므로 많은 속도 향상을 기대할 수 있습니다. 하지만 이처럼 또 하나의 데이터 복사본?을 사용하면 consistency문제가 생깁니다. HDD/SSD에 있는 db에 변화가 생겼는데 캐쉬에는 그 수정내용이 반영이 안되어 있으면 문제가 되겠죠?
이런 상황에는 cache invalidation(캐시 무효화)이라 하여 캐쉬의 값을 갱신해야 합니다.
1. Write-through cache(동시기록 캐시)
write-through는 동시 쓰기의 뜻을 가지고 있습니다. 이 뜻이 의미하는대로 어떤 값을 갱신(write)해야 하면 캐쉬(메모리) 뿐만 아니라 HDD/SSD와 같은 저장장치에도 값을 쓰는 것을 말합니다.
메모리 뿐만 아니라 HDD/SSD에도 값을 저장하므로 데이터의 손실이 없으나 매번 HDD/SSD에도 값을 써야하므로 write속도가 상대적으로 느립니다.
2. Write-back cache
write-back chace에서는 어떤 값을 갱신해야 하면 캐시(메모리)에만 먼저 씁니다. HDD/SSD에는 항상 캐시의 수정 내용이 반영되지 않고 특정 시간/조건마다 반영됩니다. 이렇게하면 write에도 빠른 속도를 기대할 수 있습니다. 그러나 HDD/SSD에 바로 값을 갱신하지 않으므로 서버에 문제가 생기면 데이터가 손실될 가능성이 있습니다.
3. Write-around cache(No-write allocate 또는 write-no-allocate)
이 policy에선 어떤 데이터를 갱신해야할 때 메모리(캐시)에는 건너뛰고 바로 HDD/SSD에 값을 저장합니다. 그럼 캐시는 언제 쓰냐구요? 캐시는 read요청이 왔을 때 그 값이 캐시에 없으면 HDD/SSD로부터 값을 가져옵니다.
write가 많이 발생하지만 그 값을 다시 읽는 경우가 별로 없을 때 쓰면 좋을 것 같습니다.
참고
en.wikipedia.org/wiki/Cache_(computing)
댓글 영역