bh2.mgzl.jpを仮リリースしました。

Better Hotentry

やっとのことで仮リリースまでこぎつけました。そのうちbh.mgzl.jpの方と入れ替える予定ですが、しばらくはこのままです。

主に増えた機能は

  • ブコメ取得時にスターも取得して、ブックマークページと同じようにスターで並び替え
  • 正規表現可のURLフィルタリングとカテゴリのフィルタリング、またその逆の必ず表示する機能
  • 30分あたりのブコメ数の小さいグラフと大きなグラフ(小さいグラフをクリックすると大きなグラフが見られます)
  • 30分あたりのブクマ数が上昇中のものに「🔥」マークがつく機能(炎上じゃなくてHotの意)

このぐらいでしょうか。あとはユーザースコア・記事スコアの算出式の調整はしています。

設定画面や画面の見方などの説明・ヘルプ系を含め、TODOはまだ残っていますが、一応実用段階になったので公開です。 あと、faviconも作りました。

以下技術的な話も含め、感想など。

バックエンドはnode+mongodb、フロントエンドはVuexで全面的に作り直しました。またサーバーはevennodeとS3(+CloudFront)を利用しています。evennodeで処理した内容をjsonにし、html等と同じS3に放り込むような形です。お陰で爆速になりました。

バックエンドとフロントエンドでともにES2017で書いています。複雑な非同期処理を随所に含むバッチ処理を書くにあたってasync/awaitが非常に役に立ちました。

バッチ処理として2つ走らせていて
1つは記事系の処理で、

  1. RSSフィードの取得
  2. 一旦フィードのアイテムをmongoのcollectionに保存
  3. 保存した最新の60記事(サイト上に表示される記事数)のはてブ情報を取得
  4. 取得したはてブ情報を元に記事スコアなどを計算
  5. またユーザーを別のcollectionに保存
  6. 記事のデータとはてブ情報、スコアなどをjsonとしてS3に保存

2つ目はユーザー系の処理で、

  1. 保存しておいたユーザーのはてブのスター情報などを取得
  2. ユーザースコアを計算して保存

この2つの処理をそれなりにいい間隔ではてなのサーバーに負荷をかけないようにバッチ処理をぐるぐるまわしています。

現在evennodeで動かしているものもAWSに移行したい気はするのですが、
EC2は管理するのが重いし価格もevennodeの€6/monthと比べると、そこまでコストダウンになるわけでもなさそうで
となるとLamda+DynamoDBあたりだろうけれど、移行に結構かかりそうなので暫くは現行体制です。スケールする必要無いし…。

ともかく、PHPバッチ処理を書くのは悲しみしか無いので全面的にnodeで書き直してよかったです。