タグ

ブックマーク / blog.nomadscafe.jp (40)

  • Plack::Middleware::ReverseProxy はIPアドレスを利用する他のミドルウェアより先に指定しましょう! - blog.nomadscafe.jp

    割と良く見る間違いです builder { enable "ServerStatus::Lite", path => '/server-status', allow => [ '127.0.0.1', '192.168.9.0/24'], scoreboard => ..; enable 'ReverseProxy'; $app; }; これは間違いです。リバースプロキシ配下にてアプリケーションサーバを起動すると、/server-statusに対して全世界からアクセス可能になります Plack::Middleware::ReverseProxyがX-Forwarded-Forヘッダをみて、REMOTE_ADDRを書き換える前、上の図の状態でPlack::Middleware::ServerStatus::Liteが実行されてしまうので、/server-statusへのアクセスが許可されてし

    soh335
    soh335 2012/12/07
  • DBIx::DSN::Resolver ってのを書いた - blog.nomadscafe.jp

    YAPC::Asia Tokyo 2012 始まりましたね。 それとはあまり関係なく DBIx::DSN::Resolver というモジュールを書いてリリースしました https://metacpan.org/release/DBIx-DSN-Resolver 何をするモジュールなのかというと、DBIでデータベースに接続する際に使うDSN中のホスト名を名前解決してくれるモジュールです。mobageでxaicronが書いていたのを参考にして作りました dbi:mysql:database=mytbl;host=dbserver.local これを dbi:mysql:database=mytbl;host=10.9.4.1 と変換してくれます。 また、名前解決する機能を差し替える事ができるので、そこでキャッシュを挟む事も可能です。Cache::Memory::Simpleを使うと以下のよう

    soh335
    soh335 2012/10/20
  • Apache httpd.conf の Allow from .. にコメントを書いてしまうとDNSの逆引きが行われてレスポンスが悪化するので注意の件 + コメントが書けるようになるパッチ - blog.nomadscafe.jp

    Apacheのconfにコメントを書く際に、設定の後ろに書く事はできないのは知られているのかどうかよくわかりませんが、その通りです。例えば MaxRequestsPerChild 200 #少なめに これは syntax error になります % ./local/httpd/bin/apachectl -t Syntax error on line 12 of /Users/.../local/httpd/conf/httpd.conf: MaxRequestsPerChild takes one argument, Maximum number of requests a particular child serves before dying. よくやりがちなんですが、ドキュメントにも Directives in the configuration files are case-in

  • GrowthForecastに1分更新グラフ作成とサマリーなどのJSONフォーマットでの出力機能追加 - blog.nomadscafe.jp

    「GrowthForecastというグラフ表示ツールで捗る話」で紹介したGrowthForecastですが、モリス氏のfluent meetupでの発表やriywo氏の発表で少し紹介されていたりするわけですが、社内でも少しずつメトリクスが増えて活用されています。 データが既に入っているので大きな変更はできないのですが、少し機能追加をしています。 ソースコード https://github.com/kazeburo/GrowthForecast GrowthForecast はWebアプリケーションとWorkerの2つから構成されています。APIに対してPOSTされたデータは、一旦SQLiteDBに格納され、Workerがそれを取得、RRDファイルを更新します。これまでは5分毎に動くworkerがいるだけでしたが、そこに1分毎動くworkerを追加しました。 上の図のようにworkerが2

  • Plack::Middleware::ReverseProxy でリモートホストを確認する理由 - blog.nomadscafe.jp

    Reverse Proxyの後ろでApplication Serverを動かす際に、REMOTE_HOSTを当のアクセス元に書き換えてくれる仕組みはいくつかありますが^1、Plackでは壇上氏の Plack::Middleware::ReverseProxy がそれにあたります。 ^1 例えば mod_extract_forwarded http://www.openinfo.co.uk/apache/ PM::ReverseProxy のSYNOPSISでもそうなってますが、このような仕組みを使う場合、REMOTE_HOSTを指定するのが安全です。 builder { enable_if { $_[0]->{REMOTE\_ADDR} eq '127.0.0.1' } "Plack::Middleware::ReverseProxy"; $app; }; 拙作の Plack::Buil

  • Plack::Middleware::AccessLog でありがちな罠 - blog.nomadscafe.jp

    Plack::Middleware::AccessLog は Apacheライクなログが残せる便利ミドルウェアなんですが使う上で一つ注意点があります。 use Plack::Builder; builder { enable "AccessLog", format => "combined"; sub { die }; }; これで、500エラーのログが残ることを期待するかもしれませんが、実際は記録されません。 例外がMiddleware層を飛ばしてServerまで伝わる為で、何らかの形で例外を補足してあげる必要があります。 例えば、Plack::Middleware::HTTPExceptions builder { enable "AccessLog", format => "combined"; enable "HTTPExceptions"; sub { die }; }; もしく

  • Kansai.pm #14 に参加して発表しました - blog.nomadscafe.jp

    GrowthForecastについては、また別のエントリーとして詳しく紹介したいと思います。 kentaro氏のAPNs周りの実装のトーク、papix氏のYAPC::Asiaに行ってきたアツい話、またgardejo氏の汎用機で如何にPerlを使うかのLTなど面白く聞かせて頂きました。実はKansai.pmに参加するのは今回で2回目で、1回目は京都に住んでいる際に行ったlapis25氏のプレゼン中にもあった第六回だったりするのですが、その時と今回と共通して感じた事としてWebサービス以外の場所でもPerlが多く使われているんだなぁということがあります。普段Yokohama.pmに参加したり、社内で会話をしていると、ほぼ全てWebサービスに関連した話となってしまいますが、実際にはもっと広く、メインフレーム・汎用機上のプログラムを処理する為にPerlを使ったいたり、大学の研究で活用されているんだ

  • blog.nomadscafe.jp

    PHPの勉強会なので、いままでお会いしたことのない方とお話ができてよかったです。 発表内容は大きくなってしまったmaster.phpファイルをどうやって高速に読むかというお話です。PHPではリクエストの終了とともに全てのメモリを捨ててしまうので、変わらないデータもリクエストの度にキャッシュからロードしなくてはいけません。大きなphpファイルがあれば当然毎回の読み込みがオーバーヘッドとなってきます。そんな環境でどうやってアプリケーションのパフォーマンスをあげていったのかを紹介しています。 スライドの中でfile sizeを小さくする必要があると書きましたが、@hnwさんによると、VM命令が多過ぎるのが問題で、構造を簡単にしたことでVM命令が減ったのがよかったのではとのことでした。非常に参考になりました。ありがとうございました そろそろ傷が癒えてきた。。 ISUCON5の選にメルカリのインフ

  • GrowthForecastというグラフ表示ツールで捗る話 - blog.nomadscafe.jp

    追記 2012/06/22 公式ページを作りました。そちらも参考にしてくださいませ GrowthForecast - Lightning fast Graphing / Visualization http://kazeburo.github.com/GrowthForecast/ Kansai.pmのLTでも紹介したんだけど、APIを叩く事でグラフを更新するツールを書きました。話の発端としては「cloudforecastのグラフを外からAPIで更新したい」ということでしたが、cloudforecastではグラフの追加が重い処理になってしまうので、別のプロダクトとしています。 サーバの負荷などのメトリクスを収集し、グラフ化することで、システムに掛かっている負荷を把握し、パフォーマンスに影響がでるまえに対策をうったり、改善の結果を知る事ができますが、同じ事はシステムだけではなく提供しているサ

  • Covering Index と self-join と MySQL - blog.nomadscafe.jp

    某サービスのクエリチューニングのお話。 ブログとか日記とかそういうサービス系で次のようなテーブルがあったとします。 CREATE TABLE entries ( id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, user_id INT UNSIGNED NOT NULL, posted_by TINYINT UNSIGNED NOT NULL, --#PC、mobileなどどこから投稿されたかのフラグ title VARCHAR(512) NOT NULL, body TEXT NOT NULL, created_at DATETIME NOT NULL, updated_at TIMESTAMP NOT NULL, status TINYINT UNSIGNED NOT NULL, INDEX (user_id,created_at

    soh335
    soh335 2011/08/14
  • OrePANとcpanmでCPANの部分ミラーを作ってCPANモジュールを管理する - blog.nomadscafe.jp

    これまでサービスで使うCPANモジュールの管理と言えばrpm/debパッケージが主流だと思いますが、最近ではperlbrewで使いたいバージョンのperlをインストールすることもあり、rpm/debでは対応できなくなってきています。 perlbrewのperlに対してプロジェクトが依存しているCPANモジュールを入れる際、 $ perlbrew switch perl-5.12.3 $ cd /path/to/MyProj $ perl Makefile.PL $ cpanm --installdeps . などと cpanm —installdeps が使えます。 しかし、これではサーバを新規セットアップするたびに、最新のモジュールが入ることになりサーバ間でモジュールのバージョンの差異が生まれる可能性があります。 そこで対応策として考えられるのが開発サーバで—installdepsを実行

    soh335
    soh335 2011/07/09
  • 今こそ見直すApacheの設定 - blog.nomadscafe.jp

    nginxやvarnishなどがアツいですが、Apacheもまだまだ実績や安定性から採用されていると思います。ここではデフォルトとは異なる値に変更するサーバ設定を中心に、パフォーマンス改善、安全性向上のためのApacheの設定を紹介します。 mpmの確認 > /path/to/bin/httpd -V Server version: Apache/2.2.19 (Unix) Server built: Jun 23 2011 17:13:13 Server's Module Magic Number: 20051115:28 Server loaded: APR 1.4.5, APR-Util 1.3.12 Compiled using: APR 1.4.5, APR-Util 1.3.12 Architecture: 64-bit Server MPM: Worker PreforkやW

  • Webアプリケーションエンジニアはノマドであれ(特定のサーバに依存しない方法) - blog.nomadscafe.jp

    弊社では毎週水曜日はノーエンジニアデーなので、最近はMacbook AirとWIMAX持って外で仕事しています。意外と快適ですが、ここで書くのはサーバの使い方の話です。 ときおり、次のような状況に遭遇することがあります。 開発環境して使っているけど、セットアップをどのように行ったか残っていないので、新サーバへ移動できない 番環境だけど、セットアップをどのように行ったかわ(ry デプロイ元/管理ツールサーバとして使っているので古いサーバだけど捨てることができない DBがどこから参照されているか管理できていないので、サーバの入れ替えが困難 コードがどこから参照が把握できていないので、容易にサーバ構成の変更ができない 椅子^H^H 一度設置したサーバの移動なんてなかなかすることないと思う人はいるかもしれないけど、サーバが何の警告もなしに突然壊れて入れ替える必要がでてくるのはもちろん、インフラ技

    soh335
    soh335 2011/06/28
  • WWW::GoogleAnalytics::Mobileというモジュールを書いた - blog.nomadscafe.jp

    JavaScriptが使いにくい携帯などの環境でGoogle Anlyticsを利用する場合は、通常このサイトで配布される1x1の画像を吐き出すサーバサイドのビーコンスクリプトを設置し、 Webサイドからリンクを張りますが、このサーバサイドのスクリプトのうちPerlのコードはCGI以外では実行しづらいモノなので、PSGIにアプリケーションにしてCPANにリリースしました。 加えて、タイムアウトの制御が細かくできるようLWPをFurlにし、勝手にビーコンが他人に利用されないようchecksumを追加しています。また、PSGIアプリケーションで利用できるURL生成用のクライアントライブラリもつくりました。 使い方。まずサーバサイド。 use WWW::GoogleAnalytics::Mobile::PSGI; use Plack::Builder; builder { mount "/ga"

    soh335
    soh335 2011/03/22
  • PSGIアプリケーションをリバースプロキシ下で使う際の静的コンテンツの配信方法について - blog.nomadscafe.jp

    PSGIアプリケーションをリバースプロキシ下で使う際の静的コンテンツの配信は、リバースプロキシー側で行う事が多いと思うのですが、こうやるのが良いんじゃないかという案。 プロジェクトのトップディレクトリにhtdocsを作成し、その中にfavicon.ico、staticディレクトリをいれます $ ls -l /path/to/myproj/htdocs Total xxx -rw-r--r-- 1 user user 1406 Jun 30 2010 favicon.ico drwxr-xr-x 6 user user 204 Jan 21 16:39 static $ ls -l /path/to/myproj/htdocs/static Total xxx drwxr-xr-x 4 user user 136 Jun 30 2010 css drwxr-xr-x 11 user user

  • リクエスト単位のコンテナを実現するScope::ContainerのPlack::Middlewareをリリースしました - blog.nomadscafe.jp

    Apache、mod_perlにおけるpnotesのようにリクエスト単位でデータを保持できるPlack::Middlewareをリリースしました。実装にはScope::Containerを利用しています。 使い方は簡単Plack::BuilderでScope::Containerのmiddlewareを有効にします use Plack::Builder; builder { enable "Scope::Container"; $app; }; とくにオプションなどはありません。 これでリクエストがあった際にScope::Containerのstartscopecontaierを呼んでくれるので、アプリケーションのなかでscope_containerを使って簡単にデータの出し入れが行えます。 以下はHTTP接続をリクエストの間だけKeepAliveするサンプル package MyApp:

  • Shibuya.pm#14 で memcachedの運用について発表しました - blog.nomadscafe.jp

    2010夏のmemcachedシリーズもいよいよ最後となりました。 1歳8ヶ月のうちの息子も見ていた Shibuya Perl Mongersテクニカルトーク#14「IPAとJPAは違う団体です」でmemcachedの運用について発表をさせていただきました。今回は監視scriptの書き方やcronlog、Nagiosの設定tipsなどの内容にしました。memcachedの監視というよりかは一般的なノウハウ寄りだったかなと 監視の狭間問題の対策としてmemcachedのuptimeを見るscriptを紹介していますが、この問題はmemcachedには限りません。自動的に再起動してくるようなサービスで勝手に再起動した=何か問題が起きたと想定できる、例えばMySQLや /proc/sys/kernel/panic が設定されているLinuxにも同じような監視が必要になるでしょう。 MySQLであ

    soh335
    soh335 2010/10/03
  • プロのサーバ管理者がApacheのStartServers, (Min|Max)SpareServers, MaxClientsを同じにする理由 - blog.nomadscafe.jp

    kazuhoさんが「プロのサーバ管理者の間では存在価値が疑問視されて久しい (Min|Max)SpareServers だと思う」と書いたり、hirose31さんが去年のYAPC::Asiaで{Start,{Min,Max}Spare}Servers,MaxClientsは同じにしているよと発表したり、実際前職のサーバはそのように設定されていたのですが、自分でうまく説明ができてなかったので、調べながら書いてみた。 当はイントラブログ用に書いていたものですが、がんばったので転載。 前提として、CPUの使用率におけるsystemとfork Re: クラウドがネットワークゲーム開発者にもたらしてくれたもの - blog.nomadscafe.jpでも書いている通りforkってのはサーバにとって重い部類の処理になります。つまり負荷の高いときにforkを大量に行うのはしてはならないことの1つです。

  • CloudForecastっていうリソース監視のツール/フレームワーク作った - blog.nomadscafe.jp

    「クラウド」って言ってみたかった。今は反省していr 上のグラフは前回のエントリーを公開したときの、当blogを配信しているサーバのトラフィックグラフです。記事を公開した17時にぴょーんとトラフィックが伸びています。4時にも増えているけどこちらは謎。 実はこのグラフもCloudForecastを利用して取得しています。CloudForecastはサーバ等のリソース監視を行うツールもしくはフレームワークで、rrdtoolの薄いラッパーとして動作し、小規模から大規模なサーバ群を一括で管理できるように設計してあります。tokuhirom曰く、「perlが書けてrrdtoolがつかえるsysadminの人だったら使いやすいと思われる」というのがもっともしっくりくるような気がします。Perlとrrdtoolが使える運用者によるカスタマイズ前提なのがフレームワークと呼んでいる所以です。 CloudFor

    soh335
    soh335 2010/06/01
  • PSGI/Plackで非同期 Web Server - blog.nomadscafe.jp

    PSGI/Plackにおいて、非同期にレスポンスが返せるstreamingという仕様/機能が追加されました。 PSGI/Plack streaming is now complete これを使うと、streamingをサポートしたサーバから非同期/nonblockingにhttpやGearmanを利用して外部へ問い合わせを行い、その結果をレスポンスしたりできます。 また、これがPlackで既に実装済みなので、非常に短いコードでサーバの実装ができちゃいます。 すばらしいですね。 すでにmiyagawaさんが、この機能を利用した非同期Web Framework「Tatsumaki」を書かれています。 イベントを扱う部分が隠蔽されているので、これを使うとさらに簡単に実装できます。 すばらしすぐる。 ここでは、簡単に外部へAnyEvent::HTTPを用いて、HTTPリクエストを行うサンプルを書い