Slide 1

Slide 1 text

ロリポップ! for Gamers を 支えるインフラ 久米拓馬 @takumakume / GMO PEPABO inc. 2024.9.9 HosCon 2024

Slide 2

Slide 2 text

2 自己紹介 ホスティング事業部 エンジニアリングリード 久米拓馬 @takumakume ● 福岡在住 ● ペパボでの職歴 ○ インフラ: 3年 ○ バックエンド: 2年 ○ SRE: 2年 ○ エンジニアリングリード: 5月〜 ● 釣り・珈琲豆焙煎・ウイスキー買い漁り

Slide 3

Slide 3 text

GMOペパボのホスティング事業部 “ 技術の力でアウトプットのハードルを下げる ” ミッション

Slide 4

Slide 4 text

GMOペパボのホスティング事業部 … 他、全7サービスを運営 サービス開始から 23年 2024年2月リリース!

Slide 5

Slide 5 text

ロリポップ! for Gamers “ 誰でも簡単に マルチプレイが楽しめる ” 数クリックでサーバ を構築

Slide 6

Slide 6 text

タイムライン 2024/2/9 2/29 4/15 プロジェクト発足 無料モニター提供開始 正式版リリース 13 営業日 現在に至る

Slide 7

Slide 7 text

本⽇お話すること • ロリポップ! for Gamersのインフラ • サービスやアーキテクチャにおける後悔ポイント • インフラにおける現在の取り組み

Slide 8

Slide 8 text

ロリポップ ! for Gamersの インフラ

Slide 9

Slide 9 text

9 ロリポップ! for Gamersのインフラ 全体像 Frontend Backend (Go) コントロールパネル オンプレミスデータセンター Baremetal #1 (Ubuntu/LXD) Baremetal #n (Ubuntu/LXD) LXD Cluster VM #1 VM #2 VM #n ゲームサーバ Ceph Cluster

Slide 10

Slide 10 text

• オンプレミスデータセンター上のベアメタルサーバ を採用 • 競合他社に劣らない価格設定をすると、パブリッククラウドでは赤字 • canonical/maas を採用 • Metal-As-A-Service • ベアメタルサーバの管理と自動プロビジョニング 10 ロリポップ! for Gamersのインフラ

Slide 11

Slide 11 text

11 • canonical/lxd を採用 • VM、コンテナのオーケストレーター • サーバの効率的な運用のためにオーケストレーションツールは必須 • なぜ LXD か? • コントロールプレーンの導入が比較的楽である • VMとコンテナの両方を標準でサポートしている ロリポップ! for Gamersのインフラ

Slide 12

Slide 12 text

12 • Ceph を採用 • 分散ストレージシステム • ユーザのデータを特定のサーバに依存しない構成とし、耐障害性やメンテナンス性を を向上 ロリポップ! for Gamersのインフラ

Slide 13

Slide 13 text

13 主な機能の実装 ゲームサーバの操作 サーバの作成・起動・停止 など

Slide 14

Slide 14 text

14 主な機能の実装 ゲームサーバの設定変更機能 ゲームサーバ内のファイルや プロセスを操作している

Slide 15

Slide 15 text

15 主な機能の実装 サーバのプロビジョニングやサーバ内の設定変更は LXD APIで実装 Backend API LXD Cluster API LXD Agent ファイル、プロセス コントロールパネル VM ゲームサーバ ゲストOS内の操作は LXD Agent経由

Slide 16

Slide 16 text

16 LXDを使えばここまで 13日で作れます!

Slide 17

Slide 17 text

17 イメージ管理

Slide 18

Slide 18 text

18 すべてのゲームイメージの 開発と運用

Slide 19

Slide 19 text

19 イメージ管理 Ansibleを用いて ゲームイメージを開 発 Git build server LXD Cluster ︙ Github Actions Node Node Push Deploy Ansible

Slide 20

Slide 20 text

20 イメージ管理 distrobuilder は使っていない • LXD内部で使われている LXCでは一般的には distrobuilderが使われる • シンプルなYAMLでイメージ を定義できる。 https://linuxcontainers.org/ja/distrobuilder/introduction/

Slide 21

Slide 21 text

21 イメージ管理 なぜ Ansible ? • 社内的にAnsibleを活用していた • イメージ作成だけでなく、提供済みのユーザ向けのインスタンスへプロビジョニングをし たかった • 例えば、セキュリティアップデートやゲームのバージョンの追加 • distrobuilderはイメージを作るためのものであり、既存のインスタンスをプロビジョニングする ツールではない • Ansibleであればユーザ向けのインスタンスにプロビジョニングできる

Slide 22

Slide 22 text

22 複数LXDクラスタの管理

Slide 23

Slide 23 text

23 複数LXDクラスタの管理 • なぜ複数のLXDクラスタが必要になったか • 内部的な話として、ネットワークやベアメタルサーバの構成の都合 • どのような課題があるか • 前提としてLXDクラスタ同士でいい感じに連携してくれることはない • コントロールパネルのバックエンドアプリケーションがどの LXDクラスタにどのサーバが入ってい るかを判断する必要が出てきた • どこに新しくゲームサーバを作ればいいか判断する必要がある • LXDクラスタの増減をバックエンドアプリケーションが意識しなければならない • ホスト、認証情報等

Slide 24

Slide 24 text

24 複数LXDクラスタの管理 複数のLXDクラスタを透過的に取り扱えるミドルウェアを開発し対応 LXDCC LXD Cluster #1 コントロールパネル … LXD Cluster #2 … Backend API 「LXDCC」 LXD Cluster Cluster by @k1LoW

Slide 25

Slide 25 text

サービス、アーキテクチャの 後悔ポイント

Slide 26

Slide 26 text

26 サービス、アーキテクチャの後悔ポイント VPSベースのゲームサーバサービスとして始めた • 一般的にVPSはKernelを含むVM全体を操作する自由度と責務がある • 一方で、ゲームマネージャ機能とサーバ側の互換性を維持するために、メンテナンスを行う 必要がある • 責務が曖昧になっている Kernel OS ゲームサーバ、他 VM 利用者の責務 当社のメンテナンス

Slide 27

Slide 27 text

27 サービス、アーキテクチャの後悔ポイント • VPSではセキュリティ対応の責務も利用者にある • パッケージが古くなって脆弱性がある場合はどうする? Kernel OS ゲームサーバ、他 VM 利用者の責務

Slide 28

Slide 28 text

28 利用者にとって、 「ゲームをプレイする」 ことが価値である サーバの管理をしたいわけではない

Slide 29

Slide 29 text

2024/2/9 2/29 4/15 プロジェクト発足 無料モニター提供開始 正式版リリース 13 営業日 現在に至る この辺りで気づく

Slide 30

Slide 30 text

30 サービス、アーキテクチャの後悔ポイント VPSではなくゲームサーバとしての提供に転換した • rootユーザを渡さない設計に変更 • セキュリティ対応等のメンテナンスは当社で行う • 利用者がゲームをプレイすることに集中できるサービスへ Kernel OS ゲームサーバ、他 VM 当社の責務

Slide 31

Slide 31 text

インフラにおける現在の取り組み

Slide 32

Slide 32 text

32 不要なコストを落として より良いサービスへ

Slide 33

Slide 33 text

33 Frontend Backend (Go) コントロールパネル オンプレミスデータセンター Baremetal #1 (Ubuntu/LXD) Baremetal #n (Ubuntu/LXD) LXD Cluster VM #1 VM #2 VM #n ゲームサーバ Ceph Cluster VPSベースのサービスとして始めたため VMで提供している

Slide 34

Slide 34 text

34 コンテナ化して リソース効率を上げる

Slide 35

Slide 35 text

35 • LXDを採用しているのでVMだけでなく、システムコンテナが利用できる • システムコンテナはコンテナ実行時に initを実行することを前提としている。つまり、複数プ ロセスを上げることができる。 • ゲームサーバ、SSH、etc… などを同時に実行できる。 https://ubuntu.com/blog/lxd-vs-docker コンテナ化について

Slide 36

Slide 36 text

36 • Dockerはコンテナ実行時にinitを実行しない。アプリケーションプロセスを実行することを前 提として作られている。つまり、1コンテナ1プロセス。 • 本質としては同じなのでDockerでinitプロセスを上げることで、1コンテナ1プロセスの制約 がなくなる。 • しかしながら、Dockerは実行プロセスがダウンしたらコンテナがダウンしたり、ログに stdout/errを用いる点から、複数プロセスを前提としていない仕組みであると言える。 ゲームサーバとして提供する場合は、システムコンテナが向いている コンテナ化について

Slide 37

Slide 37 text

37 コンテナ化について lxd 3301024 11.5 0.2 18760708 1170160 ? Sl 16:14 7:16 /snap/lxd/28373/bin/qemu-system-x86_64 -S -name ubuntu-jammy-vm -uuid 63868117-4c51-46c5-be46-a438ffebe40e -daemonize -cpu host -nographic -serial chardev:console -nodefaults -no-user-config -sandbox on,obsolete=deny,elevateprivileges=allow,spawn=allow,resourcecontrol=deny -readconfig /var/snap/lxd/common/lxd/logs/ubuntu-jammy-vm/qemu.conf -spice unix=on,disable-ticketing=on,addr=/var/snap/lxd/common/lxd/logs/ubuntu-jammy-vm/qemu.spice -pidfile /var/snap/lxd/common/lxd/logs/ubuntu-jammy-vm/qemu.pid -D /var/snap/lxd/common/lxd/logs/ubuntu-jammy-vm/qemu.log -smbios type=2,manufacturer=Canonical Ltd.,product=LXD -runas lxd RSSは約1.1GB quemでVMのプロセスが作られている 素のUbuntuのVMを起動したときのメモリ消費量

Slide 38

Slide 38 text

38 root 1010234 0.0 0.0 1655816 15772 ... [lxc monitor] /var/snap/lxd/common/lxd/containers ubuntu-jammy-container 1065536 1010244 0.0 0.0 101688 12392 ... \_ /sbin/init 1065536 1010359 0.0 0.0 31344 13752 ... \_ /lib/systemd/systemd-journald 1065536 1010406 0.0 0.0 11100 5760 ... \_ /lib/systemd/systemd-udevd : : : : 1065536 1010562 0.0 0.0 110104 21200 ... \_ /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal 1065536 1010568 0.0 0.0 15432 8868 ... \_ sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups 1065636 1011555 0.0 0.0 16128 6540 ... \_ /lib/systemd/systemd-networkd 素のUbuntuのシステムコンテナを起動したときのメモリ消費量 コンテナを構成するプロセス全体 RSSを合計すると約113MB コンテナ化について

Slide 39

Slide 39 text

• 素朴なUbuntuで検証したところ、システムコンテナにすると RSSを約1GB程度削減できた • VMはコンテナに比べて、 QEMUの層とゲストOSのカーネルの層が必要である • 現状の構成ではメモリがリソースのボトルネックとなっているので、コンテナ化によって一定 のコスト削減効果が見込める 39 コンテナ化について

Slide 40

Slide 40 text

まとめ

Slide 41

Slide 41 text

まとめ • ロリポップ!for Gamers のインフラは、オンプレミスデータセン ターでLXDとCephを⽤いて構成している。 • イメージの管理や複数のLXDクラスタ管理における⼯夫について 紹介した。 • 現在は、コンテナ化によるリソースの効率化に取り組んでいる。

Slide 42

Slide 42 text

42 Thank You! Thank You! GMOペパボのエンジニアに興味がある方は @takumakume までご連絡ください! カジュアル面談でもお待ちしております。