研究開発によってサーバ台数を100分の1にする技術を生み出す ペパボ研究所 主席研究員 兼 シニアプリンシパルエンジニア 松本 亮介 / Pepabo R&D Institute, GMO Pepabo, Inc. 2017.11.25 Fukuoka RubyKaigi 02
![200万ドメインのHTTPS化を見据えたmrubyによる大規模証明書管理アーキテクチャ / 2millions-cert-by-mruby // Speaker Deck](https://cdn-ak-scissors.b.st-hatena.com/image/square/40f788c7dc2eb0482938dea06cd4558c5719bec7/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2Fa14bf663f3904bd7be90c9aa3d35d19e%2Fslide_0.jpg%3F9048721)
こんにちは。並河(@namikawa)です。 随分と寒くなってきたんで、そろそろ銀座界隈のオススメのラーメン屋の紹介でもしようと思・・・うわなにをするやめくぁwせdrftgyふじこlp; ・・・はい。今日は、ちょっと前にやった nginx + ngx_mruby でSSL証明書の動的読み込みを実現して、作業がとっても楽になったワンって話をしようと思います。 前提の話 弊社では、転職ナビという400近く存在する多くのドメインを持つサイトがあり、そのSSL処理をフロントの nginx で行なっています。 過去、そのバーチャルホストの設定がドメインごとにベタ書きされていた経緯があり、その辺の共通化・書き直しを少しずつやっていて、正規表現や環境変数を駆使することで、随分と設定は共通化できたりするのですが、どうにもならなかったのがSSL証明書の設定である、 ssl_certificate ssl_c
mrubyを改造したり、mrubyを何かアプリケーションとかに組み込むときに必ず必要になる物に、mrb_state型の構造体へのポインタ(多くの場合はmrbという名前で参照されている)があります。これは、mrubyで使う大域変数や状態を1つの構造体にまとめた物です。 mrubyのインタプリタを使うときにはmrb_state型の構造体のインスタンスを用意してそれをインタプリタに渡します。複数のインタプリタが欲しいときには複数のインスタンスを用意します。 こうすることで、構造体のインスタンスを複数用意することで複数のmrubyインタプリターをプログラムコードは共有して使えます。これは、並列性は息を吸うのと同じくらい普通で、メモリの一滴は血の一滴くらいメモリが貴重な1組み込み界隈ではとっても嬉しい仕様なわけです。 mrb_stateはmrubyの大域変数や状態が全て入っているので、mrb_sta
nginxのv1.9あたりからOSS版でも使えるTCPロードバランシング機能をmrubyでプログラマブルに制御できるようにngx_mrubyでもサポートしました。 github.com これで、HTTPやHTTP/2だけでなくTCPのロードバランシングでもmrubyによって通信をプログラマブルに制御できるようになったわけです。 nginxのTCPロードバランシング機能は、nginx内部ではstreamモジュールとして、httpモジュールとは別で実装しているため、ngx_mrubyでも一から実装し直す必要がありました。 ということで少し面倒だなぁと思っていたのですが、ちょうど、僕の最近やりたい事としてTCPのロードバランサをもう少しプログラマブルに書きたいというのがあって、色々とTCPロードバランサを探したり、既存のソフトウェアで設定を試行錯誤するよりも、自分でnginxのTCPロードバラン
前回の関連で得た知見をそのまま忘れるに任せるのもちょっと惜しいと思ったので、小さく小ネタ集として残しておきます。 ローカル変数は最大約512個 mrubyのバイトコード上レジスタは最大でも512個しかありません。 そしてローカル変数1つにつき1つレジスタが割り振られるため、ローカル変数は最大で512個しか使えません。 さらに、メソッド呼び出しなど各種処理でもレジスタを使うので、前後のコード次第で事実上はもう少し少ない数になります。 足りなくなるということはないでしょうが、そういう仕組みなのだということは覚えておくと役に立つこともあるかもしれません。 リテラルの文字表現は最大1023文字 整数実数文字列といったリテラルを文字で表記するとき、最大文字数は1023文字となります。 文字列の場合は””を含まない本体の文字数、8進数は先頭の0もしくは0_を除いた文字数、16進数も同じく先頭の0xを除
C++側で定義されているクラスをmrubyに持ち込む方法を調べた。参考にしたのはmruby-time/time.cやmruby/C構造体組み込みを読む - Code Reading Wiki。正しいかどうかは保証できないけれど、一応ちゃんと動いているようです。 C++側になにかクラス class Hoge { public: Hoge(int x) : x_(x) { std::cout << "Hoge::ctor()" << std::endl; } virtual ~Hoge() { std::cout << "Hoge::dtor()" << std::endl; } int x() const { return x_; } private: int x_; }; があったとして、これをmruby側から扱いたい場合には、DATA型を使うといいようだ: #include <mruby
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く