© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます はてなの開発 / 運用体制 株式会社はてな 伊藤 直也
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます お話したいこと はてなブックマークのシステム概要 ソフトウェア ハードウェア LVS はてなの開発体制
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます はてなブックマーク
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます はてなブックマークの数字 66,000 ユーザー del.icio.us 30 万人 ( 被買収時点 ) digg 60 万人 ( 時点 ) サーバー 30 台強 開発者 1 + 数名 LAMP
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます proxy MP master bot / feed 通常のリクエスト 他サービス slave 画像 API etc. LVS proxy LVS
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます ソフトとハード
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます ソフトウェア Linux 2.6 (FC4) Perl / Ruby LVS Apache 2.2 / 2.0 rev proxy (mod_proxy_balancer) app server (mod_perl) memcached MySQL 4.0 MyISAM
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます そのほか Subversion Capistrano Nagios Observer ( 自社開発 )
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます Perl Perl 5.8 CPAN モジュールは自由に Capistrano でまとめてインストール
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます はてなフレームワーク M + C V は基本 TT / H:T:Pro (JSON / YAML) mini httpd (server.pl) スケルトンジェネレータ DI Pluggable
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます Hatena Framework Apache Trans Handler Access Handler Engine Factory Engine Function … PageMaker Factory PageMaker Content Maker Content Maker … Object Oriented Perl Module 各種処理(あれやこれや) HTML 生成 ( associate object )
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます Model - Hatena2::TableObject ORM + Array like Ruby my $bookmarks = App::Bookmark->search( where => ["name = ?", 'naoya'], order => 'id desc', with => 'entry', ); print $bookmark->collect(sub { $_->entry->url })->join("\n");
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます はてなフレームワークの公開 ? やろうやろうと思ってたら時期を逃した
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます Ruby Rails dRuby ブックマークの一部機能 はてなセリフ はてな SNS
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます JavaScript / ActionScript JavaScript 部 prototype.js ( 老 ) MochiKit ( 若 ) Flash 重要 flv プレイヤーとか 2.0 時代の...
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます 低レベル層 C / C++ Apache modules XS modules 自社開発のツール、ミドルウェア
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます Perl にこだわるか ? 技術を一つに絞る利点よりも、幅が広が ることにより得られるメリットが大きい フレームワークの普及などにより人材の 交換コストは昔ほど高くない Perl プログラマは Ruby が嫌じゃないけ ど Ruby 厨は Perl が嫌
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます Capistrano ベリー便利 % ruby bookmark/script/switchtower -e users shell cap> uptime [establishing connection(s) to...] [ XXX] 13:35:20 up 121 days, 5:10, 1 user, load average: 1.89, 1.65, 1.09 [ XXX] 13:35:20 up 121 days, 5:12, 1 user, load average: 1.88, 1.40, 0.89 [ XXX] 13:35:19 up 121 days, 5:08, 1 user, load average: 1.98, 1.40, 0.90 [ XXX] 13:35:20 up 109 days, 13:54, 1 user, load average: 1.53, 1.33, 0.90 [ XXX] 13:35:22 up 121 days, 5:18, 1 user, load average: 1.41, 1.47, 1.15 [ XXX] 13:35:20 up 109 days, 13:52, 1 user, load average: 1.88, 1.43, 0.93 command finished cap> ps auxw | grep httpd | wc -l [ XXX] 26 [ XXX] 31 [ XXX] 25 [ XXX] 27 [ XXX] 29 command finished
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます 監視 Observer like Plagger Notify::IRC Notify::Mail Nagios nagios-bot POE
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます ハードウェア #1
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます ハードウェア #2 サーバーが増えてきた (300 台弱 ) データセンター引越し さくらインターネットへ
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます LVS
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます LVS って ? Linux Virtual Server ipvs Linux カーネル組み込みのロードバランサ ipvsadm
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます LVS (ipvsadm) % sudo /sbin/ipvsadm -Ln -t :3306 Password: Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP :3306 lc -> :3306 Route > :3306 Route > :3306 Route > :3306 Route > :3306 Route
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます LVS + keepalived keepalived LVS の冗長化 (VRRP) Real Server の稼動監視 ipvs のフロントエンド
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます LVS + keepalived 図 ipvs + keepalived#1 Real Server#1Real Server#2Real Serve#3 ipvs + keepalived#2 VRRP ACTIVEBACKUP TCP CHECK
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます LVS++ DSR (Dynamic Server Return) も可能 バランシングアルゴリズムもいろいろ lc (least connection) 負荷がほとんどない
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます DSR LVS Real Server クライアント VIP RIP
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます keepalived++ 2 台 LVS を用意すればどっちかが壊れても 勝手に自動復帰できる (VRRP) Real Server が死んでも勝手にバランサ から外してくれる Real Server のチェックは自前のスクリ プトでも可能
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます LVS-- いくつかのソフトを組み合わせて使うの で操作を覚えるのが面倒 ( 難しくはない ) ipvsadm keepalived iptables DSR してるとネットワークパケットの動 きが特殊なのでちゃんと理解してないと はまる Martian Source 問題
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます MySQL の手前に LVS スレーブ群への振り分けを LVS に任せる
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます メリット #1 Perl 側から見ると DB 群が大きなスレーブ 群に見える (Flickr の中の人も言って いた ) Perl が LVS 以外のアドレスを知らなくてい い DB の追加 / 削除をアプリケーションを考慮せ ずに可能 ウェブアプリケーションの再起動必要なし
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます メリット #2 負荷にあわせて分散できる 分散アルゴリズム色々 うちでは lc or wlc (wlc は重み付けを加 えられる ) Perl から MySQL の負荷を低コストに知 るのはおそらく難しい
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます メリット #3 故障したリアルサーバーを確実に切り離 せる Perl でやるとアプリケーションと稼動監視 が切り離せてないため、予想しない問題が起 こりやすい LVS の品質は高い
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます メリット #4 Perl に依存しない 仮に Ruby やそのほかの言語から接続する場 合でも振り分けのロジックは気にしなくて良 い
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます 使用感 便利、丈夫 メンテナンスコストが下がった サーバー構成の変更に強くなった ノウハウは結構必要 ネットワーク周りではまりがち 今のところ商用製品要らず 普通に zsh と vim でメンテとかできて◎
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます おすすめ
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます 開発体制
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます 開発者と企画者 開発者が企画 / 運用 新しいことの正しさは本人にしか分からない 苦手なことは人の手を借りられる デザイン ユーザインタフェース ハードウェア、負荷分散
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます 開発者のモチベーション 新しい機能を思いついたらおもむろに でかい機能は合宿などで 重い腰をあげられるかどうかがすべて 不具合などは見つけたら直す Web App はてなアイデア " 自分の頭で考えろ "
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます 生産性を高めよう 会議 less フリーアドレス デュアルモニタ購入サポート ノート PC ( ポケット 1 個の法則 ) 自宅オフィス / 離れオフィス 休日選択制 ( 水 or 土 ) 20% ルール g.hatena.ne.jp + IRC
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます サービス開発者の哲学 正しいことはあなたにしか分からない。 それが正しいかどうかは自分の手で証明する Show us the CODE 自分の頭で考える。自分を信じる。 半年続けると流行るの法則。継続は力。 「はてならしさ」 スルー力なんて要らない。
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます まとめ 最近のシステム構成を紹介しました。 日々改善しております。 ソフトでがんばるのでも結構いけます。 LVS は激しくおすすめです。 プログラマのモチベーションは会社の原 動力です。
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます Thanks!