ブックマーク / hb.matsumoto-r.jp (138)

  • HTTP/2とmrubyの可能性についてお話してきた - 人間とウェブの未来

    福岡の博多で開催されたHacker Tackleという技術イベントで、「HTTP/1.xとHTTP/2が混在する時代のウェブサイト設計とmruby in HTTP serverの可能性」というタイトルでお話をしてきました。 hackertackle.github.io HTTP/2に関しては既に素晴らしい発表が幾つかされており、特に今年のYAPC::Asia 2015で id:kazuhooku さんと id:Jxck さんが発表されたHTTP/2の内容は素晴らしいです。今回の僕の発表で同じような所を喋ってもどうしても二番煎じになってしまうため、よりサーバ実装についてや実際に使う時にHTTP/2のどういう特徴がチューニングに関わってくるかという話を、mruby組込みをまじえてお話しました。特に、サーバプッシュや優先度制御、それを制御するための方法について言及しています。また、現在公開できる

    HTTP/2とmrubyの可能性についてお話してきた - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/09/28
    2年前に書いてた
  • ApacheのVirtualHost単位でMaxClientsを設定するApacheモジュールをOSS化 - 人間とウェブの未来

    一つのサーバに多数のホストを収容するような高集積なホスティングサービス(所謂レンタルサーバ)を提供しようとすると、収容しているユーザ単位でいかにリソースをコントロールするかが運用者には求められます。 そういう状況で、これまでApacheには色々なモジュールがあって、それらをうまく組み合わせながらリソースを制御してきたと思います。ですが、意外とシンプルなリソース制御として、VirtualHost(以下vhost)単位で個別にMaxClinetsを制御するだけのモジュールが無かったりします。それと同等の機能を提供するモジュールは幾つかあるのですが、色々と必要の無い機能が沢山盛り込まれていたりとか、特定のバージョン、特定のMPM、特定のOSでしか動かなかったりして微妙に使いにくかったりします。 要件的には単にvhost単位でMaxClinetsを各種MPMやバージョンで制御できれば良いです。こう

    ApacheのVirtualHost単位でMaxClientsを設定するApacheモジュールをOSS化 - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/08/29
    書いた
  • 技術者が研究者のように論文を書くメリットはあるか - 人間とウェブの未来

    一度大学・大学院を修了した後に、研究職以外に就職した技術者は論文を書かなくなる事がほとんどだと思います。 僕は、一度インターネットのウェブサービスに関する企業で技術者をした後に、大学院に入りなおして同様の分野で論文を書き、現在再度技術者をやっているわけですが、技術者でも論文を書くメリットが ある と思っています。 以降でメリットについて述べますが、これらのメリットをまとめて手軽に享受できるツールって他にあんまりないんじゃないか(僕が思いつかないだけかも)と思ったので、この記事を書くに至りました。 というわけで、それを簡単にまとめます。 技術者が論文を書くメリット まずはざっと箇条書きします。 自分の考えた技術や既存の技術の調査、比較の試行錯誤を丁度良い分量でまとめられる 良い文章構成になるような書き方の知見が溜まってるので書きやすい 書き方の知見にのっとって文章にまとめることで、頭の中や提

    技術者が研究者のように論文を書くメリットはあるか - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/08/23
    2年半前ぐらいに書いたエントリだけど今読んでもまあまあ良いのではと思った
  • mruby事例を中心に「Middleware Configuration as Code」という発表をした #rubykansai - 人間とウェブの未来

    今日は第68回Ruby関西勉強会にお誘い頂き、ミドルウェアへのmruby組込みの考え方であるMiddleware Configuration as Codeについて、事例を中心にお話しました。 rubykansai.doorkeeper.jp 会場がファーストサーバさんということで、何やら母校にいくような、地元に帰るような不思議な気持ちになり、いつもとは違う新鮮な気分で発表に取り組む事ができた気がします。 内容としては、まさにMiddleware Configuration as Codeであり、 Middleware Configuration as Codeに至る背景 Middleware Configuration as Codeの定義 Middleware Configuration as Codeの実装やメリット ngx_mrubyの簡単なチュートリアル 弊社(ペパボ)における事

    mruby事例を中心に「Middleware Configuration as Code」という発表をした #rubykansai - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/08/08
    そういえば夏休みに喋ってきたぜい
  • H2Oとmrubyを使ってIPアドレスベースでアクセス制御しつつリバースプロキシとして使ってWebサイトをHTTP/2化しよう - 人間とウェブの未来

    弊社インフラチームが使っているmuninをh2oのHTTP/2で高速化して、諸々の制御はmrubyでコントロールした。チームから「はやーい!」「スクロールで勝てない!」「こんな早い表示最近みたことなかったですよ!」と喜びの声が多数届いております。— MATSUMOTO, Ryosuke (@matsumotory) 2015, 7月 30 h2oをリバースプロキシで使えば、http://でのアクセスはHTTP/1.xでコンテンツを返しつつ、https://からのアクセスについてはHTTP/2+TLSに対応したブラウザであればHTTP/2、対応していなければHTTP/1.xでコンテンツを返す事ができます。 また、h2oがmrubyによる機能拡張をサポートし、かつ、先日アクセス元IPアドレスをmruby内で参照することができるようになったので、IPアドレスを用いたアクセス制御もh2o+mrub

    H2Oとmrubyを使ってIPアドレスベースでアクセス制御しつつリバースプロキシとして使ってWebサイトをHTTP/2化しよう - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/07/31
    書いた
  • mvコマンドの--strip-trailing-slashesをデフォルト有効にして大丈夫か? - 人間とウェブの未来

    mvに--strip-trailing-slashesというGNUオプションがあるのは皆さんご存知だと思います。 指定された全ての引き数について、 後ろに付いているスラッシュを取り除く。 これは mkdir a; ln -s a la; mv la/ b' のような場合に役立つ。 この場合 POSIX の要求により、 mv はシンボリックリンクla' ではなく ディレクトリ `a' を実際に移動してしまう。 ref: http://linuxjm.osdn.jp/html/gnumaniak/man1/mv.1.html これ、tab補完をする癖の付いている人が、例えば/にリンクを貼ったsymlinkファイルrootを不用意に別パーティションにmvしようとしたときに、 sudo mv root/ /other_partision/dir/ とかしちゃうと当然システムが壊れちゃうのですが、こ

    mvコマンドの--strip-trailing-slashesをデフォルト有効にして大丈夫か? - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/07/29
    書いた
  • ファイルパスの/で結構ハマってしまったメモ - 人間とウェブの未来

    Linuxでとあるコードを書いていたのですが、例えば、 mkdir hoge ln -s hoge hoge_link のようにして、対象パスがsymlinkだったらリンク先を辿らないlstat()システムコールで、 static bool check_symlink (char *source) { struct stat sb; if (lstat(source, &sb) != 0) error(EXIT_FAILURE, errno, _("failed to access")); if ((sb.st_mode & S_IFMT) == S_IFLNK) { return true; } /* not symlink */ return false; } のようなコードを書くとします。 それで、check_symlink("hoge_link")とかすると当然trueが返ってきま

    ファイルパスの/で結構ハマってしまったメモ - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/07/28
    ハマってた
  • 「たったひとつの教訓」という話をしました - 人間とウェブの未来

    社内での新卒研修を中心になってやってくれている okkunの提案で、キャリア・キーノートという取り組みを行っており、その中でWebオペレーション研修の記念講演ということで、恐縮にも自身のキャリアキーノートについて発表する機会を頂けたのでお話してきました。 研究の内容については、 okkun の以下の記事が参考になるかと思います。 blog.hifumi.info 技術者・研究者という立場から自分の人生を振り返ったような内容になり、これまでの自身の苦悩や絶望、そこからのブレイクスルーなどを振り返り話す事ができる良い機会となりました。 僕が技術者・研究者としてこれまでやってきて得た教訓を、教訓が得られたエピソードと共にまとめました。 話している中で色々な事を思い出し、あの時の葛藤や苦悩、さらには絶望した時の感情が沢山沸き上がってきましたが、それでも今自分はこうやって楽しく技術を学べている事に

    「たったひとつの教訓」という話をしました - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/07/27
    初キャリアキーノートはこの時かあ。ちょうど3年前。
  • H2Oのmruby拡張が実用的になってきた件 - 人間とウェブの未来

    H2Oにmruby拡張の提案を行いmergeされてから幾つかのPRを経て、少しずつ実用的になってきました。 github.com 今日は簡単にその使い方を紹介しようと思います。 h2o_mrubyを有効化したh2oをビルド h2o_mrubyを有効化してビルドするのは簡単で、OSのライブラリ環境(/usr/lib/以下とか)にlibmruby.a等のmrubyライブラリがある状態で、 cmake -DWITH_MRUBY=ON . make h2o するだけで、h2o_mrubyが有効化されたh2oバイナリがカレントにビルドされます。簡単ですね。 またこの記事も参考にすると良いかもしれません。 qiita.com 使えるメソッド mod_mrubyやngx_mruby程メソッドはまだ充実していませんが、少しずつ使えるものを実装しています。また、mod_mrubyやngx_mrubyとの互換

    H2Oのmruby拡張が実用的になってきた件 - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/07/22
    H2Oにmruby組み込みの提案してマージされたのも3年前。
  • Mac上でCentOS6用のkernel{3,4}系イメージのrpmを一発でビルドするビルドシステム作った - 人間とウェブの未来

    Kernelの新しい機能をフルに使おうとすると、新しいkernelを使う必要があるのですが、例えばCentOS6系でシステムを運用していた場合に、新しいKernelを使うべくCentOS7とかにあげるとsystemd含め運用が大きく変わってしまうため中々踏み出せないという状況があると思います。 そこで、運用も含めた検証がてらCentOS6用(他のバージョンでも動くかも)のKernel4系あるいは3系のイメージのrpmを簡単にビルドするシステムを作りました。 github.com 使い方 Mac上でgit clone https://github.com/matsumoto-r/kernel-4-build-system-for-centos6.gitして、 make するだけです。 すると、デフォルトではbuild/linux-4.1.1以下に以下のように必要なrpmが生成されます。 ls

    Mac上でCentOS6用のkernel{3,4}系イメージのrpmを一発でビルドするビルドシステム作った - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/07/16
    3年前で誰でも簡単にCentOS6!でカーネルいじれるようにビルド君をシュッと作ったのも3年前。
  • Apacheやnginxの同時接続状況における各リクエストの任意の属性をカウントする拡張を作った - 人間とウェブの未来

    先日、ApacheやnginxといったWebサーバにおいてDoS的アクセスを検知して任意の制御を行うhttp-dos-detectorを公開しました。 hb.matsumoto-r.jp 上記の拡張も非常に便利なのですが、もう少しシンプルに、現在のサーバに対するリクエスト状況においてとある属性、例えば、どのファイルにどれだけアクセスが発生しているかを計測したい場合があります。これまでは、そういった情報をApacheのスコアボードの範囲内で情報を得たりしてきました。 しかし、Webサービスの高度化に伴い、もう少し柔軟にアクセス状況を計測し、その計測を元に任意の制御をプログラマブルに行いたい場合があると思います。 そこで、それを実現するための拡張を、mod_mrubyとngx_mrubyを利用して実装しました。つまり、Apacheとnginx両方で動きますし、mrubyの実装コードも同じになっ

    Apacheやnginxの同時接続状況における各リクエストの任意の属性をカウントする拡張を作った - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/07/09
    mrubyによるリソース制御の第二弾
  • 「ペパボのインターネット基盤技術研究・開発の活動」についてペパボテックカンファレンス福岡で発表しました #pbtech - 人間とウェブの未来

    ブログ書くまでがペパボテックカンファレンス!ということで、昨日無事福岡支社で第二回ペパボテックカンファレンスが開催されました。参加して下さった皆さん、弊社までお越し頂きありがとうございました。 pepabo.connpass.com 「何か発表しません?」とあんちぽさんから言われた時に、各技術についての話については皆さんほんとうに高いレベルでお見せできるエンジニアばかりなので、僕はそれらをもう少し俯瞰して、 なぜペパボのようなWebサービス会社で研究・開発が必要になってきているのか 自分たちにメリットがあるような研究・開発の取り組み方についてどう考えているか 企業としてOSSで公開したりアウトプットする意義とその効果について 特に最近研究・開発として注力している部分はどこか 等についてお話しました。 所謂大企業の研究所以外の規模のWebサービス会社にとって、なかなか研究・開発というのはメリ

    「ペパボのインターネット基盤技術研究・開発の活動」についてペパボテックカンファレンス福岡で発表しました #pbtech - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/07/05
    書いた
  • h2o_mrubyがh2o本家にマージされました - 人間とウェブの未来

    hb.matsumoto-r.jp 先日、h2oの勉強がてら独自モジュールとして、h2o_mrubyというモジュールの開発をはじめてみました。所謂mod_mrubyやngx_mrubyのように、Webサーバの内部処理をmrubyでコントロールするためのモジュールです。そうこうしていると、h2oの作者の id:kazuhooku さんが、以下のようにツイートされていました。 h2o組み込みの言語を選ぶなら、個人的にはmruby>>luaだし、ビルドまわりがきれいにまとまるならmergeしちゃいたい— Kazuho Oku (@kazuho) 2015, 6月 23 おお、これは家へ取り込んで頂ける可能性もあるな!!??と思い、急遽実装を家用に書き直して、数日前にPRを出しました。 github.com そして、幾つかの修正やテストの実装を経て、今日の朝方ついにh2o家に無事マージされま

    h2o_mrubyがh2o本家にマージされました - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/06/30
    書いた
  • h2o_mruby v0.0.1をリリースしてみた - 人間とウェブの未来

    そういえば今から3年前に、 blog.matsumoto-r.jp blog.matsumoto-r.jp などなどの実装を開始しました。色々と懐かしいですね。そして時代は進み.... H2Oは言わずと知れた id:kazuhooku さんが中心となって開発されているWebサーバですが、そのモジュール実装はどうなっているのかなーと思い、調査ついでにh2o_mrubyをざっと実装してみました。 h2o-mrubyがのぞまれる— Kazuho Oku (@kazuho) 2015, 6月 9 一旦は、ApacheのDSOのような形で実装する方法がパッと見思いつかなかったので、まずはH2Oをフォークしてhandlerモジュールとして実装し、一部体も弄る形で実装してみました。 github.com 今日は家の用事で出社が昼飯時になってしまい、ちょうどそのタイミングでやってみようかな?と思っちゃっ

    h2o_mruby v0.0.1をリリースしてみた - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/06/23
    書いた
  • Dockerエキスパート養成読本の献本を頂きました - 人間とウェブの未来

    Dockerエキスパート養成読という素晴らしいを縁があって @takipone さんから献を頂きました。何が素晴らしいかというのを以下に述べていきます。 www.amazon.co.jp 適切な分量と幅広い読者層の両立 まず、Dockerに関する技術的背景から始まり、Dockerの基礎的な考え方・使い方を説明した後に、Docekrを実践で活用するための例やプロダクションで導入した事例等を、適切な分量で解説している所が素晴らしいです。 こういう背景から実践、事例紹介までを解説すると、分量が多くなったり冗長になってしまったりしがちですが、それをうまく要点をまとめて解説し、初心者からプロダクション導入を考えているエンジニアそれぞれに対して、読みやすい工夫がされているように感じました。 また、具体的なコマンドサンプルや実行結果が沢山載っている事も個人的にはうれしくて、リファレンスを沢山羅列し

    Dockerエキスパート養成読本の献本を頂きました - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/06/19
    書いた
  • nginxでもapacheでも使えるDoS的アクセスを検知して任意の制御をするWebサーバ拡張をmrubyで作った - 人間とウェブの未来

    github.com 会社の運用メンバーと色々議論していた中で、「カジュアルにWebサーバへのDoSみたいなアクセスが来た時に検知して制御したいよねー」という話が上がったので、http-dos-detectorというnginxでもapacheでも使えるWebサーバ拡張をmrubyで書きました。 もちろんmrubyなので、mod_mrubyとngx_mrubyを使っています。ので、Rubyコードはそのまま同じコードをどちらのミドルウェアでも使えます。mod_mrubyとngx_mrubyを使えば、ちょっとしたWebサーバの拡張は両方で同じ実装に落とし込めるので便利ですね。 使い方 例の如く、GitHubのREADME通りにインストールして下さい。Rubyのコードはmod_mrubyでもngx_mrubyでも有効なので、そのコードを読み込む設定をそれぞれ以下のように記述するだけでよいです。 a

    nginxでもapacheでも使えるDoS的アクセスを検知して任意の制御をするWebサーバ拡張をmrubyで作った - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/06/08
    書いた
  • virtualingを使ってプロセスのメモリ使用量上限値をOoM-Killerのタイミングで自動拡張してみた - 人間とウェブの未来

    virtualingとは、わりとセキュアでCPUやメモリ・IOといったリソースの制御が可能なプロセス実行環境上で、設定や構成を変える事なくミドルウェアのようなプロセスを動作させることができるツールです。実装はmrubyです。 github.com hb.matsumoto-r.jp リソース制御なので、例えばプロセスのメモリ使用量の上限を制限していた場合に、その制限を超えると従来通りOoM-Killerが走るわけですが、virtualingの特徴的な機能として、そのイベントを自動で検知し任意のRubyブロックをコールバックする機能があります。 それを利用して、今回はOoM-Killer判定が下されたイベントを検知したら、メモリ制限値を自動で拡張していくような処理を試してみました。 virtualingの設定 設定はRubyで書く事ができます。今回は、OoM-Killerを検知した時にOoM

    virtualingを使ってプロセスのメモリ使用量上限値をOoM-Killerのタイミングで自動拡張してみた - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/05/26
    コンテナのメモリがOoMしたときの自動拡張はこんな感じでやると簡単に実現できます
  • virtualingでchroot配下のプロセスを簡単にリソース制御してみよう - 人間とウェブの未来

    virtualingとはkazuhoさんの低コストでchrootするためのjailingと、mruby-virtualingによるリソース制御や必要であればIPアドレスの付与する機能を組み合わせたツールです。virtualingを使うと、Rubyコードによって、リソース制御可能なchroot環境でミドルウェアやコマンドを実行させることができます。 https://github.com/matsumoto-r/mruby-virtualing 例えば、とあるhttpdをvirtualingで動かしたい時は、以下のようなコードを書きます。 Virtual.new({ :resource => { # CPU [msec] exc: 30000 -> 30% :cpu_quota => 30000, # IO [Bytes/sec] 10 Mbyte/sec :blk_dvnd => "202:

    virtualingでchroot配下のプロセスを簡単にリソース制御してみよう - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/05/20
    書いた
  • mrubyでファイルシステムを隔離してリソースを分離しIPも割り当てられるmruby-virtualingを書いた - 人間とウェブの未来

    Kazuho's Weblog: jailing - chroot jailを構築・運用するためのスクリプトを書いた virtuald + ipalias + cgroup + これで快適に「そこそこ隔離したサービス環境」作っていきましょー / “Kazuho's Weblog: jailing - chroot jailを構築・運用するためのス…” http://t.co/aweVwa9kDX— MATSUMOTO, Ryosuke (@matsumotory) 2015, 5月 14 まずは昨日サクッとこういうのを作られたkazuhoさんのjailingを見ていて、こういうのやっぱり面白いなー素晴らしいなーと思いつつ、そういえば僕もmrubyでこういうの書くとか宣言していたなーというの思い出しました。 mruby-cgroup、mruby-capability、mruby-criuがで

    mrubyでファイルシステムを隔離してリソースを分離しIPも割り当てられるmruby-virtualingを書いた - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/05/14
    書いた
  • ngx_mrubyを使った簡単な画像変換サーバを数分で実装してみた - 人間とウェブの未来

    2日前にmrubyの画像変換mrbgem下さいとつぶやいて、その後2日以内にgdとMagick++のmrbgemが開発されるこのスピード感がmruby。 https://t.co/RzTZJsX9vP https://t.co/4YkJ2PwISQ— MATSUMOTO, Ryosuke (@matsumotory) 2015, 4月 25 というように、mrubyで画像変換してみたいなーと呟くとあっというまに画像変換mrbgemが開発されてしまうmrubyですが、そのままでは呟いた当事者としてなんだか申し訳ないので、ngx_mrubyを使ってサクっと画像変換サーバができないか試してみました。 結論としては、簡単なものはサクっとできてしましました。以降では作り方を簡単に紹介します。 こういうのが数分でできてしまうのがmod_mrubyやngx_mruby、さらにはtrusterdの良さです

    ngx_mrubyを使った簡単な画像変換サーバを数分で実装してみた - 人間とウェブの未来
    matsumoto_r
    matsumoto_r 2015/05/13
    書いた