ngx_mrubyの紹介 ならびに nginx+mruby+Redisによる動的なリバースプロキシの実装案

ようやくngx_mrubyでもmod_mrubyのように動的なリバースプロキシ設定ができるようになりました。タイトルは完全に@hibomaさんによる「lua-nginx-module の紹介 ならびに Nginx+Lua+Redisによる動的なリバースプロキシの実装案」をパク … inspireしたものになっています。

今回の工夫点としては、

  1. ngxin内部の変数をうまく使う
  2. redisとのセッションはnginx起動時に一度だけ行なって、そのオブジェクトを使いまわす
  3. proxy_passを使って汎用的な設定にする

の3点です。

続きを読む

mrb_stateを共有しているRubyコード間でuserdataを読み書きできるmruby-userdata作った

mrubyにおいて、mrb_stateを共有しているRubyコード間で、userdataを自由に読み書きできるmruby-userdataというmrbgemを作りました。

これは、mrubyの状態遷移情報を格納しているmrb_stateを共有している限り、あるタイミングでコードAが呼ばれて、次に別のタイミングでコードBが呼ばれた場合、コードAでuserdataオブジェクトを保存しておけば、コードBからそのオブジェクトを取り出せる仕組みです。

グローバル変数を使えばコード間でやり取りができますが、なんとなくグローバル変数を使うのは実装上バグを生みそうなので、C側にuserdataを保存しておくハッシュテーブルオブジェクトを作っておいて、そこにRuby側から保存したい時に保存しておき、取り出したい時に取り出すためのRubyメソッドによるインターフェイスを実装しました。

比較的安全にuserdataを保存しておけると思います。

続きを読む

マルチプラットフォームでmrubyを使ってHTTP通信する方法

mrubyも少しずつ知られてきていて、WindowsやLinux、MacOSX等マルチプラットフォームで色々遊んでいる人が多いことでしょう。そうなってくると、しばらく弄ってみた後はやっぱりマルチプラットフォームで同じようにHTTPで通信してみたいと思いませんか?

例えば、

  • mrubyでHTTPのGETとかPOSTとかしてみたり
  • mrubyを組み込んだデバイスからTwitterに呟いてみたり
  • 各種デバイスからZabbixをつついてみたり
  • エアコンを監視してるRaspberry PiからGrowthForecastにデータを送ってグラフ化してみたり
  • 組み込みデバイスや低レイヤーなソフトウェアからfluentdにデータを送って解析してみたり

ということで、今回はそういうことをするためにはmruby側でどういう準備をして、どう実装すればいいかの導入部分を説明したいと思います。

続きを読む

P2Pファイル共有ネットワークを利用したフラッシュクラウド耐性のある協調型負荷分散手法

「P2Pファイル共有ネットワークを利用したフラッシュクラウド耐性のある協調型負荷分散手法」という内容で、COMPSACという国際会議で代理で発表してきました。(去年の国際会議では僕が色々あって、代理で先生に発表してもらったような形ですね)

今回は、著者の方が色々あって発表できないので、共著者の僕が代理で発表してきました。著者や先生と相談した結果、面白い内容なので公開しようということになり、僕のブログが一番手っ取り早いので、ここで紹介します。

続きを読む