방금 서버 문제로 다수의 롤백, 랭킹오류가 발생했습니다

문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.

  • 뒤끝 SDK 버전 : 5.6
  • 프로젝트명 : 이세계 소녀 키우기
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 :

안녕하세요 픽셀판타지아 개발자입니다.
방금 발생한 서버 오류로, 새로운 row가 insert되는 기 해결된 이슈가 재발생했습니다.

추가로, 오류가 발생한 시점에 랭킹콘텐츠들 플레이한 유저의 점수가 0점으로 갱신되는 문제가 다수 발생했습니다.

일전 미팅에서 말씀드렸던 랭킹 점수가 0점으로 갱신되는 오류와 관련해서, 클라이언트 측의 문제를 조사하고 있었으나, 서버 오류와 함께 랭킹이 0점으로 등록되는 것을 보았을 때 서버사이드 문제가 있는지 검토 부탁드립니다.

좋아요 1

이럴 때 마다 롤백이슈가 대량으로 발생해서 업무가 완전히 마비됩니다…
서버의 데이터를 신뢰할 수가 없으면 어떻게 서버를 기준으로 유저들의 데이터를 보존하고, 갱신해주는 처리를 어떻게 합니까…

좋아요 1

그리고, 서버 상태에 대한 알림 조치가 거의 전무합니다.
유저들에게 발생하는 오류가 서버문제인지, 저희가 개발한 클라이언트 문제인지 추측으로 맞춰야 하는문제.
오류가 생겼는지 유저들의 반응을 보고 뒤늦게서야 커뮤니티를 들어와 확인할 수 있는 문제.
만약 저희가 서버 오류를 발견한 최초 제보자라면, 현재 서버가 이상이 있는지 즉시 확인할 수도 없습니다…

서버가 정상인지, 가동은 어떻게되고있는지, 프로토콜 세션통신이 잘 작동하고 있는지…
적어도 서버가 다운되거나 문제가 발생하면 긴급하게 알 수 있게 경계시스템이라도 구축이 되어야 개발팀이 실시간으로 대응을 하거나, 유저들에게 안내를 할 수 있거나 하지않습니까…

좋아요 1

동감 합니다. 최근 랭킹 관련 이슈에서도 몇 번 발생하여 저도 테이블을 수정한 경험이 있습니다.

서버 머신에 문제가 생기는 건 어쩔 수 없는 이슈라 생각이 됩니다

  1. AWS에서 머신 회수 등과 같은 절대 피할 수 없는 이슈
  2. 특정 게임에 흥행에 따라 예상보다 유저수의 폭등
  3. 개발자의 실수로 인해 디도스급의 요청

하지만 데이터베이스에 Primary 키, 유니크 키가 괜히 있는 것도 아니고 같은 유저 로우(= uid)가 겹쳐서 들어가는 건 있을 수 없는 일이라고 생각 합니다.

뒤끝 측에서도 해당 부분의 로직 점검이 꼭 필요해 보입니다.

좋아요 1

뒤끝 서비스중 이해가 가지 않는건 각 API 별로 health-check를 할 수는 없는건가요?
2020.11.27에 DNS관련 큰 문제가 생긴 후 수정을 할 것이라고 하시고, 결국 아직까지 추가된것도, 결정된것도 없습니다. Health Check 방법 문의 - Hassan님의 글 #2

왜 매번 문의를 '개발사’가 해야하나요? 모니터링 시스템이 이뤄지고 있기는 한가요?

아무리 봐도 , 지금까지 겪어본 바로는 뒤끝을 이용하는 개발사중 먼저 특정 개발사가 오류를 파악하여 알게되면.
그 이후에 판단하고, 수정하고, 공지를 하는 느낌
인건가요? 자체 모니터링 자체가 안되는 느낌인데요.

healthcheck라도 빨리 개발 해주세요. 이런 이슈 생길때마다 리뷰는 안좋게 달리고, 서비스 개판이라면서 매번 유저가 떨어져 나가는데 항상 저희가 해결할 수 없는게 없네요.

좋아요 2

저도 그부분에 대해서 매번 제보했는데,
항상 똑같습니다.
이번 계기로 좀 고쳐졌으면 좋겠네요.

안정화 되는데로 빠른 공지 부탁드립니다.

404 에러 현상 복구 완료되었습니다.
공지사항을 통해 상세 내용 안내드리겠습니다.
이용에 불편드려 죄송합니다.

접속 안되는 에러(이번엔 404) 뿐만 아니라 현재 자꾸 row가 중복 해서 쌓이는 현상이 있습니다.
아마 클라이언트 입장에서는 indate를 제대로 못읽어온다거나, row가 잘못 쌓인다거나…

이유는 여러 가지 일텐데 저희 유저들 말로는 오늘 하루 종일 접속 안하고 점검 끝나고 접속하니까 롤백 됐다는 이야기를 했습니다.
데이터를 확인 해보니 row가 중복해서 쌓여 있는 현상입니다.

다른 게임에서도 지속적으로 발생하는 거 같은데 이 부분에 대한 언급 좀 제발 해주세요.(고치고 있다거나, 고치려고 한다거나…)

저희 게임에서도 초기에 row가 중복해서 쌓이는 문제가 발생했었습니다.
관련하여
https://community.thebackend.io/t/topic/3396/2

위 토픽 게시글 검토해보시기 바랍니다.

언제나 서버에 요청보내는 Load가 실패할 수 있다는 가정을 두고 로직을 설계해야하며,
Update또한 마찬가지입니다.
Insert하는 시점에 정말로 해당 유저의 row가 없는지2차, 3차적으로 검사하고 insert를 해주며, update시에도 동일합니다.

서버에 보내는 요청을 무조건신뢰할 수 있는 방법이 가장 좋겠지만,
모든 요청이 실패한다는 가정을 전제로 일단 안정화 처리만 해놓은 상태입니다

  1. 초기 load 시에 실패(isSuccess == false)하면 게임 자체 접속을 불가능하게 해놨습니다.
  2. 마찬가지로 row.Count == 0인 경우에만 insert 하도록 되어 있습니다.
  3. 12시간 마다 토큰 refresh를 하고 있으며, 토큰 refresh 실패 시에 게임을 종료 시킵니다.

혹시 2차, 3차 검증이 insert할 때 마다 select 하시는 걸까요 ?

저도 처음에는 로그아웃과 같은 상황을 의심 했으나, 오늘은 접속조차 하지 않은 유저가 접속하자마자 row가 중복 되는 현상을 발견하여 매우 당황스럽네요

load시엔 실패시 지정횟수만큼 시간을 두고 재요청하며,
insert시엔 get데이터 후 404에러(not found)인 경우에만 insert를 합니다.

처리는 비슷하게 해놓으셨을 거라 생각합니다.

일단은 위 처리로 특수한 케이스를 제외하고의 row가 여러개 생기는 오류는 막아졌다고 생각하였습니다만,
오늘의 경우엔 서버의 문제로 인해 row가 여러개 생기는 문제가 재발생했습니다.

아마 서버 문제로 데이터가 있음에도, 그냥 404에러가 떨어져서 그런것이라 생각합니다.

클라이언트 입장에선 서버에서 떨어지는 404는 정말로 데이터가 없다는 약속이니 이를 신뢰하고, 새로운 데이터를 insert하는 것이지요…

접속조차 하지 않은 유저가 처음 접속하였을 때 서버에러로 동일한 문제가 발생하지 않았을까 생각합니다

2월 28일에 랭킹 이슈 전까지 이런 이슈가 한 번도 없었거든요
(제가 뒤끝을 잘못 사용하여 생긴 이슈들 제외)

요새 뒤끝을 사용하는 게임들 보니까 같은 이슈가 계속해서 발생하고 있는 것 같더라고요…

오늘도 마찬가지로 404 not found에 경우는 해당 row가 아니라 테이블 자체가 없다는 문제로 보이는데, 그래서 접속이 아예 되지 않았습니다(isSuccess == false인 경우 게임 접속 자체를 막음)

혹시 이상 현상으로 인해 CS 처리가 늘어날까 서버도 점검으로 돌려서 모두 게임에서 접속 종료를 시켰습니다.

그래서 제 생각엔 28일 랭킹 이슈와 오늘 404 not found 이슈와 전혀 다른 곳에서 문제가 생기고 있는지 확인이 꼭 필요해 보입니다.