目の前に僕らの道がある

勉強会とか、技術的にはまったことのメモ

YAPC::Asia 2010へ行ってきたよ。

今回もメモ書きレベル以上に推敲できなかったです。

慶事の都合上初日しかいけなかったので、1日目だけのメモ書きです。

cloudforecast

長野雅広さん

  • PDCAがだいじ
  • 監視はCheckフェーズ
  • リソース監視
    • 変化の可視化
    • ツール
    • cacti
    • munin
    • cloudforecast
  • perlで書かれている
  • RRDToolを利用したグラフ描写
  • 高速動作 Gearman
  • SNMP.pm CPANにあるのはNet-SNMPのバージョンに依存する
  • fetcher workerとupdate workerを分けることでfetcherの数を自由に増やせる
  • ライブドアでは
    • 監視サーバ 1200台以上
    • リソース 5000以上
    • 巡回にかかる時間30秒
  • cpanm + extlib
  • グループ単位で設定。大量にできる
  • basic.yaml
    • 監視項目設定ファイル
  • ついでにMySQLの設定をみることができる
  • gearmandを利用する
  • -rをつけるとファイル変更時に終了 > ヒント: deamontools

モダンなPerl5環境

tokuhiromさん

  • 作ったもの
    • Tiffany
    • Amon2
    • Router::Simple
    • Test::TCP
  • Perl5を使ったWEBアプリ開発をしている
Perl5 version
  • system perl 標準のperlはよろしくない。
  • コンパイラオプションが一般的
    • no "-Dusethreads"
    • スレッドはオフにした方がいい
      • 15%の速度が稼げる
  • perl 5.10.0はよろしくない
  • perl 5.x.0はクオリティが高くない
  • 今だと5.12.2
  • 5.8.9でもいい
  • 5.10系の機能
    • given / when
    • say
    • smart match
    • defined or (//) ☆
    • named capture
perlbrew
  • local::libを使う必要無し
  • 開発環境のperlrsyncでばらまくと吉
  • cpanm --installdeps .
    • 依存モジュールをインストール
cpan-outdated
  • App::cpanoutdated
  • アップデートがあったモジュールを検出
  • cpan-outedated | cpanm
  • cronで回す
cpanf
  • fresh
  • ミラーに反映されない場合。
  • cpanm App::CPAN::Fresh
pm-uninstall
  • pm-uninstall Acme::Famn
deployment
  • perl5のディレクトリをそのままrsyncするのがおすすめ
  • アプリケション特有のモジュールは extlib/
  • no rpm; no deb;
CPANモジュールの選び方
  • みんなが使っているモジュールを使う
  • #perl-casual@irc.freenode.org
  • 有名perl hackerが使っているモジュールを使う
  • Task::Belike::
    • BINGOS
    • RJBS
    • FLORA
    • DOY
    • Tokuhirom
  • 他の人に選んでもらう方が良い
  • CPANソムリエになる方法 > はてな
  • 2004年より前は危険な香り
  • テストが放置されているのは危ない
  • see t/
  • バグレポートをためている
  • dependencies
まとめ

Inside mixi

廣木大地さん

  • 2つのスケーラビリティ
  • アクセス増加と変動に耐える
  • 機能追加と多人数開発に耐える
memcached

キャッシュ方式

  • リードスルー
    • 読み込み時にキャッシュに追加
    • 実装が簡単
  • ライトスルー
    • 書き込み時にキャッシュに追加
    • DBに優しい
  • 変速ライトスルー
    • DBに書き込んでから
    • マスターから読み出す
  • 変速ライトスルー2
    • incrをうまく使い数を管理する
    • 数値のみ使える
キャッシュのレイヤー
  • 絡む単位のキャッシュ
  • ドメイン単位のキャッシュ
  • サービス単位のキャッシュ
コードの複雑さを防ぐ
  • 副次的な処理はさサブモジュールにジョブキューで投げる
  • ModelのCRUDにフックを仕掛けることができるようになった

DataPortability and social web

  • Net::OpenSocial::Client
  • 外向けにサービスを提供しているところが少ない
  • openIDとOAuthの相違点
  • 認証
  • OID OPに認証を委譲
  • OA OPに認証を委譲しているといえなくもない
  • 連携
  • OpenIdのOAuth Etension
  • OpenIDの上にOAuthをのっけようという試み
OAuth2.0
  • SSL必須(署名がなくなった?)

Studying HTTP with perl

malaさん

JavaScriptの人

並列じゃない
  • LWP::UserAgentが一般的
  • URI::Fetch
    • キャッシュしてくれる
  • HTTP::Lite
    • 依存が無くてシンプル
    • httpのみ
  • LWPx::ParanoidAgent
    • ローカルネットワークへのアクセスを拒否
並列

  • HTTP::Async
  • LWP::Parallel

  • AnyEvent::HTTP
    • AnyEventで書かれている
    • 使い方は楽
    • ストリーミングとかにむいている
  • Coro::LWP
    • LWPをCoro化する
    • Perlでコルーティン化を実現するライブラリ
    • coroは黒魔術
  • AnyEvent::Curl
    • IO待ちがほとんどだと思っていた
      • 実際はLWPが遅すぎる
    • まだgithubにしかない
    • LWPより10倍速い
    • ブロッキングタスクであればWWW::CUrlの方がいい
    • LWP互換機能
Perlで並列処理入門
  • ithreadバグっている
  • 実質的にはforkによるマルチプロセス
  • イベント駆動
  • fork
    • OSまかせ ジョブ
    • マルチコアをいかせる
  • AnyEvent POE
    • シングルプロセス
    • メモリが少ない
  • coro
    • perlでコルーティンを実現
    • 簡単だがはまりどころがおおい
    • 変更が少ない
  • イベント駆動型
    • 処理時間が予測できない
    • 強調動作が必要な場合
  • RPC
    • HTTPの方が有利なケースが多い
    • KyotoTykoon
HTTPクライアントのテスト
  • Test::Tcp

Tatumaki

Webサービスのページング処理について

よしみさん

  • ページングの方法
    • count(*)
    • CALC_FOUND_ROW
    • 一つ余分に取得
      • 次のページがあるかどうか分かればいいとき