서버 재시작 / 캐시 만료시 첫번째 요청 처리 문제 #1079
Replies: 4 comments 1 reply
-
추가적으로, 서버를 재시작하면 Spring 쪽에서도 첫번째 요청은 처리가 오래 걸립니다.
관련해서 찾아보니 아래와 같은 질문이 스택 오버플로우에 있었는데 https://stackoverflow.com/questions/63019528/why-are-spring-rest-services-slow-on-the-first-request |
Beta Was this translation helpful? Give feedback.
-
@ss0ngcode 의견을 여기에 옮김아직 코드를 제대로 살펴보지 못해 정확한 내용은 파악하지 못했지만 이슈 내용만 읽어보면 랭킹이라는건 서비스에서 정한 사용자에게 노출할 내용이기 때문에 이걸 사용자들이 조회했을 때 캐싱처리를 하는것 보다는 서버에서 랭킹에 변동이 일어나야 하는 경우 해당 내용을 서버에서 감지해 캐싱을 미리 처리하고 사용자들은 캐싱된 내용만 조회하는게 옳지 않을까 싶습니다. 일반적인 게시판에서 자주 조회되는 내용을 캐싱해서 빠르게 보여주는 것과 서비스에서 정한 랭킹을 캐싱해서 빠르게 보여주는건 차이가 있다고 생각해요. 게시판 인기글 캐싱같은건 사용자들이 주체적으로 정해서 캐싱이 되는거고 |
Beta Was this translation helpful? Give feedback.
-
@ss0ngcode 네 말씀하신 대로 책임은 랭킹이 지는게 맞아 보입니다 서비스가 시작하거나 |
Beta Was this translation helpful? Give feedback.
-
랭킹에 대한 캐싱은 첫 번째 사용자가 책임지게 되면 그 사용자는 큰 불편함을 겪을 수 있는 문제라고 생각해요. Caffeine Cache의 경우, 캐시가 만료된 것을 감지해서 서버에서 데이터를 가져오는 기능은 아마 없는 것으로 알고 있어요 (정확 x) 서버가 재실행되어도, 캐시가 만료되어도 재갱신할 수 있는 최선의 방법은 redis라고 생각합니다. 결론 : Redis에 대해 알아보고 해당 전략이 있다면 도입 |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
현재 캐싱은 모두 Caffein Cache로 되어 있습니다.
⏭ 다음 두가지 상황에서 응답이 오래 걸립니다.
랭킹 서버가 재시작되자마자 들어온 사용자거나,
캐시 기간이 만료된 이후 처음으로 API 요청한 사용자일 경우
랭킹 획득 과정에서
800m/s~ 900m/s
의 API 요청을 기다리게 됩니다.약간 한명의 희생이 다른 사람들을 돕는 느낌...?
그래서 이 희생을 사용자가 아닌 서버가 지게 하는게 맞지 않나 라는 생각이 들었는데요.
고민해봤을 때 2가지 방법이 떠오릅니다.
첫째, 캐시를 다른 프로세스로 분리합니다 --> ex.
레디스
나 혹은 다른 별도 캐시 서버이렇게 하면 해당 서버가 재시작되더라도 캐싱 데이터는 유지됩니다.
단, 변경된 코드가 캐싱에 연관된 경우, 캐시 데이터를 파기하는 로직이 필요합니다.
둘째, 캐시 업데이트 책임을 사용자가 아닌 Batch 서버에게 준다.
사용자 요청을 받고, 처리과정에서 캐시를 업데이트하는 것이 아니라
서버에서 별도로 데이터 만료를 체크합니다.
만약 만료된 경우, 서버가 해당 로직을 처리해서 캐시를 최신화합니다.
이 부분은 토의를 좀 해보고 싶습니다.
관심을 가져볼 만한 이슈인지, 그냥 두어도 괜찮은지 등 자유롭게 의견 듣고 싶습니다.
의견 부탁드립니다.
@sangwonsheep @ss0ngcode
Beta Was this translation helpful? Give feedback.
All reactions