作成者:tuna2134
Discordはイベント受信でwebsocketを利用している。それを僕らはゲートウェイと呼んでいる。 ただDiscordサーバ(以降はGuildと呼ぶ)が増えすぎると、サーバに対する負荷が増大してしまう!
そこでシャード! シャードはGuildをIDごとに振り分けることができ、イベントを分散して受信ができる。 そうすることでサーバの負荷を軽減することができる。
シャードIDの求め方
(GuildのID >> 22) % シャードの数
人力によるノード分散、人力によるシャードの割り当てをしているせいで、Guildの導入数が増えてしまうとシャードの数を増やさないといけない。(手動k8s) -> そのため毎回毎回nanoなどのエディターを使ってシャードの割り当てを変更せざるを得ない。
このままやり続けると死ぬ!
元々の計画だと、環境変数でシャードIDを渡す方式だったが、Deploymentで動かすため環境変数を各Podずつに渡すことができない。 -> そこでシャードを管理するソフトを作成!(gRPCで取得する仕組み)
シャード割り当てソフト完成したけど、discord.pyなどを使う場合、内部をいじる必要性があり!なぜなら仕組みの1にあった「一定数を超えたらsleepをしないといけない」をd.py側が実装しているからである。 そのため本番ではいまだに使えてない。
さて、ソフトが完成したのはいいけど、肝心のk8sとの連携ができていない。連携することによって初めて我々は苦労から逃れることができるであろう。以下がその仕組みだ。
これらをCronJob利用して実装した。