1 / 44

はてなの開発 / 運用体制

はてなの開発 / 運用体制. 株式会社はてな 伊藤 直也. お話したいこと. はてなブックマークのシステム概要 ソフトウェア ハードウェア LVS はてなの開発体制. はてなブックマーク. はてなブックマークの数字. 66,000 ユーザー del.icio.us 30 万人 ( 被買収時点 ) digg 60 万人 (2006.10 時点 ) サーバー 30 台強 開発者 1 + 数名 LAMP. LVS. proxy. proxy. 通常のリクエスト. bot / feed. 画像 API etc. MP. 他サービス.

cwen
Download Presentation

はてなの開発 / 運用体制

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. はてなの開発/運用体制 株式会社はてな 伊藤 直也

  2. お話したいこと • はてなブックマークのシステム概要 • ソフトウェア • ハードウェア • LVS • はてなの開発体制

  3. はてなブックマーク

  4. はてなブックマークの数字 • 66,000 ユーザー • del.icio.us 30万人 (被買収時点) • digg 60万人 (2006.10時点) • サーバー30台強 • 開発者 1 + 数名 • LAMP

  5. LVS proxy proxy 通常のリクエスト bot / feed 画像API etc. MP 他サービス LVS slave master

  6. ソフトとハード

  7. ソフトウェア • 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

  8. そのほか • Subversion • Capistrano • Nagios • Observer (自社開発)

  9. Perl • Perl 5.8 • CPANモジュールは自由に • Capistranoでまとめてインストール

  10. はてなフレームワーク • M + C • V は基本TT / H:T:Pro (JSON / YAML) • mini httpd (server.pl) • スケルトンジェネレータ • DI • Pluggable

  11. Hatena Framework HTML生成(associate object) Content Maker Content Maker … PageMaker 各種処理(あれやこれや) Function Function … PageMaker Factory Object Oriented Perl Module Engine Engine Factory Trans Handler Access Handler Handler Apache

  12. 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");

  13. はてなフレームワークの公開? • やろうやろうと思ってたら時期を逃した

  14. Ruby • Ruby • Rails • dRuby • ブックマークの一部機能 • はてなセリフ • はてなSNS

  15. JavaScript / ActionScript • JavaScript部 • prototype.js (老) • MochiKit (若) • Flash重要 • flvプレイヤーとか • 2.0 時代の...

  16. 低レベル層 • C / C++ • Apache modules • XS modules • 自社開発のツール、ミドルウェア

  17. Perlにこだわるか? • 技術を一つに絞る利点よりも、幅が広がることにより得られるメリットが大きい • フレームワークの普及などにより人材の交換コストは昔ほど高くない • Perlプログラマは Ruby が嫌じゃないけど Ruby 厨は Perl が嫌

  18. Capistrano • ベリー便利 % ruby bookmark/script/switchtower -e users shell cap> uptime [establishing connection(s) to ...] [192.168.0.XXX] 13:35:20 up 121 days, 5:10, 1 user, load average: 1.89, 1.65, 1.09 [192.168.0.XXX] 13:35:20 up 121 days, 5:12, 1 user, load average: 1.88, 1.40, 0.89 [192.168.0.XXX] 13:35:19 up 121 days, 5:08, 1 user, load average: 1.98, 1.40, 0.90 [192.168.0.XXX] 13:35:20 up 109 days, 13:54, 1 user, load average: 1.53, 1.33, 0.90 [192.168.0.XXX] 13:35:22 up 121 days, 5:18, 1 user, load average: 1.41, 1.47, 1.15 [192.168.0.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 [192.168.0.XXX] 26 [192.168.0.XXX] 31 [192.168.0.XXX] 25 [192.168.0.XXX] 27 [192.168.0.XXX] 27 [192.168.0.XXX] 29 command finished

  19. 監視 • Observer • like Plagger • Notify::IRC • Notify::Mail • Nagios • nagios-bot • POE

  20. ハードウェア#1

  21. ハードウェア#2 • サーバーが増えてきた (300台弱) • データセンター引越し • さくらインターネットへ

  22. LVS

  23. LVSって? • Linux Virtual Server • ipvs • Linuxカーネル組み込みのロードバランサ • ipvsadm

  24. LVS (ipvsadm) % sudo /sbin/ipvsadm -Ln -t 192.168.2.9:3306 Password: Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.2.9:3306 lc -> 192.168.0.43:3306 Route 1 0 370 -> 192.168.0.158:3306 Route 1 1 369 -> 192.168.1.31:3306 Route 1 2 362 -> 192.168.1.9:3306 Route 1 2 367 -> 192.168.1.17:3306 Route 1 1 256

  25. LVS + keepalived • keepalived • LVS の冗長化 (VRRP) • Real Serverの稼動監視 • ipvs のフロントエンド

  26. LVS + keepalived図 ACTIVE BACKUP VRRP ipvs + keepalived#1 ipvs + keepalived#2 TCP CHECK Real Server#1 Real Server#2 Real Serve#3

  27. LVS++ • DSR (Dynamic Server Return) も可能 • バランシングアルゴリズムもいろいろ • lc (least connection) • 負荷がほとんどない

  28. DSR クライアント 1 VIP LVS 3 2 RIP Real Server

  29. keepalived++ • 2台LVSを用意すればどっちかが壊れても勝手に自動復帰できる (VRRP) • Real Server が死んでも勝手にバランサから外してくれる • Real Server のチェックは自前のスクリプトでも可能

  30. LVS-- • いくつかのソフトを組み合わせて使うので操作を覚えるのが面倒 (難しくはない) • ipvsadm • keepalived • iptables • DSR してるとネットワークパケットの動きが特殊なのでちゃんと理解してないとはまる • Martian Source 問題

  31. MySQLの手前にLVS • スレーブ群への振り分けをLVSに任せる • http://d.hatena.ne.jp/naoya/20060901/1157109663

  32. メリット#1 • Perl側から見るとDB群が大きなスレーブ群に見える (Flickr の中の人も言っていた) • PerlがLVS以外のアドレスを知らなくていい • DBの追加/削除をアプリケーションを考慮せずに可能 • ウェブアプリケーションの再起動必要なし

  33. メリット#2 • 負荷にあわせて分散できる • 分散アルゴリズム色々 • うちでは lc or wlc (wlc は重み付けを加えられる) • Perl から MySQL の負荷を低コストに知るのはおそらく難しい

  34. メリット#3 • 故障したリアルサーバーを確実に切り離せる • Perl でやるとアプリケーションと稼動監視が切り離せてないため、予想しない問題が起こりやすい • LVSの品質は高い

  35. メリット#4 • Perlに依存しない • 仮に Ruby やそのほかの言語から接続する場合でも振り分けのロジックは気にしなくて良い

  36. 使用感 • 便利、丈夫 • メンテナンスコストが下がった • サーバー構成の変更に強くなった • ノウハウは結構必要 • ネットワーク周りではまりがち • 今のところ商用製品要らず • 普通にzshとvimでメンテとかできて◎

  37. おすすめ

  38. 開発体制

  39. 開発者と企画者 • 開発者が企画/運用 • 新しいことの正しさは本人にしか分からない • 苦手なことは人の手を借りられる • デザイン • ユーザインタフェース • ハードウェア、負荷分散

  40. 開発者のモチベーション • 新しい機能を思いついたらおもむろに • でかい機能は合宿などで • 重い腰をあげられるかどうかがすべて • 不具合などは見つけたら直す • Web App • はてなアイデア • "自分の頭で考えろ"

  41. 生産性を高めよう • 会議less • フリーアドレス • デュアルモニタ購入サポート • ノートPC (ポケット1個の法則) • 自宅オフィス / 離れオフィス • 休日選択制 (水 or 土) • 20%ルール • g.hatena.ne.jp + IRC

  42. サービス開発者の哲学 • 正しいことはあなたにしか分からない。 • それが正しいかどうかは自分の手で証明する • Show us the CODE • 自分の頭で考える。自分を信じる。 • 半年続けると流行るの法則。継続は力。 • 「はてならしさ」 • スルー力なんて要らない。

  43. まとめ • 最近のシステム構成を紹介しました。 • 日々改善しております。 • ソフトでがんばるのでも結構いけます。 • LVS は激しくおすすめです。 • プログラマのモチベーションは会社の原動力です。

  44. Thanks!

More Related