プロジェクト

全般

プロフィール

小規模インスタンスのタイムアウト対策

小規模インスタンスや稼働前のテスト中にサーバとの接続が切断してしまう場合。
この現象を見る場合は小規模サーバかつ稼働初期や作りたてのアカウントに多い。

原因

websoketの接続は、(ある程度misskey側でもリトライしているとは思うが)WebサーバのProxyのTimeoutに
基づいて維持されるため、これを越えると切断してしまう。

  • Apache HTTP Server の場合
    ProxyTimeout(デフォルト60秒)
  • Nginx の場合
    proxy_connect_timeout(デフォルト1秒)
    proxy_send_timeout(デフォルト60秒)
    proxy_read_timeout(デフォルト60秒)

では何故稼働中のサーバ群や作りたてのアカウントではここまで見られないかというと、おそらく
「タイムラインが流れているから」だと思われる。要するに「タイムラインに動きがない状況」が
長く続くとサーバが接続を切断してしまう。

対策

ではどのように対策するとよいかをケース別に考える。

対策A「タイムアウトを伸ばす」

ある程度タイムラインが動く頻度が分かる場合、その時間を目安に上記のtimeout系パラメータを
調整するという方法がある。

ただし、大きくしすぎるとコネクションが維持されすぎて負荷となったりセキュリティ上よろしく
ないという可能性もある。

対策B「藍ちゃんを導入する」

藍ちゃん(Bot)を導入する事で、一定時間ごとにタイムラインへのランダムな投稿が起こる。
これでタイムラインが動く事で接続が維持される可能性がある。

ただし、藍ちゃんをフォローしていない or ローカルタイムラインを参照していない場合の小規模
環境では効果が無い場合がある。

総括

基本的にはタイムラインがある程度流れる事が望ましい。
藍ちゃんや連合でも良いのでbotで僅かにでもタイムラインを動かして上げるといい。それが出来
ない場合にTimeoutをチューニングするといいと思う。

小規模クローズド環境である程度ビジネス利用で藍ちゃんの導入も難しい場合、API等で時報bot
等を導入すると良いかもしれない。(必要があれば作ってみる)