Ask Your Question
0

Missing ApiService finisher 로그 질문드립니다.

asked 2018-05-18 09:24:00 +0900

casper7609 gravatar image

안녕하세요 현재 Azure에 서버를 배포해서 베타 테스트를 진행하는중 몇가지 문제가 있어서 질문드립니다.

1) 운영툴에서 서버의 api를 콜하면 W0518 08:43:05.342229 10327 api_service.cc:159] Missing ApiService finisher: "GET /users/ 와 같은 경고가 지속적으로 뜨면서 반응이 없습니다. 제 로컬 컴퓨터에서 테스팅할때는 문제가 없었는데 배포 뒤에 이 현상이 계속 발생하네요.

2) E0518 08:41:44.603549 10357 mariadb.cc:1439] Reconnect to database servers(2 connections): address= E0518 08:41:47.508358 10357 mariadb.cc:1146] disconnected from database: host=... 와 같은 에러 문구가 지속적으로 뜨는데 db쪽의 connection timeout 변수와 관계가 있을까요?

3) 현재 flavor를 사용하지 않고 단일 서버로 일단 개발했는데 zookeeper를 통해서 머신 2~3대에 동일한 단일 서버를 배포해서 분산 처리가 되는지 궁금합니다.

4) 서버에서 클라이언트의 tcp 세션이 끊어졌는지 알수 있는 방법이 있을까요? 예를들어 session.IsConnected 같은 방식이 있을지요?

감사합니다.

edit retag flag offensive close merge delete

4 answers

Sort by » oldest newest most voted
0

answered 2018-05-18 09:30:31 +0900

Jinuk gravatar image

3

  • Flavor 가 동일한 서버가 여러대 존재하는 것에는 문제가 없습니다. 분산처리가 된다라고 말씀하시는게 생각할 수 있는 범위가 많은데, 아이펀엔진에서 보장하거나 제공하는 것은 아래와 같습니다. (기능이 많아서 간단한 것만 적었습니다. 자세한 사항은 레퍼런스 매뉴얼을 참고해주세요)

  • AccountManager 를 통한 분산 서버군 전체의 로그인 상태 관리

  • ORM을 사용한 경우, 한 번에 한 이벤트에서만 특정 디비 객체에 접근할 수 있게 제어
  • 서로 다른 서버에 있는 유저에게 메시지 전송
  • 아이펀엔진에서 제공하는 각종 서비스 (매치 메이킹, 빌링, 리더보드, dedicated server 관리, ...) 지원

만약 특정 서버에서 변경한 메모리 상태를 바로 다른 서버에서 보길 원한다면 해당하는 방식의 동기화는 지원하지 않으며, 클라이언트 이동 기능으로 특정 서버로 보내거나, RPC메시지를 통해서 동기화해야 합니다.

edit flag offensive delete link more

Comments

음 제가 이해한 방식은 서버 머신이 A,B,C가 있고 거기에 각각 단일서버(인증,재화 등등 모든 기능 처리)를 설치하고 A머신에 주키퍼에 A,B,C의 단일 서버가 연결되서 클라이언트들이 A서버에 연결하면 A,B,C로 자동으로 분산되는게 아닌가 했습니다. 전부 ORM을 사용하구요.

casper7609 gravatar imagecasper7609 ( 2018-05-18 09:51:43 +0900 )edit

일단 분산서버 쪽으로 따로 프로젝트 만들어서 돌려봐야겠네요 답변 감사드립니다!

casper7609 gravatar imagecasper7609 ( 2018-05-18 09:52:33 +0900 )edit

분산서버인 경우에 자동으로 클라이언트를 이동시켜주진 않습니다.

  • 서버의 부하 상황을 알 수 있는 값을 만드시고
  • 해당 값에 따라서 AccountManager::RedirectClient 로 다른 서버로 옮기기

를 쓰시는게 좋아보입니다.

Jinuk gravatar imageJinuk ( 2018-05-18 10:48:22 +0900 )edit
0

answered 2018-05-18 09:31:48 +0900

Jinuk gravatar image

4

Session::IsTransportAttached() 혹은 Session::IsTransportAttached(transport_type) 함수를 이용해서 연결이 하나라도 되어있는지, 혹은 특정 타입의 연결이 있는지 확인할 수 있습니다.

edit flag offensive delete link more

Comments

오 그렇군요 감사합니다!

casper7609 gravatar imagecasper7609 ( 2018-05-18 09:42:08 +0900 )edit
0

answered 2018-05-18 09:25:46 +0900

Jinuk gravatar image

updated 2018-05-18 09:27:08 +0900

  1. W0518 08:43:05.342229 10327 api_service.cc:159] Missing ApiService finisher: "GET /users/ 는 해당 HTTP API 호출에 대해서 응답을 보내지 않으면 (보낼 때까지 혹은 연결이 끊길 때까지) 지속적으로 로그가 출력됩니다. 해당 URL로 들어온 요청을 처리하는 함수가 HTTP 응답을 보내지 않는 경우가 있는지 확인해주세요.
edit flag offensive delete link more

Comments

음..코드상으론 private static funapi.http.Response OnGetUsers(funapi.http.Request request) { funapi.http.Response response = new funapi.http.Response (); try { //할거 } catch { } return response; } 이런식으로 해놓아서 무조건 보낼것 같은데 좀 더 확인해보겠습니다 감사합니다!

casper7609 gravatar imagecasper7609 ( 2018-05-18 09:41:16 +0900 )edit
0

answered 2018-05-18 09:26:49 +0900

Jinuk gravatar image

updated 2018-05-18 09:27:05 +0900

2 해당 로그는 데이터베이스 연결이 DB 쪽 타임아웃 후에 다시 연결할 때 나오는 메시지입니다. 해당 변수와 관련이 있으며, 나온다고 해도 크게 문제되진 않습니다. (짧은 시간 안에 지속적으로 연결에 실패하는 경우에는 데이터베이스 서버가 떠 있는지 확인해주세요)

edit flag offensive delete link more

Comments

아..알겠습니다. 로그 메세지가 쌓여서 조금 그랬는데 해당 변수를 조금 조절해봐야겠네요 감사합니다!

casper7609 gravatar imagecasper7609 ( 2018-05-18 09:37:32 +0900 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2018-05-18 09:24:00 +0900

Seen: 14 times

Last updated: May 18