데이터베이스를 사용하는 분산 C ++ 게임 서버


11

데이터베이스를 사용하는 C ++ 턴 기반 게임 서버가 현재 평균 클라이언트 수 (플레이어)와 맞지 않기 때문에 모든 클라이언트가 계속 남아있는 여러 대의 컴퓨터와 데이터베이스로 확장하고 싶습니다. 단일 게임 세계 (서버는 서로 통신하고 여러 데이터베이스를 사용해야합니다).

최상의 방법으로 설명하는 튜토리얼 / 책 / 공통 표준이 있습니까?

답변:


8

"단일 게임 세계 내에서 유지"에 대한 MMO 용어는 단일 샤드 입니다. 이브 온라인 은 모든 플레이어를 하나의 샤드로 채우는 유일한 MMO입니다.

운 좋게 그들은 그들이 어떻게하는지에 대한 매우 유익한 기사 를 출판 했습니다.


(출처 : gamasutra.com )

나쁜 소식입니다. EVE 온라인 기술은 일반적으로 적용 할 수 없습니다. 그들의 솔루션은 그들의 특정 장르와 구현에 절대적으로 맞춰져 있습니다.
참고 : 모든 EVE 온라인의 슈퍼 팬시 단일 샤드 네트워크에는 하나의 데이터베이스 를 사용 합니다. 분산 데이터베이스를위한 확장 가능하고 일관된 중간 정도의 실시간 솔루션을 설계 할 수 없었습니다.

어떻게했는지 읽어 보면 소유주 솔루션을 설계하는 데 도움이됩니다. 그러나 매우 어려운 문제 를 해결하려고합니다 .

게임 서버를 배포하는 대신 먼저 다른 길을 탐색하는 것이 좋습니다.

  • 게임 서버를 프로파일하십시오.
    • 서버 코드를 최적화하여 문제가있는 경우 CPU 부담을 줄이십시오.
    • 클라이언트와 서버 간의 통신 프로토콜을 최적화하여 네트워크 채터를 줄입니다.
  • 게이머 서버와 데이터베이스 통신을 최적화하십시오.
    • 쿼리 최적화 프로그램을 실행 한 다음 적절하게 변경하십시오.
    • DB 상호 작용을 최소한으로 줄입니다
  • DB를 별도의 머신으로 이동하십시오.
    이것은 종종 톤을 돕는다. 가능하면 DB를 동일한 로컬 네트워크에 유지하십시오. 그러나 서버 하드웨어에서 실행되는 유일한 게임 서버 인 경우 게임 서버가 훨씬 더 조잡 해 지도록해야합니다.

"전공"을 어떻게 정의하고 있습니까? Loathing의 왕국은 단일 샤드를 사용합니다. 모두 같은 팜 빌드 샤드를 공유합니다. Star Trek Online과 Champions Online은 모두 단일 샤드 모델이지만 인스턴스 영역을 사용합니다.

SQL 데이터베이스를 사용하는 대신 MongoDB와 같이 클러스터링 및 샤딩을 위해 설계된 noSQL 솔루션을 사용할 수도 있습니다.
Philipp

1
@JoeWreschnig 웹 게임은 실시간 게임이 아닙니다. 훨씬 쉬워요. Star Trek Online과 Champions Online에 얼마나 많은 플레이어가 있는지 잘 모르겠습니다.
o0 '.

4

첫 번째 조치는 게임 서버에서 직접 데이터베이스 액세스를 분리하고 사용 특정 미들웨어를 사용하여 서버에 대한 데이터 (예 : XML, JSON)를 준비해야합니다. 이들은 많은 수의 데이터베이스를 처리 할 수 ​​있으며 응용 프로그램 별 캐싱 옵션을 제공하는 것이 더욱 중요합니다. 가능한 모든 것을 캐시하고 필요할 때만 db를 잔소리하십시오. 시나리오에서 최상의 성능을 달성하기 위해 많은 작은 쿼리 대신 큰 반입을 거의하지 마십시오.

선택한 데이터베이스를 사용하면 사용 가능한 데이터베이스 리소스를 쉽게 확장하고 결과를 더 빠르게 제공 할 수있는 클러스터를 운영 할 수 있지만 많은 경험과 설정 및 유지 관리를위한 전담 데이터베이스 관리자가 필요합니다. 인디 예산도 마찬가지입니다.


1
여러 서버가 하나의 데이터 세트에 액세스하기를 원할 때까지이 모든 것이 잘 들립니다. 즉, 추가 조정없이 응용 프로그램 측 캐시가 동기화되지 않아서 게임 오류가 발생하고 최악의 경우 데이터 손실이 발생합니다. 나는 당신이 말한 것에 동의하지 않지만 원래 포스터는 진행하기 전에 서버 간 일관성 문제를 고려해야합니다.
Kylotan

미들웨어는 데이터 캐싱 및 데이터 제공을 담당하는 데이터 터널입니다. 그러나 서버에만 데이터를 제공하고 (클라이언트에 절대로) 서버는 시작할 때 모든 게임 관련 마스터 데이터를 캐시합니다. 따라서 많은 데이터 소스와 많은 데이터 요청자가 언제든지 연결될 수 있습니다. 내가 작업하는 MMO는이 체계를보다 효율적으로 사용합니다.
Konrad K.

서버 간 일관성 문제를 어떻게 해결했는지는 설명하지 않습니다. 어느 시점에서 서버는 서로간에 데이터를 동기화해야하거나, 무작위 연결 해제, 중복 플레이어, 중복 항목, 누락 된 퀘스트 등으로 나타나는 경쟁 조건이 있습니다.

데이터는 절대 복제되지 않습니다. 항상 특정 개체를 담당하는 서버는 하나 뿐이며 필요할 경우 해당 개체를 다른 서버로 전달합니다. 객체는 플레이어 제어 객체를 포함하는 클라이언트 연결입니다. 그러나 이것은 마스터 서버를 통해 이루어지며 서버간에 토론됩니다. 그래서 우리는 두 가지 종류의 데이터, 즉 데이터베이스 정보 (원래 게시물과 관련이 있음)와 런타임에 생성되어 다중 서버 mmo로 전달되는 게임 객체를 처리합니다. 이들 중 어느 것도 경쟁 조건에 속하거나 응용 프로그램 수준에서 복제되어서는 안됩니다.
Konrad K.

3

게임 서버 관련 : 일반적인 전략은 각 서버가 게임 세계의 일부를 관리하는 여러 서버를 사용하는 것입니다. 각 사용자는 일반적으로 주변에서 일어나는 일만 알면되므로 세상을 지역별로 나누는 것이 좋습니다. 불행히도 폐쇄 구역과 플레이어로 구성된 세계 대신 경계가없는 열린 세계가있을 때 훨씬 복잡해집니다. 열린 세계가있는 경우, 플레이어를 원활한 방식으로 영역간에 이동시키는 방법과 서버 경계 근처의 영역을 동기화하는 방법이 필요합니다. 까다로운 문제입니다.

데이터베이스 관련 : SQL 데이터베이스는 일반적으로 확장 성이 떨어집니다. 배포 용으로 설계되지 않았습니다. 그러나 현재 여러 서버에 분산되도록 설계된 MongoDB 또는 Cassandra와 같은 새로운 NoSQL 데이터베이스 추세가 있습니다. 서버를 추가하기 만하면 용량을 훨씬 쉽게 추가 할 수 있습니다. 그렇다면 모든 대형 게임이 왜 그 게임으로 전환되지 않습니까? 때문에:

  1. SQL 데이터베이스는 40 년 이상 존재하며, NoSQL 데이터베이스는 몇 년 동안 만 존재합니다. 아직 가장 효율적으로 사용하는 방법에 대한 노하우가 없으며 개발이 빠르게 진행되고 있습니다. 시장에는 경쟁이 치열하고 완전히 호환되지 않는 제품이 많이 있으며, 어떤 제품이 생존하고 몇 년 안에 더 이상 사용되지 않고 중단 될 것이라는 징후는 없습니다. 대부분의 대기업은 NoSQL 데이터베이스의 알려지지 않은 위험보다 알려진 SQL의 단점을 선호합니다.
  2. 이들은 SQL 데이터베이스와는 매우 다르게 작동하며 전체 지속성 전략을 재고해야합니다. 이로 인해 전체 소프트웨어 아키텍처에서 크게 변경 될 수 있습니다.

따라서 프로젝트가 이미 발전한 상태에서 다른 데이터베이스 솔루션으로 전환하면 큰 위험과 시간과 에너지를 많이 투자 할 수 있습니다.


0

아닙니다. 이것은 아직 해결되지 않은 매우 어려운 영역입니다.


"템플릿"( "C ++ 디자인 패턴"이 아닌) 솔루션이있을 수 있습니까? MMORPG가 많이 있습니다.
Slav

2
대부분의 MMO는 데이터베이스에 대한 절대 재해로 지원됩니다.

특히 MMO는 종종 데이터 지속성에 대해 매우 다른 접근 방식을 사용하며, 이는 자체 게임 디자인에는 적합하지만 다른 게임 디자인에는 적합하지 않은 경우가 많습니다. 게임 디자인이 가장 중요한 부분이므로 데이터 지속성 및 배포 전략을 지정하지 않으면 적절하게 지정할 수 없습니다. ( "어떤 종류의 데이터가 있는지, 얼마나 자주 변경되는지, 왜 여러 서버에 단일 세계를 배포하고 싶다고 생각하는지에 대해 더 구체적인 질문을하십시오."
Kylotan

0

나는 이것이 오래되었다는 것을 알고 있지만 ....

실제로 이것에 초점을 두 영역이 있습니다.

여러 서버에 응용 프로그램을 배포해야합니다. 여러 서버에 데이터베이스를 분산시켜야합니다.

그리고 둘 다에 대한 중복성이 있어야합니다.

이를위한 몇 가지 오픈 소스 솔루션이 있습니다. Farmville은 MemSQL / Couchbase를 사용하는 좋은 예입니다.


1
여러 서버에 데이터베이스를 분산시키는 것은 확실히 해결 된 문제입니다. 불행히도 DB 액세스를 최소로 유지하는 온라인 게임에는 일반적으로 중요한 요구 사항이 아닙니다. 반대로, 여러 서버에 실제 게임 플레이를 배포하는 것은 여전히 ​​해결 된 문제가 아닙니다.
Kylotan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.