タグ

ブックマーク / developer.cybozu.co.jp (14)

  • Kazuho@Cybozu Labs: Apache で X-Reproxy-URL ヘッダを使えるようにするモジュール mod_reproxy を書いた

    ウェブアプリケーションにおいて、認証がかかっている画像や大きなファイルを配信する場合には、Perlbal 等でサポートされている X-Reproxy-URL ヘッダが有効なことが知られていて、その理由としては、 (メモリを大いする) アプリケーションサーバのプロセスを転送終了まで占有しない HTTP ベースの分散ファイルシステムとリバースプロキシが直接交信するので、ネットワーク負荷が低い といった点が挙げられます。「でも、Apache は X-Reproxy-URL ヘッダをサポートしてないんだよねー」という話が、先日の YAPC::Asia 2009 においても話題になっていました[要出典]。回避策としては、ワンタイムURLのような手法もあるのですが、セキュリティな懸念もあります。 なんとかしたいなと思っていたのですが、気が向いたので、Apache に X-Reproxy-URL ヘッ

    pitworks
    pitworks 2011/06/29
    認証がかかっている画像や大きなファイルを配信する場合には、Perlbal 等でサポートされている X-Reproxy-URL ヘッダが有効
  • Kazuho@Cybozu Labs: 監視とは継続的なテストである、という話 (もしくは cronlog とテストスクリプトを組み合わせた監視手法について)

    結論から先に。cronlog を使えば、アプリケーションのテストコードと全く同じ形式で、監視用のスクリプトを書くことができます。プログラマが監視ツールの記法を覚える必要はありません。これは、プログラマが運用も行うケースでは特に有効な手法だと思います。 先週公開した Kazuho@Cybozu Labs: crontab を使って効率的にサービス監視する方法 というエントリで、crontab と拙作の cronlog を用いてサービス監視を書く手法を紹介しました。しかし、挙げた例はいずれも ping や http のテストといった外形監視の手法です。RDBMS とウェブアプリケーションのみから構成されるサービスならそれだけで十分でしょう。 しかし、外形監視だけでは、メッセージキューのような非同期処理の遅延を観測することはできません。また、http のログを監視して、エラーレスポンスや平均応答

    pitworks
    pitworks 2010/02/08
    cronlog を使えば、アプリケーションのテストコードと全く同じ形式で、監視用のスクリプトを書くことができます
  • Cybozu Inside Out: SpiderMonkeyを使ってPHPでサーバーサイドJavaScript

    はじめまして。2009年に新卒で入社しました天野祐介です。amachang を期待された方はゴメンナサイ! 先日 SpiderMonkey を利用して PHP から JavaScript を実行する方法を調べる機会がありましたので、ご紹介します。 SpiderMonkey とは SpiderMonkey は  C で実装された Mozilla の JavaScript エンジンです。 これを PHP から実行する拡張を利用すると、 PHP コード内で JavaScript が実行できます。 SpiderMonkey extension のインストール こちらhttp://devzone.zend.com/article/4704に記載されている方法で CentOS にインストールしてみました。 PHP 5.3.0 以上が必要です。 $ wget http://ftp.mozilla.org

    Cybozu Inside Out: SpiderMonkeyを使ってPHPでサーバーサイドJavaScript
  • 北陸アンカンファレンス開催報告・振り返り | 秋元@サイボウズラボ・プログラマー・ブログ

    11月1日に、石川県津幡町の石川高専をお借りして、初の北陸アンカンファレンスを開催いたしました。 # 開催が今月の初めだったのに、ちゃんとしたまとめを書くのが遅れてしまってすいません。オープニングセッションのプレゼンテーション資料はすぐ公開したのですけど、参加者個人としてじゃなくて主催側の振り返りを残しておかなきゃと思っていました。アンカンファレンスや地方イベント等に共通する話で役に立つところもあることを期待して、会社のブログで書かせていただきます。 アンカンファレンスとは? 一緒に主催したid:amachangが書いてくれたIT アンカンファレンスをやってみたい! – IT戦記がとても良いので、そちらをご覧ください。 また、北陸アンカンファレンス参加者募集ページも、いろいろ書き足していたらかなり詳細な説明になったので、これは良かったなと思っています。 朝一番のセッションで当日の説明をした

    北陸アンカンファレンス開催報告・振り返り | 秋元@サイボウズラボ・プログラマー・ブログ
  • Kazuho@Cybozu Labs: リモートからXenのDomUとかLVMやファイルを差分バックアップするスクリプトを書いた

    月曜から XenServer の運用を始めたんですが、以下のような要件のバックアップツールがほしくなりまして。ちょっと調べた範囲で見つからなかったので、書いてみました。 スナップショットによる無停止でのバックアップ 差分/多世代バックアップが可能 ネットワーク越しにプルベースでバックアップが可能 元々は去年書いたバイナリファイルの差分バックアップスクリプト (データベースの差分バックアップとウェブサービスのお引っ越し)。これを拡張して、LVMを操作したり、バージョン番号を自動採番するようにしたり、ssh経由での転送機能をつけたりした感じです (ディスクは遅いからギガイーサなら over ssh でも問題ない)。 詳しいことを知りたい人にはソースコードを読んでいただくとして (といっても300行ちょい)、たとえば XenServer 上の DomU のバックアップを取るなら、サーバ上で xe

  • Kazuho@Cybozu Labs: パフォーマンスとスケーラビリティのためのデータベースアーキテクチャ (BPStudy#25発表資料)

    先週金曜日、BPStudy#25で、「パフォーマンスとスケーラビリティのためのデータベースアーキテクチャ」という題目で話をさせていただきました。その際に使用した発表資料は以下のとおりです。 1. Happy Optimization 最初に、最適化の考え方として、上限値を予測し、それを元にリソース配分を考える、という手法を説明しました。

  • URL短縮サービスtr.imのサービス終了が教えてくれたこと | 秋元@サイボウズラボ・プログラマー・ブログ

    tinyurlやbit.lyのような短縮URLサービスで、そこそこ人気も利用者もあったとされるtr.imが、サービス終了を案内しています。 既に新規の短縮化や、リダイレクトのアクセス統計サービスなどは停止しており、URLの転送も今年の年末で終了するということ。 twitterのつぶやきなど、字数の制限された書き込みで使われることが多いURL短縮サービスで、半年以上前のURLがクリックされる回数は割合的には低いのかもしれませんが、サービスがなくなってしまうとリンクを辿れなくなる、というこの手のリダイレクトサービスが持つ問題点が発動してしまうことになります。 twitter上での人気URLを集計するtweetmemeでは、twitterで使われた短縮URLサービスのシェアも集計していますが、現時点ではtwitterの公式に採用されたbit.lyが8割近いシェアを獲得して他を圧倒しています。以前

    URL短縮サービスtr.imのサービス終了が教えてくれたこと | 秋元@サイボウズラボ・プログラマー・ブログ
    pitworks
    pitworks 2009/08/11
    毎日大量の短縮URLを生成しリダイレクトを行なってきたけれども、開発のための投資ばかりが増大し、ネットワークのコストをまかなう方法を見つけられなかった。技術よりもビジネス的な連携が勝敗に大きく関わる
  • Kazuho@Cybozu Labs: Perl のテスト用に MySQL 環境を自動で構築するモジュール Test::mysqld を書いた

    ORM やウェブアプリケーション関連のライブラリなどのテストケースを書くにあたっては、 RDBMS へのアクセスが必要になります。しかし、SQLite のようなスタンドアローンのデータベースと比較すると、サーバ型データベースである MySQL に接続してテストを書くのは、既存の MySQL の権限設定やデータベース名を気にする必要があったりと、いろいろ不便です。そこで、MySQL のインスタンスをテンポラリディレクトリに自動生成し、テストが終わったら削除してくれる Perl モジュール Test::mysqld を書きました。こんな感じで使います。 use DBI; use Test::mysqld; use Test::More; my $mysqld = Test::mysqld->new( my_cnf => { 'skip-networking' => '' }, # TCP接続を

    pitworks
    pitworks 2009/08/05
    MySQL のインスタンスをテンポラリディレクトリに自動生成し、テストが終わったら削除してくれる Perl モジュール Test::mysqld
  • Kazuho@Cybozu Labs: PostgreSQL のボトルネックを統計的に監視・解析する方法

    先日書いた「MySQL のボトルネックを統計的に監視・解析する方法」について、PostgreSQL でも pg_stat_activity テーブルを使って実行中のクエリ一覧を取得できると higepon さんに教えてもらったので、やってみました。 % ppdump > ppdump.txt のようにクエリをサンプリング (デフォルトで100秒間程度) して、 % ppfilter < ppdump.txt | ppreport のようにすると、平均負荷の高いクエリから順にソートされて表示されます。詳しい使い方や考え方については、mprofile のエントリをご参照ください。 pprofile のソースコードは、/platform/postgresql/pprofile – CodeRepos::Share – Tracに置いてあります。負荷が高い PostgreSQL 環境が手元にないの

  • Kazuho@Cybozu Labs: MySQL のボトルネックを統計的に監視・解析する方法

    MySQL のチューニング、と言った場合には、サーバーパラメータの調整や EXPLAIN コマンドを利用したクエリ実行計画の最適化が話題に上ることが多いです。しかし、発行する全ての SQL について、いちいち EXPLAIN コマンドを使って確認していては、いくら時間があってもたりません。チューニングを効率的に進めるには、まず、ボトルネックとなっている SQL クエリを特定し、次にその最適化を行うべきです。 ではどのようにして、ボトルネックを特定するのか。MySQL Conference & Expo 2009 のキーノートにおいて Mark Callaghan 氏は、Google では SHOW PROCESSLIST コマンドを使った統計的アプローチを使っていると述べていらっしゃいます (参照: MySQLConf 09: Mark Callaghan, "This is Not a

  • Kazuho@Cybozu Labs: MySQL のトリガーの実用性を確認するために InnoDB の SELECT COUNT(*) を高速化してみる

    最近 RDBMS のトリガーを色々書いているのですが、知らない人にトリガーが何かいちいち説明するのに簡単な例はないかな、というのと、MySQL の処理速度はトリガーによってどの程度変化するか、ということを確認するために、以下のような実験を行ってみました。 InnoDB はしばしば、「SELECT COUNT(*) が遅い!」と批判されます。では、トリガーを使って行数を別のテーブルにキャッシュすればいいのではないでしょうか? 以下のように、極めて小さなテーブル t1 を作り、その行数を t1_cnt にキャッシュしてみることにします。 mysql> create table t1 ( ->   id int unsigned not null primary key auto_increment, ->   v int unsigned not null -> ) engine=innodb

    pitworks
    pitworks 2009/06/30
    トリガーを使って行数を別のテーブルにキャッシュして高速化。 トリガーを使う事で1度のINSERTで2回INSERTが走るので書込パフォーマンスは約半分になるがSELECT COUNT(*)が高速に動作することが必須なら検討の余地あり
  • Kazuho@Cybozu Labs: Pacific という名前の分散ストレージを作り始めた件

    大規模なウェブアプリケーションのボトルネックがデータベースであるという点については、多くの同意が得られるところだと思います。解決策としては、同じ種類のデータを複数の RDBMS に保存する「sharding」 (別名:アプリケーションレベルパーティショニング/レベル2分散注1) が一般的ですが、最近では、分散キーバリューストア (分散 KVS) を使おうとする試みもみられるようになってきています。 分散 KVS が RDBMS sharding に対して優れている要素としては、事前の分割設計が不要で、動的なノード追加(とそれにともなう負荷の再分散)が容易、といった点が挙げられると思います。一方で、Kai や Kumofs のような最近の実装では eventually consistent でこそ無くなってきているものの、ハッシュベースの分散 KVS は、レンジクエリができなかったり (例:

  • 開発者のPHP利用はPHP5に移行した | 秋元@サイボウズラボ・プログラマー・ブログ

    という統計の話。 PHP雑誌php|architectの発行者であるMarco Tabiniさんのブログで、彼の雑誌の読者を対象に聞いた「今使っているPHPのバージョン」というアンケート結果が公開されていた。 今もPHP4での開発をメインにしているのは全体の8%に過ぎない。 開発が停止した過去のプロジェクトで、今も動いているものは多数あるので、稼動中のPHP4のサービスが8%に減ったという意味では全然ない。だけれど、開発側の意識は完全にバージョン5に移行しているとみてよさそうだ。 5.0/5.1の19%の人も5.2.xに移行するといいと思うよ。 この記事は移転前の古いURLで公開された時のものですブックマークが新旧で分散している場合があります。移転前は現在とは文体が違い「である」調です。(参考)記事の内容が古くて役に立たなくなっている、という場合にはコメントやツイッターでご指摘いただければ

    開発者のPHP利用はPHP5に移行した | 秋元@サイボウズラボ・プログラマー・ブログ
    pitworks
    pitworks 2008/12/11
    PHP4での開発をメインにしているのは全体の8% 5.0/5.1は19% 5.2.x利用は63%とアップデート志向(開発が停止した過去のプロジェクトで、今も動いているものは多数あるので、稼動中のPHP4のサービスが8%に減ったのでは無い)
  • whenisgood 「いつ空いてるか」だけを視覚的に送るサービス | 秋元@サイボウズラボ・プログラマー・ブログ

    登録ナシ。Flashの画面で空いている時間帯を緑色にして、相手のメールアドレスを入れるだけ whenisgood.net 受け取った人が開くと、最初の人が「OK」とした時間帯だけが選べる状態でFlashが開くので、またここから大丈夫な時間を選んで、次の人に送る。 これを繰り返すことで、時間の絞込みが直感的に行なえるというわけ。 それぞれの人が自分のタイムゾーンを選べるようになっており、選ぶと空いている時間帯が自分のタイムゾーンにずれるようになっている。テレビ会議の調整なんかでも使えそうだ。 Share360でタイムゾーンを越えたスケジュール設定機能の仕様にたいへん苦労した記憶があるが、このUIと、ウェブとメールを組み合わせたシンプルなシステムは面白いなと思った。 この記事は移転前の古いURLで公開された時のものですブックマークが新旧で分散している場合があります。移転前は現在とは文体が違い「

    whenisgood 「いつ空いてるか」だけを視覚的に送るサービス | 秋元@サイボウズラボ・プログラマー・ブログ
    pitworks
    pitworks 2008/04/04
    UI
  • 1