タグ

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

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

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

    hidehish
    hidehish 2011/07/17
    見てる:
  • 今こそ見直す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

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

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

    hidehish
    hidehish 2011/06/07
    見てる:
  • memcached を使ったアプリケーションの設計について - blog.nomadscafe.jp

    クライアントからmemcachedを利用する際の、ベストプラクティスは以前書いているので、その前段階でmemcachedを含めたWebアプリケーションのアーキテクチャ(と一部クライアントの話)について今の個人的な考えをまとめてみます。Kyoto Tycoonを使ったキャッシュサーバでも基は同じだと思います 1) 使わない memcachedをアプリケーションに組み込むことで、プログラムがどうしても複雑になりがちです。データの削除や更新の際にキャッシュの更新を忘れると多くの問題が発生します。例えばユーザがニックネームやプロフィール写真を更新したのに画面上変わらないなどの現象が起こると、ユーザに対して不快な思いをさせてしまうでしょう。またデータベースが非同期のレプリケーションを行っている場合、masterに対してデータの変更をかけ、更新が反映される前にslaveから読み込んでしまい、キャッシ

    hidehish
    hidehish 2011/06/04
    見てる:
  • 私家版省サーバ運用2011またはWebシステムのコンポーネントの配置について - blog.nomadscafe.jp

    小規模のサービスを如何にスモールスタートするか、そのために各コンポーネントをどうやって配置するのがいいのかという話。個人的な考えも含めて。 大まかな構成は昨年のnekokakさんのYAPC::Asiaでの発表、省サーバ運用と大体同じです。Web/Appに使うサーバ2台、データベース2台です。あとはLBが別にあればそれを、なかったらもう一台(組)必要となります。 Web/Appサーバには、Reverse Proxy、Application Serverがまず配置されます。あとは必要に応じてmemcached、Job Queueのworkerを動かします。ここまでのコンポーネントは2台のサーバ両方に配置し、Active-Activeで動作し冗長性がとれるよう構築します。cronについては、両方のサーバで動かしても問題がない状態が理想ですが、そうでない場合、Web/Appの1台目で動かすというル

    hidehish
    hidehish 2011/06/03
    見てる:
  • Kyoto Tycoon と GreenBuckets を組み合わせて使う - blog.nomadscafe.jp

    分散Object Storageの GreenBuckets ではストレージノードの実装を問わないので、こういうこともできると言う例 Kyoto Cabinet の Directry Hash DataBase を使うと、ファイルシステム上の1ファイルが1レコードとなるデータベースを作成することができます。通常のDBMでは数KBまでの小さいデータに性能が最適化されているのに対して、Directry Hash DataBaseでは数十KB〜のデータを扱いやすくなるということらしいです。 もちろん、Kyoto Tycoon からも使うことができるので、GreenBucketsのストレージノードとしても利用できます。 まず、ktserver でノードを立ち上げます。今回は試しに1つのktserverで複数のデータベースを担当させ、それぞれ1ノードとして扱います。 $ ktserver -li -

    hidehish
    hidehish 2011/06/01
    見てる:
  • GreenBuckets という Object Storage を作りました - blog.nomadscafe.jp

    GreenBuckets という Object Storage を作りました Object Storage とは何かというと、OSSではOpenStack Object StorageとかMogileFS 、Webサービスで使われているところでは mixi の ImageCluster とか livedoor の STF とか、比較にならないけどAmazon S3とかそういったたぐいのものです。しばしば画像のストレージなんかに使われていると思います。今回作ったのは GreenBuckets というもので、mixiのImageClusterの構成をまねしつつ、stfと同じようにバケット単位での操作を可能としています。なんですでにあるのに作ったのかというと、主に「つくってみかったから」ですね。一応目標として シンプルだけど使える cpanm でインストールが完了する できるだけ少ない依存関係

    hidehish
    hidehish 2011/05/12
    見てる:
  • dotcloud で nopaste なアプリケーションを動かしてみたよ - blog.nomadscafe.jp

    miyagawaさんがjoinしてにわかにアツいdotcloudでnopasteなアプリを動かしてみたよ nonopaste http://www.kazeburo.dotcloud.com/ ソース https://github.com/kazeburo/NoNoPaste-Cloud 元々、ここで紹介したモノで、dotcloud上で展開するにあたりいくつか変更している。主な変更点は psgiをapp.psgiにrename。libへのパスも通す 手軽に動かすためにSQLiteだったのでMySQLに変更 MySQLの設定はホームディレクトリ以下に config.pl を置いてそれを読む込む仕様に サーバの時間がUTCなのでそれにあわせて変更 Makefile.PL に不足がないように inc ディレクトリもgitで管理 です。 だれかが書いていたような気もするけど、dotcloud で

    hidehish
    hidehish 2011/05/07
    見てる:
  • Webアプリケーションエンジニアに知っていて欲しいインフラの知識 - blog.nomadscafe.jp

    過去に何回か、Webアプリケーションエンジニア向けのインフラ勉強会があったらいいなぁとtwitterにつぶやいたことがありますが、じゃぁ実際どんな内容が良いのか、あまりまとまっていませんでしたので、整理してみました。 まぁ「Webアプリケーションエンジニアに知っていて欲しいインフラの知識」と言いながらWebアプリケーションの運用の仕事をしている自分でも専門にやっている方からみて完璧に答えられる自信はありません。ただ今の世の中ググれば答えは見つかるので「概要は知っている」そして「詳細を調べる方法を知っている」ぐらいで問題ないと思っています。 ネットワークにおけるレイヤ2,3,4,7の概要 TCP/IPの通信開始、通信終了時の状態遷移の把握 IPアドレス、セグメント、スタティックルーティング、NAT CPUのトレンド HDDの構造 RAIDレベル、RAIDカードのBBUの役割 SSDの特徴 ハ

    hidehish
    hidehish 2011/03/10
    見てる:
  • Short-term Edge Cache (フロントサーバでの一時キャッシュ) - blog.nomadscafe.jp

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

    hidehish
    hidehish 2011/03/01
    見てる:
  • memcachedにおけるキャッシュシステムの Thundering Herd 問題への対策案 - blog.nomadscafe.jp

    キャッシュシステムの Thundering Herd 問題とは、 通常、キャッシュに格納されるデータは、それぞれ単一の生存時間をもっています。問題は、頻繁にアクセスされるキャッシュデータがエクスパイアした際に発生します。データがエクスパイヤした瞬間から、並行に走る複数のアプリケーションロジックがミスヒットを検知し、いずれかのプロセスがキャッシュデータを格納するまでの間、同一のリクエストが多数、バックエンドに飛んでしまうのです。 という問題。クエリが重かったりするとそれだけでシステムに致命的な負荷を与えてしまい、キャッシュがあるにも関わらずキャッシュが切れたタイミング全体が停止することも考えられます。memcachedでこの問題に対応するため、次のような手段を考えてみました。 まず、保存時に通常のキャッシュと、それよりも指定した秒数Expiresが短いキャッシュを2つmemcachedに対し

    hidehish
    hidehish 2010/12/18
    見てる:
  • CloudForecastに複数サーバ一括表示とデータ取得状態の確認機能付きました - blog.nomadscafe.jp

    CloudForecastに何人かの方から要望があった複数サーバの一括表示機能がやっと付きました。 作ってみたら便利で、ライブドアでは既に活用しまくってます。チューニング後の比較や一部のサーバに問題があった場合の確認などにも使えると思います。もちろん右上の日付範囲指定もできるので、特定の期間にしぼってグラフを表示することも可能です。 複数のサーバを表示する時は、サーバリストページで、サーバ名の左側のチェックボックスにチェックを入れます。Gmailと同じくShiftキー+マウスクリックで範囲選択することができます。そして上部メニューの「View Selected Hosts」ボタンをクリックします。選択したサーバはこのボタン横のチェックボックスのチェック外すことで全て解除できます。 さらに、サーバリソースデータの取得状態を確認する機能も追加しました。チェックボックスの左側の「✖」の色でステー

    hidehish
    hidehish 2010/11/27
    見てる:
  • 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中に

    hidehish
    hidehish 2010/11/18
    見てる:
  • 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などに変換しま

    hidehish
    hidehish 2010/11/16
    見てる:
  • ログレベルの使い分け方/コミュニケーション手段としてのログ - 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モジュールではより詳細なレベルを用意しているものがあります。そのため、アプリケーショ

    hidehish
    hidehish 2010/11/10
    見てる:
  • 運用におけるエラーログの重要性もしくはLog::Minimalってモジュール書いた話 - blog.nomadscafe.jp

    追記 CPANにアップしました http://search.cpan.org/dist/Log-Minimal/ /追記 アプリケーションサーバでエラーが起きていたり、レスポンスが遅かったりする場合に、Operation Engineer(インフラエンジニア)がまず見るのは、エラーログです。エラーログにでているメッセージを手がかりに原因を探ります。 サーバでエラーが起きている時には、データベースに接続ができなかったり、外部のAPIからレスポンスが得られない、またプログラムのBugが原因となっている場合もあるでしょう。またエラーにならなくても、複数台あるデータベースのスレーブサーバうち一台が落ちて接続をretryしていたり、APIのレスポンスが遅い際にはサーバ全体のパフォーマンスが低下します。 エラーログに障害の原因を探る情報があれば、Operation Engineerは素早く対応を開始で

    hidehish
    hidehish 2010/10/26
    見てる:
  • プロのサーバ管理者が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つです。

    hidehish
    hidehish 2010/09/02
  • Yokohama.pm #6でcloudforecastについて喋って来た - blog.nomadscafe.jp

    Yokohama.pm#6 x Perl Casual#3でcloudforecastについて時間を頂いたので喋ってきました。 すてきな会場を貸して頂いたネイバージャパン株式会社さん、USTREAMを担当してくれた941さんありがとうございます。 発表資料はこちら。

    hidehish
    hidehish 2010/07/31
  • キャッシュを制御してサイトの高速化を実現するAapcheモジュールmod_expiresのPlack版をリリースしました - blog.nomadscafe.jp

    レスポンスヘッダにExpiresやCache-Controlを追加することで、ブラウザのキャッシュを有効活用し、ダウンロードの時間をなくす事でウェブの高速化を実現できます。またサーバ側にとってもリクエスト数を減らす事ができ、負荷の削減にもなります ApacheにはExpiresやCache-Controlを付加するmod_expiresというモジュールがありますが、Plackにはまだなかったので作ってみました。VarnishのようにWebサーバ機能を持たないリバースプロキシを使う場合には、便利なんじゃないかなぁと思います CPANにリリース済みです http://search.cpan.org/dist/Plack-Middleware-Expires/ 使い方 builder { enable 'Expires', content_type => [ 'text/css', 'appli

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

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

    hidehish
    hidehish 2010/06/03