.NET Core 이상의 .NET 제품들에서 Linux나 Mac 에서 동작하면 IOCP 말고 각 OS의 네이티브 비동기 방식을 채택하는 지는 아직 모르겠습니다. (오픈 소스니까 뜯어보면 될 것 같지만 어디서부터 봐야하는지 너무 어렵네요…ㅠㅠ)
뭐 위 질문은 번외였고, 질문은
IOCP는 Windows 종속 기능인데, Linux Docker Container로 이미지를 빌드해서 사용할 수 있는지? 입니다.
저장 프로시저를 걷어내고, 3 Tier 방식으로 하기 위해 쿼리를 호출하는 aspnetcore Http 서버야 뭐…당연히 Linux Container로 가능한 부분이겠지만, 과연 클라이언트와 직접 연결되는 Socket 서버는 IOCP를 사용한 Linux Conainter의 운용이 가능한지 입니다.
이런 고민보다는 차라리 게임 서버를 epoll 방식으로 바꿔서 linux container를 쓰는게 맞지 않나 하는 의문도 들겠지만, 게임서버 개발자중에서 epoll방식을 다루는 분들은 수요가 적은 것 같습니다. Java vs C# 했을 때 언어의 성능의 문제보다는 한국이라는 전자정부 프레임워크가 존재하는 환경의 문제 로 Java 개발자가 압도적으로 많은 한국의 시장처럼요.
따라서 대한민국의 게임 서버 개발자라면 Windows Server에서 IOCP 이용을 하는 것은 기본으로 깔고 가야하는 전제인 것 같습니다.
대한민국의 많은 게임 회사들이 Docker를 어떻게 도입해서 운영하시는 지는 모르겠지만, 아까 위에서 제가 언급한 Http API 호출의 정도야 쉽게 도입이 가능한 부분 같지만, IOCP가 필수로 요구되는 서버의 경우 Docker Container를 도입해서 사용하는 사례가 있을까요?
그리고 국내에 RIO로 개발된 MMORPG 게임이 몇개 있다고 합니다. (역시 MMORPG는 윈도우서버인가보네요)
epoll이나 io_uring으로 개발된 MMORPG 게임서버 사례는 잘 모르겠습니다.
아래는 RIO를 사용하는 예제? 인 것 같아서 기록 목적으로 올려봅니다.
이런 궁금증을 올렸던 이유는, 최초 질문 글에 언급했던 대로
MMORPG 게임 도메인에서는 Scale Out이 필요가 없는 환경이라고 생각하여 Docker의 도입이 비용적으로 봤을 때 가성비가 떨어진다는 생각이 있었기 때문입니다.
서버를 몇 개 생성해둘지 결정하고 유저가 어느 서버에 캐릭터를 생성할지 결정하는 MMORPG 특성상 트래픽 로드밸런싱이 필요 없다고 생각한 것이고, (본인이 캐릭터를 생성해둔 서버가 있는데 그 서버가 Auto Scale out 환경에서 서버가 사라지거나 생성되거나 그러면 안되겠지요.) 그런 의미에서 Docker와 k8s의 도입이 다른 게임서버라면 모를까 MMORPG에서는 컨테이너가 죽었을 때 살려주는 기능 외에는 어느 부분에서 필요한지 경험이 없어서 감이 잘 안옵니다.
그리고 게임서버 개발자들이 어떤 소켓 라이브러리를 사용하시는 모르겠지만 찾아보니 IOCP, epoll의 방식을 모두 지원하는 소켓 라이브러리들도 있는 것 같습니다.