アトーの日記

スマブラ DX プレイヤーのアトーが日記を書きます。

スマブラポータルの仕組み

完全に技術的な話です。スマブラポータルをどのように動かしているか。

以前にも書いたとおり、名前解決(ssbp.info という URL の登録)にはバリュードメインを、サーバーには Heroku を利用しています。 バリュードメインでは .info の契約の 940 円/年 で、今のところスマブラポータルにかかっている唯一の料金です。 Heroku は Web サーバー、プラグイン含めて全て無料プランで動かしています。 サービスは Node.js の Sails.js を使って作成しました。

Heroku

Heroku は PaaS と呼ばれる、ソースコード実行環境、サーバー、運用環境などを全てまるっと提供するサービスです。 このおかげで僕はソースコードを書いて、git pushするだけでスマブラポータルを公開出来ました。 Heroku はフリーミアムで経営してるので、貧弱なスペックで良いなら無料で利用できます。貧弱なスペックと言いましたが、もしもっと高スペックにしたくなったらいつでも Web サイトにアクセスしてポチッとするだけで性能アップできます。その分、お金取られますが。 サーバーも課金する時代なんですね。自宅サーバーでは得られない気軽さです。

Heroku のびっくりしたところが、サーバーが一日一回再起動するという仕様です。 もしサーバーにアップロードフォルダを作っても一日経っちゃうと消えます。メモリ内のデータもリセットされます。 じゃあユーザーデータとかどうすんの?となりますが、ちゃんとデータベースプラグインが用意されているので、それを使います。 Heroku を使っている = データベースが分離されている となるわけですね、おもしろーい。

データベースには MongoDB を使っていて、MongoLab の無料プランを使っています。 無料プランは 500 MB まで。ここも課金の仕組み。ビバ課金。 バックアップは手動でやってます。自動化したいけど使えるサーバーがない。

メールは SendGrid それだけ。

Pingdom

サービスを運用するにあたり気をつけたいのは不測の事態によるサービスの停止です。 Heroku 側でサーバーが落ちるということはほぼないでしょうが、僕のプログラミングのバグによって落ちる、アクセスが集中して応答が遅すぎて切れる、ということは十分ありえます。なので少しだけ対策をしています。

Pingdom というサービスを使って、外側から定期的にスマブラポータルにアクセスしてもらっています。 もし Pingdom がスマブラポータルにアクセスできなくなると、僕の携帯にメールが送られてきます。 死活監視というらしいんですが、要は「サーバーが死んだ!」「ピコン!」

新着一覧の仕組み

スマブラポータルのメイン機能の新着一覧はどういう仕組みか。 ユーザーがトップページにアクセスすると(JavaScript が非同期でスマブラポータルの API を叩いて)新着一覧を表示するように要求します。 この要求が発生するとスマブラポータルのサーバーが各種サービス(はてなブログや Zusaar, Twitch など)のフィード or API にアクセスします。 そして返ってきた値を処理してブラウザに返します。

結局のところ各種サービス元へアクセスするので、あまり頻繁にアクセスするとサービス元へ迷惑がかかります。 また、ブラウザ→スマブラポータル→外部の各種サービス→スマブラポータル→ブラウザ という流れなので結構遅い処理です。 その二つを改善するためにスマブラポータル側でキャッシュしています。日記だと 1 時間キャッシュします。 初回アクセスだけ妙に重い場合があるのはそのためです。また、日記の投稿などがすぐに反映されないのもそのせいです(これをスマブラポータルでユーザーに説明する必要あるか?どうやって?は悩ましい)。 定期的にアクセスして常にキャッシュを作ることも考えたんですが、あんまり外部サービスへのアクセス増やしたくないなぁと思ったのでこうなりました。


以上です。