タグ

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

  • CentOS 6.2 で RPS/RFS を使ってネットワークの割り込み処理を複数コアに分散してみた - blog.nomadscafe.jp

    以前(2010年)に「アプリケーションがマルチスレッドでもマルチコアCPUを活かせない件」というエントリにてCPUのコアが増えても割り込み処理が分散されないのでスケールされないと書いたけど、その後Linux KernelにRPS/RFSなる機能が追加され、割り込み処理が分散できるようになり、CentOS 6.2 でも使えるらしいので試してみました。 RPS/RFSについての紹介は VIOPS06で「RPS・RFS等最新Linux Kernel事例」と題してお話してきました http://d.hatena.ne.jp/syuu1228/20110722/1311322653 Linux内核 RPS/RFS功能详细测试分析 http://www.igigo.net/archives/204 が詳しい。2番目のはほぼ読めないけど、性能比較のグラフが分かりやすい。 今回試したサーバは、 OS: C

  • ディレクターやエンジニアが運用エンジニアにインフラの相談をする際に持って来て欲しい5つのこと - blog.nomadscafe.jp

    新しいWebサービスを開始する際や、既存サービスに変更を加える際に、サーバを何台確保するか、ストレージやAPIといった共有リソースを使用して良いか、ディレクターやアプリケーションエンジニアの方に訪ねられることがありますが(というかそれが仕事ですね)、その際相談のためにどんな情報を持って来て欲しいか書いてみます。人間同様にサーバやネットワークリソースも有限なので、無駄にならない最適なサーバ台数を割り出したり、増強が必要かどうかを判断して、会社のビジネスを効率よく進めていくことが重要です。 人によっては以下に書いてあることが、非常に緩く感じでしまうこともあるかもしれません。これはWebサービスを早く立ち上げて、柔軟に運用していくことができる環境ならではだと思います。それでも出して欲しいモノはいくつかあります 企画書 どんなサービスであるか説明できる企画書があるといいでしょう。ないわけはないと信

  • メール受信をTriggerにしてコマンドを実行する代わりにMaildirを監視して負荷を削減する - blog.nomadscafe.jp

    サーバが重かった原因は別だったんだけど、某サービスでメールを受信してプログラムを起動する際のコストが大きいんじゃないかという話をしたので、以下のようなことを考えてみた。 qmailを使っている場合、届いたメールをプログラムで処理したい場合は .qmail に | /path/to/program.pl と書きます。標準入力にメールの内容が渡され、環境変数等を通して表書き発送者アドレス等が取得できます。postfix でも master.cf にtransportを追加し、mapファイルを変更すると大体同じことができます。 参考: RailsとPostfixで受信メールを処理する方法 ただし、この方法だとメールの受信の度にプログラムを起動(exec)するコストが高くなりがちです。特にデータベースに接続したり、アプリケーションのライブラリを読み込んで行くと起動の負荷が上がって行ってしまいます。

  • Webアプリケーションにおける Job Queue システムの構成例と Worker を作る際に気をつけること - blog.nomadscafe.jp

    Webアプリケーション内で処理を直列に実行せずにJob Queueに回して非同期に実行することが多くなって来て久しいと思いますが、そのおすすめ構成と気をつけることについてつらつらと。 1) 既存のデータベースをキューとして使う構成例 1つ目はMySQLなどのデータベースをキューとして用いる例。既にアプリケーションで利用しているデータベースにキュー用のテーブルを作成して利用します。データベースを利用したキュー管理の仕組みとしてJonk、Qudo、TheSchwartzなどがPerlでは有名どころです。 依存するミドルウェアが増えないので最もシンプルな構成になると思います。 上記の図ではWorkerはアプリケーション内で実行することで冗長性を確保しますが、キューを格納するデータベースはSPOFになります。しかし、、データベースに障害があった場合キューだけでなくすべてのサービスが停止すると思われ

  • Webサーバ勉強会#3に参加してきました - blog.nomadscafe.jp

    紹介したrpmのspecファイル、設定ファイル、オレオレpatchなどはすべてgithubにあります。 rpm: https://github.com/kazeburo/rpm/tree/master/httpd_proxy patch: https://github.com/kazeburo/apache-httpd-patch あわせて読みたい プロのサーバ管理者がApacheのStartServers, (Min|Max)SpareServers, MaxClientsを同じにする理由 mod_expiresでExpiresとCache-Controlを上書きする 再掲: mod_proxyのretryを2段階にするpatch PSGIアプリケーションをリバースプロキシ下で使う際の静的コンテンツの配信方法について \n\n\n紹介したrpmのspecファイル、設定ファイル、オレオレp

  • Short-term Edge Cache (フロントサーバでの一時キャッシュ) - blog.nomadscafe.jp

    3日間で去年一年間分の花粉が悲惨したようです。元気です。 「HTTPコンテンツ圧縮はどのレイヤーで行うのがいいか」で書いたあたりと問題は共通しているのですが、大規模サイトの運用で最近割とボトルネックとなりやすいのはラック-集約スチッチ間のトラフィックです。1台あたりの性能が飛躍的に向上し、画像転送では100Mbps〜300Mbps、それ以上ぐらいは楽に吐き出すようになっているので、ラックスイッチの1Gbpsのuplinkではすぐに詰まってしまいます。この対策として、高トラフィックのサーバを分散配置したり、link aggregationにて2Gbps-4Gbpsに増速したり、あるいは10Gの導入を検討すると思いますが、それには手間もお金もかかるので、まずはトラフィックを減らせないか考えるわけです。 そこで最近、2カ所ほどでとった方法が、フロントのReverse Proxyで短時間、キャッシ

  • MySQLのserver-idの振り方 - blog.nomadscafe.jp

    たくさんのMySQLサーバを運用している際に、一意なserver-idを生成するルールを作っておくと急な負荷上昇でslaveサーバを追加しないと行けなくなった時に、masterや他のslaveのserver-idを調べてユニークなidを考える手間を減らす事ができます。 自分はプライベートIPアドレスの第三オクテットと、第四オクテットを使い server-id = 第三オクテット*256 + 第四オクテット としています。192.168.67.135 なら server-id = 67*256 + 135 = 17287 です。/16 以下のネットワークならIDが被る心配ありません。セットアップツールなどで自動でmy.cnfに入れてしまうこともできると思います。 もし /16 ネットワークよりも大きなネットワークなら第一、第二オクテットも計算に含めればいいんじゃないでしょうか。server-

    R-H
    R-H 2011/02/10
  • HTTPコンテンツ圧縮はどのレイヤーで行うのがいいか - blog.nomadscafe.jp

    Reverse ProxyとApplication Serverの2段構成でWebサービスを運用している場合、mod_deflateなどのHTTPコンテンツ圧縮をどちらでやるのがいいのだろうか 少し考えてみると、Reverse Proxyで一括してコンテンツ圧縮する場合は、圧縮に関する設定を1カ所でまとめられるという利点がある、ただし、Reverse ProxyとApplication Serverとの間は未圧縮で流れるため、この間で通信量が多くなる。 逆にApplication Serverでも圧縮した場合は、圧縮の設定を両方のサーバに書く必要があるが、サーバ間での通信量は減らすことができる。 おそらくWebサービスの規模が小さいうちは、サーバ間での通信量が気になることはないので前者の設定を一カ所にまとめるほうがよく、Application Serverの台数が10台〜20台程度になって

  • データベースサーバを複数台構成とか2010年代には流行らない - blog.nomadscafe.jp

    奥一穂さんの「ウェブアプリケーションサーバを複数台構成とか2010年代には流行らない」にフォローのような感じで。 例によってタイトルは煽りです。 奥一穂さんのエントリーでは、「5,000万PV/Month」という見積もりでアプリケーションサーバの台数を1台と計算していますが、これからは「1,000万PV/Day」を超えるサイトが多く生まれてくると予想しています。どんなサイトかというと、mixiアプリやモバゲーなどにソーシャルゲームを提供するサイトです。 ソーシャルゲームサイトのキャパシティプランニングについては中澤さんのエントリーが参考になります。 The Art of モバゲー Capacity Planning The Art of Mixi-mobile-appli Capacity Planning 最も人気がでた場合には数千万から数億PV/Dayという数字がならんでいます。怖い怖

    R-H
    R-H 2010/12/30
  • XSSを回避しつつ、テンプレートからJavaScriptにJSONで値を渡す方法 - blog.nomadscafe.jp

    HTMLのscriptタグ内にデータを埋め込む際のエスケープ処理モジュール書いた」に引き続いて、XSSを避けつつ複数の値をJSONで渡す方法。 答えはmalaさんが書いてます テンプレートエンジンでJSONを生成する(多くの場合間違えるので、推奨しない) scriptタグの中でJSONを使わない 可能であればJSONライブラリのオプションで<>/いずれかをエスケープする。 生成されたJSON文字列の<>/いずれかを正規表現などを使って置換する。 JSONのvalueに当たる部分には「HTMLエスケープ済みの文字列を入れる」という規約を設けて事前にエスケープする。 の3番目以降。 ということで実装してみる。目標としてはXslateのfilterとして実装 [% hashref | json %] の様な形をとり、JSONのvalueにあたる部分はすべてHTML Escapeし、HTML中に

  • HTMLのscriptタグ内にデータを埋め込む際のエスケープ処理モジュール書いた - blog.nomadscafe.jp

    追記 CPANリリースしました http://search.cpan.org/dist/JavaScript-Value-Escape/ /追記 malaさんの「HTMLのscriptタグ内に出力されるJavaScriptのエスケープ処理に起因するXSSがとても多い件について」にちょろっとでているgistのコードをモジュールにしました。 JavaScript::Value::Escape - https://github.com/kazeburo/JavaScript-Value-Escape JavaScript::Value::EscapはHTMLのscriptタグ内にデータを埋め込む際に、少々過剰にエスケープを行うものです。このモジュールではq!”!, q!’!, q!&!, q!>!, q!<!, q!/!, q!\!, qq!\r! と qq!\n! を\u00xxなどに変換しま

  • ログレベルの使い分け方/コミュニケーション手段としてのログ - blog.nomadscafe.jp

    Log::Minimal v0.02をリリースしました。xaicronさんのpatchにより出力するログのレベルを変更することができるようになりました。 WARN以上のログだけを出したい場合、$Log::Minimal::LOG_LEVEL を変更します。 use Log::Minimal; local $Log::Minimal::LOG_LEVEL = "WARN"; infof("info"); #出力されない warnf("warn"); #出力される デフォルトのレベルはDEBUGです。なお、デバックメッセージを出すには環境変数も設定されている必要があります。 ところで、Log::Minimalでは4つのログレベル、DEBUG、INFO、WARN、CRITICALをサポートしていますが、他のLogモジュールではより詳細なレベルを用意しているものがあります。そのため、アプリケーショ

    R-H
    R-H 2010/11/09
  • 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であ

  • gumiStudy#2 で memcached の運用について喋ってきた - blog.nomadscafe.jp

    例の件以来、memcachedについて書いたり話したりする機会が多く頂いています。次はShibuya.pm で再び監視について発表する予定です。また、今回の発表でも紹介したリソースモニタリングツール cloudforecast はYAPC::Asiaで詳しく説明します。Shibuya.pmは参加のキャンセル待ちがかなり多い状態ですが、YAPC::Asiaはまだまだチケット絶賛発売中です。ぜひいらしてくださいませー。 \n\n例の件以来、memcachedについて書いたり話したりする機会が多く頂いています。次は[Shibuya.pm](http://shibuya.pm.org/) で再び監視について発表する予定です。また、今回の発表でも紹介したリソースモニタリングツール cloudforecast はYAPC::Asiaで詳しく説明します。Shibuya.pmは参加のキャンセル待ちがかなり

  • [gihyo.jp連載] 最終回 memcachedを快適に利用するTips集 - blog.nomadscafe.jp

    第三回の紹介をしない間に、連載「memcachedの活用と運用 実践編」の最終回が公開されました。最終回は、memcachedを多く運用してきた経験から得た小さめのTIPSをいくつか紹介する回となっています。 言語依存の話になるので詳しくは書きませんでしたが、記事中のincrementのサンプルで my $result = $memd->incr($key, @_); if ( defined $result && ! $result ) { ... } このように冗長にみえる条件文になっていますが、このdefinedと!$resultの意味はCache::Memcached::Fastのドキュメントを読むと解ります。 Return: unsigned integer, new value for the $key, or false for negative server reply,

  • 1