@jj1bdxさんに「このような運用論文を誰でも読める形で」「情報処理学会や信学会の論文誌掲載論文は、論文誌に掲載された後であれば、著者がWeb上で公開するのに制限はない」という情報を頂き、別に公開しない理由もないので、大規模共有型Webバーチャルホスティング基盤のセキュリティと運用技術の改善という内容で書いた論文を公開したいと思います。
ngx_mrubyの紹介 ならびに nginx+mruby+Redisによる動的なリバースプロキシの実装案
ようやくngx_mrubyでもmod_mrubyのように動的なリバースプロキシ設定ができるようになりました。タイトルは完全に@hibomaさんによる「lua-nginx-module の紹介 ならびに Nginx+Lua+Redisによる動的なリバースプロキシの実装案」をパク … inspireしたものになっています。
今回の工夫点としては、
- ngxin内部の変数をうまく使う
- redisとのセッションはnginx起動時に一度だけ行なって、そのオブジェクトを使いまわす
- 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側でどういう準備をして、どう実装すればいいかの導入部分を説明したいと思います。