Open Matchを参考にマッチメイキング・フレームワークを作った

ゲームサーバー上でのマッチメイキングを想定したフレームワーク minimatch を開発した。 すでにこの分野ではOpen Matchというオープンな実装があり、活用例も世に出てきている。 そんな中でなぜ今新しく minimatch を作ったのか。

日記アプリ Day One のデータをJSONから作る

日記アプリとして Day One を使い始めた。 それ以前も汎用的なノートアプリであるEvernoteとBearで日記をつけていたが、日記は日記に特化したアプリに任せたほうが良さそうだと考え、Day Oneへの移行を決めた。 そこで、過去の日記をDay Oneに取り込みたくな…

Agonesで効率の良いゲームサーバーの割り当てを実現する方法を考える

Agonesではゲームセッションに利用するサーバーを事前に割り当て(Allocate)する必要がある。 小規模なサービスであれば欲しいときに割り当てをする、それだけで十分動くが大規模・高頻度な割り当ての実現には工夫が必要だ。

.NETのWebSocketと、切断の扱い

リアルタイムな通信を行う際に何かと活躍するプロトコル WebSocket。 .NETには System.Net.WebSockets として組み込まれており、簡単に使い始めることができる。 しかし、WebSocketにおいて「切断」という概念は取り扱いに注意が必要だ。 本記事ではSystem.N…

Webhook的に ActivityPub に投稿する実装を作った

ここ最近で再び注目されている分散SNSのオープンな仕様として有名なのが ActivityPub だ。 ActivityPubのアカウントに対してもIncoming Webhookのような入口があれば、ActivityPubの仕様を知らなくても容易にBOTアカウントの運用ができて面白いのではないか…

Agones のインフラコストを抑える工夫

Kubernetes の世界では HPA (Horizontal Pod Autoscaler) や Cluster Autoscaler によって負荷に応じて動的にリソースを増減できる。 では、 Agones においても同様に動的なリソース増減ができるのか?その方法と考慮事項を探っていく。

Kubernetes で動くクラウドゲーミングにおけるCPU割当の工夫

Kubernetes上でゲームサーバーをホストする Agones を用いた環境において、CPU負荷にばらつきがあるゲーム群を動かしたいという事例があった。そこで、それぞれのゲームに対する適切なCPU割り当てを決定するために独自の工夫を行ったので、その実装について…

Argo CD が Kubernetes の廃止予定APIを呼ぶ原因を探る

Kubernetes v1.22 では結構多くのAPIが廃止1され、慎重なアップグレードが求められる。 その補助として、最近出たGKEの新機能 Deprecation Insights を使うと便利だ。 v1.21 等のGKE clusterで廃止予定のAPIが使われていないかチェックしてくれる。 あるGKE…

プログラムがGCP上で実行されているかを判定する

gcp

サーバーアプリケーションを開発していると、現在動いている環境がクラウドか、ローカルかで処理を分けたい場合がある。 自分はよくGCP (Google Cloud Platform) を利用しているが、今動いているのがGCP上なのか判定したい場面が何度かあった。 クラウドの場…

overlayfs を用いたクラウドゲームのデータ管理

クラウド上でゲームを動かす場合、データ(ゲーム本体のデータ・セーブデータ)をどう管理するかは重要な課題のひとつだ。 そこで、自分が開発に携わっているOOParts のデータ管理を支える技術について紹介する。 ノベルゲームのセーブ事情 OOPartsで提供さ…

Agones はなぜ、どのようにPodへの直接接続を実現しているか

Kubernetes上でゲームサーバーを扱うframeworkのAgones は ゲームサーバーに直接(TCP or UDPで)接続する 機能を持つ。 ゲームサーバーの実体はPodだが、なぜPodへの直接接続が必要なのか、そしてAgonesがどのように直接接続の機能を提供しているかを読み解…

fly.io に Pleroma を設置する

さいきん fly.io というサービスが面白くて触っている。 これはHerokuやCloud Runに近いPaas (CaaS?) で、Dockerfileとちょっとしたconfig fileを用意するとアプリをインターネット上にデプロイできるサービスだ。 個人的にすごい(面白い)と思った特徴とし…

minikube上にログイン不要のGrafana (with Prometheus)を速攻で立てる

Prometheus exporterの動作を検証したい場合など、ローカル環境のKubernetes(minikube)上にPrometheus + Grafanaを立てたい場合がある。Grafanaはデフォルトでユーザー認証が入っているが、ローカル環境では自分しか触らないので認証が邪魔なときがある。 …

Rust: tokioを使って独自プロトコルのメッセージを受け取るTCPサーバーを作る

オンラインゲーム開発などで独自プロトコルのデータを読み書きするTCPサーバーを作ることが時々あるが、 Rustのtokio を使うとそのようなTCPサーバーがとても簡潔に記述できる。 独自プロトコルといっても様々だが、TCPのようなストリーム指向の経路の場合あ…

CSS: 大きさの異なる画像をいい感じに敷き詰めて並べる

css

大きさの異なる画像がギャラリーのように並んでいて、それぞれの画像がぴったり敷き詰められているレイアウトが実現したくてやり方を調べた。 FlickrのExploreページのようなイメージ。 https://www.flickr.com/explore 昔はこういったレイアウトの実現は複…