BogusKebab
40
2018-08-04 01:27:45
5
397

스타트업 게임 서버 질문!(트래픽 이슈)


안녕하세요 선배님들

취미로 1인 인디 게임을 게발하고 있는 사람인데요.

언리얼 엔진 가지고 놀면서 이것저것 해보고 있습니다. 

최근에는 100명 정도 접속할 수 있는 서버를 만들어보고 있는데요. 통신 방식은 TCP/IP 방식으로 하고 있습니다.

제가 만드는 게임이 3인칭 슈팅 게임이라 유저들 위치와 게임내의 AI들의 위치를 실시간으로 업데이트 해야하는데요.

특히 서버에서 AI들의 행동을 계산해서 최대 100명 정도의 접속한 사람들에게 AI들의 정보를 실시간으로 뿌려주어야 합니다.

근데 AI 한 개체당 50byte의 정보를 업데이트 해야하는데, 이게 한 게임당 2000 개체 정도 되다 보니 초당 보내야 하는 데이터가 상당해졌습니다. 그래서 계산해보니 100명의 유저들에게 초당 10mbyte 정도 데이터를 보내줘야하 하네요.. 근데 Agent만 있는게 아니라 유저들 정보도 있어서 이것 까지 더하면 초당 18mbyte정도 나올 것 같습니다. 근데 이게 한달 트래픽 양으로 따져 보니 어마무시하게 되더군요 ;;

초당 20mbyte정도의 트래픽이 발생한다고 가정하면 서버를 24시간 30일 동안 구동하면

약 50 테라 바이트 정도의 어마어마한 트래픽이 계산 되는데요..;;

이게 다른 게임 사들도 저보다 많으면 많았지 덜하진 않을 거라고 생각이 드는데요.

일반 상용 게임은 이정도의 트래픽을 어떻게 감당하나요? 

만약 서버를 만들고자 할 경우에는 어떻게 하는게 좋을까요?

글에 두서가 없었지만 궁금하여 이렇게 올립니다.




0
0
  • 답변 5

  • EF
    781
    2018-08-04 05:24:09

    초당 전송량이 100명당 18MB이면 1인당 180kB 정도인 것 같네요. 제가 서버 전문가는 아니지만 비트로 환산하면 1.4Mbit/s 인데 이건 상당히 높은 수치인 편이에요. 와우 같은 경우는 평소에 1인당 20MB/h 수준이라는데 이걸 환산하면 40kbit/s 정도네요. 그런데 이마저도 클라이언트 트래픽으로 계산한거라 만약 클라-클라간 다이렉트 통신이 이루어지는 것이 있다면 클라-서버간 트래픽은 이보다 더 낮겠죠.

    1
  • OkkyUser
    3k
    2018-08-04 05:59:07

    ... 데이터를 압축해서 보내면 어떤가요? 

    1
  • zepinos
    16k
    2018-08-04 12:32:24

    1. 가시거리의 유닛이 2000 개일까요? 가시거리 유닛만 보내줘도 되니까 가시거리에 대한 계산 로직이 서버에 있어야겠네요.


    2. 클라이언트끼리 같은 필드에 있는 게임이라면 클라-클라 간의 홀펀칭 등을 통한 데이터 전송을 통해 서버 통신을 줄여도 되고, 경우에 따라선 클라 중 하나가 방장이 되서 유닛 정보를 관리하는 방법도 있습니다.

    1
  • BogusKebab
    40
    2018-08-04 12:43:40

    위에 답변 주신 분들 정말 감사드립니다.

    말씀해준 힌트로 트래픽을 줄이는 방법을 구상중에 있습니다.

    //zepinos 

    1. 월드 상에 섹터가 총 200개로 분할되어 있고 유저들이 해당 섹터를 돌아 다니면서 플레이하는 샌드 박스 형식입니다. 그런데 모든 플레이어가 한 장소에 모일 경우도 있어 최대 2000으로 잡은 것입니다. 유저가 속한 섹터에 따라 전송하는 데이터도 개별적으로 처리합니다. 

    2. P2P 방식도 고려했지만 단일 서버에서 AI에 대한 GPU 연산을 진행하기 때문에 어차피 서버에서 AI의 행동에 대한 계산 결과를 클라이언트에게 전송해야 하기 때문에 고려하지 않았습니다.

    //OkkyUser

    소켓으로 보낼 데이터를 압축해서 보낼 방안을 구현중에 있습니다. boost에서 제공하는 zlib과 socket을 이용하여 전송하는 방법에 대해 고민하고 있습니다. 그리고 apache nginx에 데이터 압축하는 기술이 있다고 하여 그것도 보고 있구요.. 얼마나 줄어들지는 실제로 구현해서 계산해보는 방법 밖에 없겠네요 ㅠ

    계산된 AI 데이터 뭉치를 압축해서 redis에 push해서 뿌리는 방법을 구상중인데요 쉽지가 않네용

    //EF 

    요즘 실시간으로 스트리밍 하는 큰 규모의 서비스도 많은데 그런 업체들은 도대체 트래픽 관리가 어떻게 이루어지는지 정말 궁금하네요.. 소규모 게임만 해도 이정도인데 ㅠ 게임 런칭 때 괜히 퍼블리셔 끼고 하는게 아닌가 보네요 ㅠ




    1
  • 야옹이돼지
    360
    2018-08-04 19:27:47

    어떻게든 같은 곳에 모일 수 없도록 해야 합니다.

    한 장소에 2000 명 모여서 실시간 동기화 하는 경우는 상용 게임 서버에서도 매우 어려운 일입니다.

    당연히 모이는 사람 수 제곱에 비례해서 트래픽이 늘어나기 때문에 감당이 안됩니다.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.