tvotterで活用できた、今まで積み重ねたサーバ構築のいろいろ

先日、tvotterというサービスを(ベータ版)リリースしました。

これは自分にとって、久しぶりに作ったサービスだったりするのですが、ここしばらくの間、サービスを作る代わりにやってきたWEBサーバの負荷分散について試行錯誤したことが活用できたなあ。という実感があったりして、個人的には、感慨深い思いがあったりします。

ということで、KLab×はてな エンジニア応援ブログコンテストに応募しつつ、そのへんをまとめてみたいと思います。

あと、tvotterは、人気なサービスなわけではなく、アクセス数が多いわけでもありません。一部、たくさんのアクセスを想定した説明がありますが、あくまで想定(希望)上の話なので、そのへんはあしからず了承下さい。

tvotterというサービスについて

tvotterのサービスは、とてもシンプルなもので、twitterのアカウントを使って、投票を募ったり投票を行ったりすることができるサービスです。
また、これは、仕事上(会社の中とか)で作ったものではなく、自分の趣味の範疇(時間的、経済的に)で作ったサービスです。

システムアーキテクチャ

システムの構成については、Linux(CentOS)、Apache、MySQL、PHPからなる、いわゆるLAMP構成にkumofsを加えたものが基本構成になっています。(一部memcached、lighttp)

この構成の特長としては、key-Valueストアのkumofsを採用しているところが挙げられます。tvotterは、リアルタイム性が大事な投票のシステムの為、「取り扱うデータの書き換えが常で、読み書きの要求が頻繁に発生する。」というとこがあるのですが、このへんに対して、kumofsが大事な役割を果たしてします。

サーバの機器の構成

サーバ機は、こつこつと買い集めてきた安価なサーバ(ほぼhpML115)に、用途に応じてCPUのDual-CoreやQuad-Coreへの換装、メモリの増設、HDの増設等のアップグレードを施したものを使っています。また、消費電力やリソースの効率化を図る為、必要に応じてXen(仮想化技術)上で動かすようにしており、合計で、10数台のサーバで構成されています。

自前サーバ群

自前サーバ群

サーバの負荷対策

データの格納について

データの格納先について、頻繁なデータの読み書きに対応する為、ソートや検索が必要なデータはリストとしてMySQLに格納し、アンケートデータの詳細等はkumofsに格納するようにしています。また、MySQLに頻繁に書きこみが必要なアクセスカウンタのデータ等は、memcachedを挟んで、ライトバックキャッシュ方式で更新するようにしています。

グラフの画像について

アンケートのグラフは、pChartを使って画像(png)で表示しているのですが、頻繁にグラフデータの値が変わるので、画像を保存せずにアクセスごとに画像を生成するようにしています。ただし、締め切られたアンケートについては、データの値が変わることはないので、画像サーバ(lighttp)に保存し、そこから配信するようにしています。

また、この画像生成について、わりかしコストが高かったりするとこですが、このへんは、様子を見ながらHTML5(関連API)に置き換えていくことで解決したいなあ。と思ってたりしています。

その他、活用できたやってきたいろいろ

その他の負荷分散について、今までやったことが役に立ちました。
サーバ/インフラを支える技術で学んだことも随所で役に立ちました。)

サーバの群の概要図

サーバの全体像をを図にまとめてました。こんな感じで構成されています。

tvotterサーバ構成図

tvotterサーバ構成図

今後について

まずは、サーバの構成について、まだ冗長性が担保されていないところがあるので、このへんを見直していきたいです。あとは、APIを用意したり、iPhoneやAndroidのアプリを作ったり、HTML5への移行をしたり、レコメントエンジンを導入したり、いろいろ取り組んでいきたい。と思っています。

あと、まあそもそも、アクセス数が上がっていくことありきのとこもあるので、そのへんを第一に考えたいです。

エンジニアというものについて

私は、ビジネスの上であれ、趣味の上であれ、自分で作ったもので、直接様々な人を便利にしたり、訴えかけたりすることができるのは、エンジニアならではの醍醐味なんじゃないかなあ。と思っています。

そして、何かを作り出すことを考えていると、エンジニアには常に壁が現れます。自分自身の小さな歴史を振り返ってみても、本当に小さなところから始まっていて、WEBの世界に感動して、使う側を超えて作る側になりたくなって、ホームページを作るべくみよう見まねでHTMLを触ってみて、メールフォームや掲示板を作りたくて、kentweb(まだ現役で存在した!)で配布されているスクリプトをいじったりして、オリジナルのものを作ったりして、もっと動的なものを作りたくなって、データベースの扱い方を覚えて、レンタルサーバでは捌けなくなって、自前サーバの構築をやってみて、もっと規模の大きいサービスを作りたくてサーバの負荷分散について試行錯誤して、クラウドの窓を揃える為のiPhone、AndroidやHTML5をやり始めて・・・。端的に振り返っていっても、少しづついろんなことを積み重ねながら幅を広げてきたことを実感することができます。

エンジニアは常に、無我夢中に目の前の壁を乗り越えて、幅を広げて、ふと振り返った時に積み重ねたものを実感して。また新たなサービスを作りだすことに取り組んで。というサイクルの中にいるのだと思います。

私は、今後も、「便利で楽しいサービス」を作りだすことを目標に、このサイクルの中で、エンジニアというものを楽しんでいきたいな。と思っています。

カテゴリー: サーバ・インフラのこと, 開発、運用サービスのこと   タグ: , , , , , , , ,   この投稿のパーマリンク

トラックバック

tvotterで活用できた、今まで積み重ねたサーバ構築のいろいろ への1件のコメント

  1. ピンバック: 「KLab×はてな エンジニア応援ブログコンテスト」で優秀賞を受賞しました! « FlatLabs Blog

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>