はてな http://www.hatena.ne.jp/ はてなの開発裏側見せますパート3 はてな http://www.hatena.ne.jp/

Slides:



Advertisements
Similar presentations
Wiki と Web サービス API. Wiki と Web サービス API ( 1 )  Web サービス API の流行 Blog が投稿用の Web サービス API を提供 Amazon 、 Google 、 Yahoo などが各種情報 取得のための Web サービス API を提供.
Advertisements

プロジェクト名称 Inception Deck (Project Charter) 201X.XX.XX.
© 2005 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます prototype.js と Perl で Ajax 株式会社はてな 伊藤 直也
Struts VS SAStruts ・ STRUTS と SAStruts を比較します。. Struts のメリット1 STRUTS はディファクトスタンダード。 ↓ プログラマがたくさんいる。 ライブラリ、ツールがたくさんある。 ビジネス案件が豊富。 書籍などの情報元が豊富。
自社システムにおける 最適なフレームワーク 2012/06/15. 条件 機能は「自己評価」、「勤務表」、「掲 示板」、「ログイン機能」を想定 使用するフレームワーク等は全て無料で あるが未来があるものを使用する 作るにあたり最適なフレームワーク、ソ フトを提供する 画面は HTML5 で作成することが前提.
MOSA プログラミングセミナー Mac OS X プログラミング 事始め 新居雅行( MOSA 理事) 2002/4/28.
© 2006 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます はてなの開発 / 運用体制 株式会社はてな 伊藤 直也.
1 なんとなく Ajax ~新しくて古い XMLHttp 川合孝典 (Kansai.pm) 2005/5/22.
Flash SWF ファイル書き換え PHP extension 2008 年 7 月 21 日 よや.
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
「図書管理」のための Webアプリケーション開発 -Apache/Tomcat/MySQL/Java on Windows XP-
図書系のための アプリケーション開発講習会 2008年7月31日
Curlの特徴.
Linuxを組み込んだマイコンによる 遠隔監視システムの開発
IIS 4.0で開発をするコツ Webアプリケーション構築.
ZKプラグインで、Grailsの Viewをリッチに楽しく
有限会社 はてな 近藤淳也 Shibuya Perl Mongers
プログラマのレベルアップ.
最新ファイルの提供を保証する代理FTPサーバの開発
Webアプリケーション開発の 基本的なポイント
情報理工学部 情報システム工学科 3年 H 井奈波 和也
JPAを利用した RESTful Webサービスの開発
2006年11月22日 植田龍男 Webサービス II (第9回) 年11月22日 植田龍男.
join NASS ~つながりあうネットワーク監視システム~
CakePHPを業務に導入する Shin x blog 新原 雅司.
ほりかわひさし Netsphere Laboratories
Microsoft Office Project 2007
吉田和弘 株式会社ミッタシステム Rubyのすすめ 吉田和弘 株式会社ミッタシステム
~災害発生!・・・その時最も重要なものとは?~
Keeping COMET alive サイボウズ・ラボ株式会社 奥 一穂.
Webアプリケーション.
平成19年11月8日 図書系職員のための アプリケーション開発講習会
Piggy Bank: Experience the Semantic Web Inside Your Web Browser
PHP Framework Update symfony 編 株式会社ディノ 月宮紀柳.
平成19年5月19日 第3版 東京大学理学部生物化学図書室 前田 朗
MSBuild 色々出来るよ 2011/04/02 お だ.
高知大学理学部数理情報科学科 地球環境情報学研究室 助教授 菊地時夫
Day3 Day4 Day3 Day4.
Day3 Day4 Day3 Day4.
サーバー立ち上げ記 2009/5/23
.NET テクノロジー を利用した SAP ソリューションの拡張 (3階層化) (評価環境構築ガイド)
第8章 Web技術とセキュリティ   岡本 好未.
2004年度 サマースクール in 稚内 JavaによるWebアプリケーション入門
2003年度 データベース論 安藤 友晴.
Office IME 2010 を使う.
ガジェット・マスターへの まわり道!? ~Ajaxを理解しよう~
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
アップデート 株式会社アプライド・マーケティング 大越 章司
Arcserve + 大容量NASサーバで二重化を簡単に! 障害時には、手動、もしくは自動で切替える
平成19年10月19日 図書系のための アプリケーション開発講習会
ゲーム開発モデルの基礎.
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
テーブル設計を後から変更 現場で使える小技のご紹介 株式会社ジーワンシステム 生島 勘富(イクシマ サダヨシ)
インターネット             サーバーの種類 チーム 俺 春.
データベース設計 第7回 実用データベースの運用例 クライアント=サーバシステム(1)
多層的な知人関係に基づく 自己情報コントロールの実現
インターネットに接続できない環境下にあるLAN DISKも LAN内で状態管理可能に! 新登場!
PaaSの起源.
Webアプリケーションと JSPの基本 ソフトウェア特論 第4回.
ASP.NET 2.0による Webサービスの構築 2008年10月18日 こくぶんまさひろ.
ソフトウェア工学 知能情報学部 新田直也.
ソフトウェア工学 理工学部 情報システム工学科 新田直也.
CO-Client Opeartion 1.1 利用履歴データベースの設計 (スキーマ バージョン 対応)
第2回 Webサーバ.
ソフトウェア工学 知能情報学部 新田直也.
ASP.NET 2.0による Webサービスの構築 2008年10月18日 こくぶんまさひろ.
MSG시스템 팀 2006年5月26日 株式会社 데굴데굴 開発部 開発G 아무개.
ベイジアンネットワークと クラスタリング手法を用いたWeb障害検知システムの開発
Presentation transcript:

はてな http://www.hatena.ne.jp/ はてなの開発裏側見せますパート3 はてな http://www.hatena.ne.jp/

システム構成

Hatena サーバー 170台ぐらい。 5台/月増

Hatena システム構成図 Apache 2.0 reverse proxy Apache 1.3 + mod_perl 1.29 Apache 2.0 / esehttpd MySQL repli MySQL repli MySQL repli はてなグループは Apache2 + mode_perl2 (Hatena2フレームワーク) Hatena1は Perl 5.6, Hatena2 は Perl 5.8 MySQLレプリの方式はサービス毎に異なる どのレプリに接続するか、レプリ / マスターの接続の切り替えは Hatena::DataBase モジュールに実装 MySQL master MySQL master

Reverse Proxy Apache2 主に2つの役割 memcached によるキャッシュシステム KeepAlive On Staticなコンテンツを返し、Dynamicなコンテンツはmod_perl に転送 (mod_rewrite + mod_proxy) ロードバランサーとしての役割 memcached によるキャッシュシステム vs Yahoo! アタック KeepAlive On mod_deflate によるコンテンツ圧縮

画像サーバ (Apache2 or esehttpd) 画像の返却は負荷が高いので専用サーバ RAID + NFS Apache2 or esehttpd 奇跡の esehttpd 以降なぜか同じ設定でもパフォーマンスが出ない lighttpd 検討中

mod_perlサーバ J2EEなんかでは Application Server (Servlet Container) に相当する箇所 mod_perl 1.29 or mod_perl 1.99 2.0 は名前空間が! (Apache2::*) KeepAlive Off

MySQL 3.23.XX or 4.0.XX (+ Senna) MySQLのレプリケーションで負荷分散 マスタはテーブル設計により工夫 レプリDBのデータは可能ならオンメモリで運用 Linux の tmpfs レプリケーションへのデータ振り分けはフレームワークで吸収 Select → スレーブ / Insert, Delete, Update → マスタ IPベースの振り分け 雑多なデータも MySQL に。 NFSより安定したネットワークストレージ DB台数増加中! やばいよやばいよ

はてなとPerl

Perl すべて Perl (一部 C) MVCフレームワークでプログラマ間のコード差を吸収 ある程度のコーディング規則 Perl 5.6 or 5.8 必要なら XS or SWIG で MVCフレームワークでプログラマ間のコード差を吸収 ある程度のコーディング規則 Emacs 使えとか(違) Ruby もいいなあ (ぼそ)

cperl-mode 用 .emacs (autoload 'perl-mode "cperl-mode" "alternate mode for editing Perl programs" t) (setq cperl-auto-newline t) (setq cperl-indent-parens-as-block t) (setq cperl-close-paren-offset -4) (setq cperl-indent-level 4) (setq cperl-label-offset -4) (setq cperl-continued-statement-offset 4) (setq cperl-highlight-variables-indiscriminately t)

HTML生成 (associate object) Hatena Framework (1 or 2) mod_perl上で動作する 汎用フレームワーク HTML生成 (associate object) Object (Diary) Object (Keyword) Content Maker Content Maker … PageMaker 各種処理(あれやこれや) Function Function … PageMaker Factory Object Oriented Perl Module Engine Engine Factory Trans Handler Access Handler Handler Apache

主な使用 CPAN モジュール Apache::Session Apache::DBI CGI DBI HTML::Template LWP Data::Page Storable HTML::Parser Template-Toolkit HTML::StickyQuery XML::RSS::LibXML Email::Valid::Loose Digest::MD5 HTML::FillInForm IPC::ShareLite Jcode / Encode Text::Diff WWW::RobotRules GD::Graph GD::Barcode HTML::MobileAgent HTML::Prototype etc.

はてなフレームワークの特徴 MVCフレームワークの Model と Controller 継承をベースにしたフレームワーク Model View は HTML::Template or TT 継承をベースにしたフレームワーク e.g Hatena2::Bookmark::Bookmark extends Hatena2::TableObjectOO e.g Hatena2::Bookmark::PageMakerEdit extends Hatena2::PageMaker Model O/Rマッピング Hatena2::List Hatena2::TableObject or Hatena2::TableObjectOO M と C, V は完全に切り離されているので、Class::DBI とかも使おうと思えば使える。(使わないけど) Controller Engine - PageMaker の二階層 Plug-In 方式でのロジック追加 URI/Classマッピング

処理の流れ Handler EngineFactory Function Engine Function Function PageMakerFactory PageMaker ContentMaker ContentMaker H::T or TT

フレームワークに関する余談 URIによるクラスマッピング RESTful なアプリケーションを作るのに有効 Catalyst とかはこの辺の自由度が高すぎる Rails はどうなんだろ?

Template-Toolkit HTML::Templateを使い続けてきたが、近頃はTTに以降 HTML::Prototype なんかも使いたい H::T は else if できない (;´Д`) H::T::Expr は遅い filter を自分たちで定義できる

prototype.js JavaScript を積極活用しつつある prototype.js の採用 HTML::Prototype Ajax などを楽に使うため HTML::Prototype H:P + TT イイ!

XML関連処理 (半年前) XMLモジュールは使わず速度重視で正規表現 (最近) XML::RSS::LibXML とか使ってる 月間2億PVのサイトでは速度問題はシビア はてなはXML系モジュールはほとんど使わず。 (最近) XML::RSS::LibXML とか使ってる XML::Feed LibXML 実装は結構速いので現実的

コミュニティへの還元 少しずつ取り組みつつあり CPANモジュール HTML::AccountAutoDiscovery (naoya) CGI::Application::FastCGI (naoya) HTML::MobileConverter (jkondo)

運用/開発体制

オープンソース万歳 利用ソフトウェア LAMP のみ (商用ソフトウェアなし) Linux + Apache + MySQL + Perl 外部サポート 利用していない エンジニア人数 8名。すべて開発兼運用。 監視方法 オープンソースソフトウェア + 自社開発ツール 障害発生時は携帯電話で連絡 セキュリティ対策 自分たちで実施 ハードウェア パーツを調達して自作

ソフトウェアの更新 yumサーバー 自社開発以外のソフトウェアは yum で定期的に自動更新 web server web server 3. 各アプリケーションサーバは cron で定期的に Queue DB を参照し、自分のタスクがないかを確認 タスクQueue DB CVSサーバ 2. 指定したタスクが Queue DB に保存される 4. タスクが見つかったらウェブサーバは CVS から最新のモジュールを取得し、自ら httpd を再起動する。 管理用サーバ 1. 管理者が自社開発の更新ツールから、更新したいモジュールやサーバーを指定する

障害対応 Nagios で全ホスト監視 最小限の冗長化 障害があると携帯電話でメール通知 就寝中にメール50通とかも... (;´Д`) ホットスタンバイとかイラネ バックアップは定期的な dump + レプリケーション 障害があったときにいかに速くリカバリするか

開発体制 社長含めエンジニア8人(増えたワア) XP の良いとこどり はてなグループで情報共有 朝から立ってミーティング ソースが仕様書 ペアプログラミング しんどい所はペア、楽しいところはソロ 朝に仕様決定、夕方リリース、夜に広報 はてなグループで情報共有

紙でタスク管理 あしか ペンディング そのうちやる すぐやる 終わった 毎朝すぐやるをチェック やり忘れを防ぐ 連続的な成長に向いている

移動オフィスと合宿 座席フリーオフィス 週に1回 図書館で仕事 月に1回合宿 早く出社したもの勝ち 行きたい人だけ。 移動車の中で何をどう作るか会議 意地でもアウトプットを出す