ブックマーク / blog.matsumoto-r.jp (10)

  • Dockerとmrubyで迅速かつ容易にnginxとapacheの柔軟なリバースプロキシ構成を構築する

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 Docker Hubがアナウンスされて以来、焦ってDockerを触っている@matsumotoryです。 今日は早速mod_mrubyとngx_mrubydocker buildに対応させました。これによって、Docker環境においてmod_mrubyを組み込んだApache httpdやngx_mrubyを組み込んだnginxを迅速かつ容易に連携させる事ができるようになります。 今日はその一例を紹介したいと思います。 リバースプロキシのnginxの挙動をmrubyで制御する ngx_mrubyGitHubレポジトリにはすでにDockerに対応させています。ですので、ngx_mrubyをcloneするとDockerfileとdocker/

    Dockerとmrubyで迅速かつ容易にnginxとapacheの柔軟なリバースプロキシ構成を構築する
  • nginxの非同期I/Oとキャッシュ周りの実装について

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 nginx-1.0.14のソースを見ていく。非同期I/Oをどのようにくししているのか非常に興味がある。まずは、リクエストを受け取った後、どのようにファイルを非同期で読み込みそれをキャッシュとして扱っていくのか、また、非同期であることの優位性をどのように実装しているのかを紐解いていった。 まずは以下の「ngx_http_file_cache_read()」関数でキャッシュの読み込みや更新を行っている。 [program lang=’c’ escaped=’true’] static ngx_int_t ngx_http_file_cache_read(ngx_http_request_t *r, ngx_http_cache_t *c) { t

    nginxの非同期I/Oとキャッシュ周りの実装について
  • Apache 2.4系でのモダンなアクセス制御の書き方

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 これまでのApache2.2系以前でのアクセス制御の書き方は賛否両論でした。僕はあまり好きじゃありませんでした。 過去のアクセス制御に関しては、以下の記事がとてもわかりやすくまとめられていると思います。 こせきの技術日記 – Apacheのアクセス制御をちゃんと理解する。 ここで、以下のように言及されています。 こんなバッドノウハウ、当はどうでもいいと思う。Apache 3.0では、かっこいいDSL(VCL)で書けるようにする構想があるらしいのでがんばってほしい。 ということで、2.4系ではDSLとはいかないまでも、Require*というディレクティブを使ったモダンな書き方ができるようになったので、それを2.2系以前のアクセス制御の記述と比

    Apache 2.4系でのモダンなアクセス制御の書き方
  • ngx_mrubyでnginxの内部変数を操作する

    最近はコード書きに時間をとれていませんが、昨日は久々にngx_mrubyを少し触る事ができたので、その際にできるようになったタイトルのような処理を紹介したいと思います。 今のngx_mrubyは、nginx.conf上で設定した変数やnginxのコア変数をmruby上でgetしたり、mruby上で変数に値をsetしたりすることができるようになりました。 また、mruby_setというディレクトリを使うと、nginx.conf上での変数設定時に、mrubyのコードの結果を渡す事ができます。さらにはそのコード内で、それより以前にsetディレクティブで設定した変数を呼び出す事ができます。 confに直接Rubyを書く場合 日語で書くと結構分かりにくいのでサンプルを示します。例えば、以下のようにconfを書きます。 [program lang=’ruby’ escaped=’true’] loc

    ngx_mrubyでnginxの内部変数を操作する
  • 人間とウェブの未来 - ngx_mrubyの紹介 ならびに nginx+mruby+Redisによる動的なリバースプロキシの実装案

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 ようやくngx_mrubyでもmod_mrubyのように動的なリバースプロキシ設定ができるようになりました。タイトルは完全に@hibomaさんによる「lua-nginx-module の紹介 ならびに Nginx+Lua+Redisによる動的なリバースプロキシの実装案」をパク … inspireしたものになっています。 今回の工夫点としては、 ngxin内部の変数をうまく使う redisとのセッションはnginx起動時に一度だけ行なって、そのオブジェクトを使いまわす proxy_passを使って汎用的な設定にする の3点です。 1に関しては、前回の「ngx_mrubynginxの内部変数を操作する」で紹介しました。 2に関しては、リクエスト

    人間とウェブの未来 - ngx_mrubyの紹介 ならびに nginx+mruby+Redisによる動的なリバースプロキシの実装案
  • Apache 2.4.1のスループット評価(旧ApacheとNginxとのベンチマーク比較)

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 久々のApache HTTP Server 2.4.1という安定版がリリースされたので、早速ベンチマーク評価を行う。今回はevent_mpmのExperimentがとれて、晴れてデフォルトMPMになったのでそれを使ってみたい。 日一(ひょっとすると世界一)早いApache 2.4.1 event_mpmのレビューを意識してみた。 はじめに 個人的にも、event_mpmが採用されたことに最も注目している。event_mpmは非同期型のIO処理をしていて、nginxに近いアーキテクチャをとっている。厳密には、nginxの非同期と比べた場合、nginxは徹底的にノンブロッキング(accept4を使う等)してworkerスレッドで次々と並列処理し

    Apache 2.4.1のスループット評価(旧ApacheとNginxとのベンチマーク比較)
  • ApacheとNginxの性能比較でevent_mpmの本気を見た

    はい、これは僕がいつも良く見るApacheとNginxの性能差に見えます。大体、ApacheはNginxの75%程度の性能に落ち着きます。数十バイトの静的コンテンツに対するリクエスト処理はNginxの得意分野だと思っていたので、大体こんなものです。 そこで、真面目にevent_mpmのチューニングを行ってみました。で、幾度となくベンチを試した結果導き出した、静的コンテンツに対する同時接続数100程度に対して最高のパフォーマンスを示すevent_mpmの設定は以下のようになりました。 [program lang=’apache’ escaped=’true’] StartServers 4 MinSpareThreads 4 MaxSpareThreads 4 ThreadsPerChild 2 MaxRequestWorkers 2 MaxConnectionsPerChild 0 [/p

    ApacheとNginxの性能比較でevent_mpmの本気を見た
  • 非同期I/OやノンブロッキングI/O及びI/Oの多重化について

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 2017年5月20日追記 エントリはI/OのOperationとCompletionおよびデータ整合性を混ぜてまとめた一部誤った定義になっているので、正確な定義を日語で知りたい方は下記にリンクしたエントリを読むことをおすすめします。 非同期とノンブロッキングとあと何か Apache2.4.1のevent_mpmnginx及びnodde.jsのアーキテクチャを考える上で、非同期I/OやノンブロッキングI/O、I/Oの多重化に関してある程度正確な理解が必要だと思ったのでまとめておく。 ここで「ある程度」といったのは、非同期を表すAsynchronousとノンブロッキングのnon-blockingは曖昧に使われる場合が多いからだ。まず、英語

    非同期I/OやノンブロッキングI/O及びI/Oの多重化について
  • インフラエンジニアの僕がキーボードのすぐ隣に置いておきたい本 | 人間とウェブの未来

    棚は自分の机のすぐ隣にあるのですが、なんとなく安心感とか勉強してる感とかを含め、思い立った時に手元ですぐ開いて調べたり暇つぶしにふと読みたいってありますよね。自分はインターネット、特にWebやインターネット基盤技術に関わる研究・技術者をやっているわけですが、自分の手元に置いておきたいがやはりあります。 もちろん、手元に置くためのスペースは約20から30センチ程度なので、分厚いを置くと数冊程度になってしまいますが、今日は「自分が現段階で持っているのうち、キーボードのすぐ隣に置いておきたい」8冊をなんとなく紹介したいと思います。 自分が手元に置いておきたい8冊 1. Linuxプログラミングインタフェース(6.5センチ) 分厚さ6.5センチと最強に分厚いですが、Linuxに関わるプログラミングをする際の辞書として手元においておく安心感は半端ないです。自分はミドルウェアの実装やそれに

    インフラエンジニアの僕がキーボードのすぐ隣に置いておきたい本 | 人間とウェブの未来
  • 人間とウェブの未来 - 軽量な静的コンテンツ配信におけるHTTP/2とSPDYのWebサーバの性能を見てみよう

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 既存のHTTPやWebサーバの技術を見ているものとして、新しい技術も調査しておかないといけないなということで、今日はHTTP/2とSPDYでおしゃべり可能なWebサーバの性能を見てみたいと思います。 HTTP/2の実装としては、tatsuhiro-tさんのC言語実装ライブラリであるnghttp2に注目しており、今日はそのライブラリを使って実装されているWebサーバnghttpdを動かし、SPDY/3.1で動作しているnginxとの性能比較をしました。HTTP/2やSPDY/3.1はもちろんクライアント側も既存のベンチマークツールではおしゃべりできないので、nghttp2で実装されているh2loadを使用しました。weighttpと使い方が似て

    人間とウェブの未来 - 軽量な静的コンテンツ配信におけるHTTP/2とSPDYのWebサーバの性能を見てみよう
  • 1