タグ

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

  • 1冊の技術書と青春18切符を持って一人旅してきた

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 (画像が多いので、一旦データを全て読み込んでからブログエントリを読み始めた方が良いかもしれません…) http://instagram.com/p/rgfgD4I7VE/ 「ちょっと明日から1人でLinuxの旅に行ってくる」エントリに書いた通り、先週Linuxプログラミングインタフェースというとっても重たい技術書と青春18切符と最低限の着替えを持って、北海道目指して鈍行や快速を乗り継ぎ、技術書を電車の中でひたすら読む1人旅をしてきました。 オライリーLinuxの三大凶器(自社調べ)を比較してみたらカーネルが一番 "薄い"のだな pic.twitter.com/SM26NKSiqh — hiroya ito (@hiboma) August

    1冊の技術書と青春18切符を持って一人旅してきた
    hiboma
    hiboma 2014/08/10
    薄い方でやろうかな
  • 人間とウェブの未来 - 共有WebホスティングでVitrualHost設定に手を入れずにシンボリックリンクのTOCTOU問題を解決するApacheモジュールを作った

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 共有Webホスティングを提供している業者の皆様は、シンボリックリンクのTOCTOU問題というかなりクリティカルで必ず対応すべき問題をおそらく様々な方法によって解決されていると思います。 しかし一方で、TOCTOU問題をなんとなく放置されている、あるいは、誤解されている場合もあるかもしれません。この問題は、Apacheでシンボリックリンクを使えない(シンボリックリンクにアクセスがあったら4系エラーを返す)設定にしていたとしても、シンボリックリンクファイルを作る事さえできれば、攻撃プログラムを使う事により、apache権限でアクセス可能なファイルにシンボリックリンク経由でアクセスすることが可能となります。また、Apache体のコアに直接パッチを

    人間とウェブの未来 - 共有WebホスティングでVitrualHost設定に手を入れずにシンボリックリンクのTOCTOU問題を解決するApacheモジュールを作った
    hiboma
    hiboma 2014/07/25
    瞬速で作成されていて社内がどよめいた #実話
  • apacheモジュールでmutexを使った排他制御を実装

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 apacheモジュールでプロセス間通信を行う場合に、共有メモリを使うと色々問題がでてくる。 preforkの性質上、複数のapache子プロセスがフォークされており、それらがそれぞれリクエストに対する処理を行うため、共有メモリ領域の書き込み時に衝突が起きたりして、データに齟齬が発生してくる。 それを防ぐのが排他処理だ。 今回は、aprで実装済みのglobal mutexを使って排他制御する方法を説明する。 まずは、グローバでmutexを宣言する。 #include "apr_global_mutex.h" #include "unixd.h" apr_global_mutex_t *mutex; 次に、apache起動時のpost_confi

    apacheモジュールでmutexを使った排他制御を実装
    hiboma
    hiboma 2014/07/04
    global mutex ってこれだった!!!
  • Apache httpd 2.4の便利そうな新しいコア機能

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 Apache httpdの2.4系を触っていて、面白そうだなーと思う新しいコア機能を幾つか紹介したいと思います。こういうの欲しかった!と思える機能がちらほら見受けられます。 MPMをLoadableに扱える PreforkやWorker、eventのMPM切り替えを、これまではコンパイル時に行う必要がありましたが、それぞれのMPMがモジュール化されLoadableになりました。これによって、MPMを切り替えて試したりする作業が格段にやりやすくなったと思います。 むしろこれになれて2.2系を触ると、うおおおーっめんどくさい!ってなります。 モジュール単位やディレクトリ単位でログレベルを制御 エラーログの出力レベルを、モジュール単位で設定できたり

    Apache httpd 2.4の便利そうな新しいコア機能
    hiboma
    hiboma 2014/05/03
    便利まとめだ
  • ngx_mruby vs lua-nginx-module 対決してみた

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 論文や発表が少し落ち着いたので、研究の実装を再開しています。 そこでふと思ったのですが、そういえばngx_mrubyとlua-nginx-moduleのパフォーマンス比較していないなぁと思いました。でも、今検証環境が色々あって揃っていないので微妙だなぁと思いつつも、やっぱり気になると試さずにはいられないたちなので、簡単なhello worldのベンチマーク比較をしてみました。 ngx_mrubyとlua-nginx-moduleの導入 検証環境がないので一から導入しました。意外と簡単ですね。 [program lang=’bash’ escaped=’true’] wget http://nginx.org/download/nginx-1.

    ngx_mruby vs lua-nginx-module 対決してみた
    hiboma
    hiboma 2013/10/12
    数日前に、NginxでURLをごそごそしてハッシュ値取りたい案件が発生して、ほいじゃngx_mruby使ってみる?となりました
  • 「コンテナ型仮想化の情報交換会@東京」で発表してきた

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 ということで、先日「コンテナ型仮想化の情報交換会@東京」に参加して発表もしてきました。元々、主催者の加藤さんは僕が尊敬するエンジニアの1人でもあり、何かお手伝いできると良いなと思っていて、発表のお誘いを受けた時はとてもうれしく思いました。また、今回はTwitter上ではそれなりにお話している人達にも沢山あえるということで、バーチャルな世界から初めて東京に出ていくという意味で恥ずかしくもワクワクするような勉強会でした。発表個々の感想はこれから続くであろう参加者の皆様の参加エントリに期待して、このエントリには勉強会全体の感想を書き綴ろうと思います。 @matsumotory さんの周囲をペパボの面々 がぐるっと取り囲んでいる — ito hiro

    「コンテナ型仮想化の情報交換会@東京」で発表してきた
    hiboma
    hiboma 2013/10/08
    ピンポイントに同じ業種で同じような問題と同じようなソフトウェア (Apache!) を見てきたがゆえに高まるシンクロ率みたいなの感じましたw
  • 人間とウェブの未来 - 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による動的なリバースプロキシの実装案
    hiboma
    hiboma 2013/07/31
    言及 azms ! グレートな進化
  • mod_mrubyのメモリ問題をvalgrindで調査の上jemallocで改善

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 mod_mrubyはmrubyのmrb_stateをApacheのサーバプロセス上で使いまわすアーキテクチャをとっています。基的にプロセスは起動しっぱなしなのですが、リクエストを大量に処理すると、プロセスのメモリがどんどん太っていく問題がありました。 これは、mruby-uv等でも報告されており、どうにか改善したいと思っていました。そこで、twitter上でいくつかmatzさんとやり取りしながら、valgrindでメモリのLEAKとHEAPを調査の上、mallocのフラグメントを疑い、jemallocでmallocをフックするとどのようにメモリ使用量が改善するかを実験しました。 valgrindでApacheをデバッグ valgrindでA

    mod_mrubyのメモリ問題をvalgrindで調査の上jemallocで改善
    hiboma
    hiboma 2012/12/17
    ++
  • mod_mrubyに認証とredis連携の機能追加した

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 久々にmod_mrubyの話題のような気がします。 先日、 @hiroki_nazy さんからApacheの認証系の機能実装のpull-requestを頂いたの早速マージしておきました。機能詳細は、BlogかWikiに書いてくれるということなので、今回はざっとBasic認証のサンプルの紹介と、先ほど実装したRedis連携の機能追加を紹介します。 mod_mrubyでBasic認証 今回、 @hiroki_nazy さんが実装してくれた機能はApacheのBasic認証とDigest認証をmod_mruby上で実現するための機能です。 サンプルは以下のようになります。 まず、Apacheのconfに以下のような設定を記述します。 [progra

    mod_mrubyに認証とredis連携の機能追加した
    hiboma
    hiboma 2012/12/03
    言及あざます!! こういう用途で Redis は扱いやすいですね ( memcached だとちょっと素朴過ぎるしmysql だとちょっとヘビーてな感じで )
  • 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の本気を見た
    hiboma
    hiboma 2012/10/31
    すばらしい。それにしてもデフォルト設定なんなの... 。
  • Apacheのmod_rewriteをmod_mrubyによって無くす事ができるか | 人間とウェブの未来

    Apacheのmod_rewriteをmod_mrubyによって無くすことを考えた時に、現状mod_rewriteでやれることをmod_mrubyに置き換えるとどうなるのかを検証・考察してみました。 なぜかというと、mod_rewriteで困っているような呟きをいくつか見て、以下のように思ったからです。 apacheでrewriteが面倒な人はmod_mrubyやmod_luaを使っちゃっても良い気がするなー。誰かがやり出すとどんどんやり出しそう。性能劣化も少ないし。 — MATSUMOTO, Ryosukeさん (@matsumotory) 10月 21, 2012 以前こんな記事「Apache 2.4.1のmod_luaでApacheに介入する(mod_rewriteの終焉?)」を書いたのですが、これも深く関連しています。現状、いったいmod_mrubyはどこまでmod_rewrite

    hiboma
    hiboma 2012/10/22
    ディスパッチの部分のコード分離してテストケース書ければお釣り出そう。mod_rewriteはテスタビリティ低過ぎなのが... /// ap_register_rewrite_mapfunc 使ってプロキシ書いた事ありますけど開発もメンテも難しいですね
  • 僕が考える最強の超高集積型Webホスティングシステム!

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 これまでの記事を振り返って、まとめの意味でも、現状僕が考えうる最強の高集積型Webホスティングシステムの設計を忘れないうちに書いておこうと思います。これらは夢のような話ではなく、現実的にAmazonEC2上にプロトタイプとして作ってもいいなぁ、と思っていたりします。 最強の超高集積型Webホスティングシステム!とは ホスティングシステムということで、ホストをかりる側がどういうコンテンツを使うのか分からないので、できるだけ自由度の高いシステムを考えた時は、やはりベースソフトウェアはApacheが良いのではと思います。また、超高集積にする事でハードウェアのコストを下げ、超低価格を実現し、かつ、セキュアで運用性が高く高機能なシステムを目指します。

    hiboma
    hiboma 2012/09/27
    goisu-
  • LinuxのCFSを使ってプロセスのCPU消費量を制御するツール作った

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 LinuxのCFSのBandwidth Controlを使って簡単にプロセス単位でのCPU消費量を制御できるツールをPerlで書いてみました。Linux Kernel 3.4.7で動作確認済みです。kernelのコンパイルオプションで「CONFIG_CFS_BANDWIDTH」を有効にしましょう。 CFSのBandwidth ControlはLinux3.2からの新しい機能のようです。エントリではその詳しい話は割愛して、作ったツールの使い方を見て行きましょう。例の如くGithubにソースをあげています。 run-cpu-rate – コマンド実行時からCPU消費量を任意の値で制御しながら実行 run-cpu-rateコマンドは、実行時から任

    LinuxのCFSを使ってプロセスのCPU消費量を制御するツール作った
    hiboma
    hiboma 2012/08/17
    サンプルが mt.cgi で泣ける (レン鯖的に
  • Apacheで.htaccessを無効にすると場合によってはかなり早くなるよというお話

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 Apacheの高速化の手法というのは、多くのサイトで紹介されています。そのうちの一つとして、.htaccessを無効にするという話がありますが、実はこれは場合によっては非常にパフォーマンスが向上します。それが一体どの程度なのかという実験を簡単にしてみました。 まずはApacheの設定 実験で使用するprefork版の設定ファイルはこのようにしています。プロセスの生成破棄が生じないような設定をしているので、パフォーマンス計測等、色々な実験に汎用的に使えておすすめです。 ServerTokens Prod ServerRoot "/etc/httpd" PidFile run/httpd.pid Timeout 100 KeepAlive On

    hiboma
    hiboma 2012/07/25
    とてもよい検証
  • 人間とウェブの未来 - mod_mrubyでApacheのリバースプロキシを実装してみた

    動作チェックはしていませんので、あくまでネタとして読んで頂くのが良いと思います。さらに、Rubyのコーディングスキルが低すぎて、いっぱい書くと荒が見えすぎてしまうため、今回は少ないコードにしました。 mod_mrubyの売りとしては、ApacheをRubyスクリプトで「高速に」コントロールできる事ですが、「どういうことができるの?」というイメージが付きにくいのでサンプルを書いてみました。 例えば、複数のバックエンドのサーバがあって、それらにとある条件下でリバースプロキシとして振り分ける場合の処理を書いてみました。だいたいこういう実装になるんじゃないかと思います。 今回は、バックエンドサーバリストからランダムでサーバを選択する場合の処理を実装しました。 require "Apache" backends = [ "http://192.168.0.101:8888/", "http://19

    人間とウェブの未来 - mod_mrubyでApacheのリバースプロキシを実装してみた
    hiboma
    hiboma 2012/06/19
    cool! backends を何らかのストレージから参照できたりするといい感じのHTTPルーターに ( refs 拙著の http://d.hatena.ne.jp/hiboma/20120205 )
  • mrubyでApacheのCPU割当てを制御できるモジュール作った

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 週末の夜なので、突発的に何か面白い物作れないかと、一人ハッカソンがてら新しいApacheモジュールを作ってみました。最初に断っておきますが、mrubyを使ったものの、mod_mrubyとは全く関係ないです。 ApacheのサーバプロセスのCPU割当を制御 まだまだ、あくまで試しに実装しただけというレベルのモノです。一応、名前は「mod_resource_manager」と呼んでいます。何ができるのかというと、Apacheのサーバプロセス上のCPU使用率を制御できるモジュールです。例えば、アクセス集中の場合やCPUを大量に消費するようなスクリプトが動作するプロセスのCPU使用率を制御する事ができます。特徴としては以下になります。 サーバプロセス

    mrubyでApacheのCPU割当てを制御できるモジュール作った
  • 第2回 松本勉強会を行いました

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 僕が大学に行って学んだり研究したりしていることや、最新の技術調査を説明する会として、社内で松勉強会という任意参加の勉強会が発足しました。 僕自身も、研究者と技術者がもっと協力すれば、相乗効果でどんどん新しい技術が生まれるのじゃないかと思っているので、こういう機会は非常に大事だと思っています。立ち位置としては、大学生として発表していますので、発表内容のスライドは随時オープンにフィードバックしていきたいと思っています。(社内でなくもっとオープンな場でできるといいですね) また、今日はスペシャルなゲストとして、HiganWorks LLCのCEOである澤登さん( @sawanoboly )が5分程度のLTを行ってくれました。それも合わせて公開しま

    第2回 松本勉強会を行いました
  • Apache内部の情報をダンプするモジュール mod_request_dumper

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 最近は論文を書いてばっかりなので、コーディングを忘れないようにちょっとしたApacheモジュールを作ってました。 まずは機能から このモジュールの名前は、mod_request_dumperとしました。 mod_request_dumper機能は、Apache内部がリクエストからレスポンスを返すまでに持つrequest_rec構造体(中に含まれるserver_recやconn_recも含む)の中身を、各種フックのタイミングでDumpするモジュールです。Dumpの仕方は、JSON形式に構造体の主要なデータをシリアライズして任意のファイルに出力します。 (追記:2012/05/22) また、CustomLogのようなパイプログ形式の記述を行うこと

    Apache内部の情報をダンプするモジュール mod_request_dumper
    hiboma
    hiboma 2012/05/22
    クレイジーで楽しい。request_rec とか server_rec とか構造体見てても実際にどんな値入ってるか分からんって時に gdb でゴソゴソしたけど、こういうカジュアルに観察できる方法いいですね
  • Linuxで3万(10万)プロセスを同時に起動させてみた

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 といっても、きちんとした検証をしたわけではないので、あくまで「こういう環境でこういう事をやるとこうなる」という参考程度のものと理解してい頂ければ幸いです。 Linux上でプロセスは同時に何個起動できるのか 数年前にC10K問題が流行りました。これは、簡単に言うと、万のオーダーでプロセスを立ち上げる事になると、現状のOSではそれを想定した設計になっていないためまともに動かなくなる、といった問題でした。 だったら、「10万プロセス位を同時に立ち上げてみて、どうなるか試してみようぜ!」と思い、会社のエンジニアと一緒に試してみました。検証環境は、メモリ48GでCPUはHyperThreading込で24コアです。そこで動いていたOSはDebianでL

    Linuxで3万(10万)プロセスを同時に起動させてみた
    hiboma
    hiboma 2012/05/16
    [kernel]
  • なぜApacheにmrubyを組み込もうと思ったか

    人間とウェブの未来(旧) 「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。2014年までの人間とウェブの未来の旧ブログです。 なぜWebサーバソフトウェアであるApacheやNginx等にmrubyを組み込もうと思ったのかを整理しておきたいと思いました。 目的はWebサーバの開発支援 Webサーバの開発支援をしたい という壮大な目的が以前からありました。 それがどういうことかは後述するとして、ここでいうWebサーバの開発とは、Webサーバの内部機能拡張を指しています。それを行うにはどうしたら良いかをまず簡単に説明したいと思います。(スクラッチでWebサーバを1から実装するのもよいですが、ここではスコープ外とします) 例えば、Apacheを例にあげると、Webサーバの内部機能拡張はモジュール単位で組み込むという方法が取られています。ApacheやNginxはWebサー

    なぜApacheにmrubyを組み込もうと思ったか
    hiboma
    hiboma 2012/05/09
    レンサバ屋さんに強烈に響くエントリ