AWS Casual Talks#1 で発表してきました

(これを書いているのは一ヶ月後の12/1です…)

AWS Casual Talks#1で「Amazon Simple Workflow Casual」というタイトルでLTしてきました。

会場で Simple Workflow を知っているというレベルでも片手で足りるくらいの人数だったような。

開始時点で、これはまずったなと思ったのですが、もう走り抜けるしかないと思い、当初の予定通り「Simple Workflowとはなんぞや」という説明を一切せずに、使っていて困ったところや、いろいろ試行錯誤して解決した話をしてきました。

ただ、話したいことや相談したいことはもちろんこれだけはないので、もしまた機会があればもう少し時間をいただいて、導入的なところから、他にもあるハマり所やTipのようなものを紹介したいなぁと思いました。

他の方の発表や、その後のインターネットの動向を見るに、mBaaSやVPCあたりがやっぱりホットなテーマなんですね。 このあたりは自分はまったくノータッチな分野だったので、一線の人達の話が聞けて勉強になりました。

主催の@con_mameさん、会場のAmazonさん、ありがとうございました!

追記:

gihyo.jpの記事になってました。 第6回 ガジュアルなナレッジ共有でクラウドサービスを使い倒す~AWS(Amazon Web Services) Casual Talks:IT勉強会を開催するボクらの理由|gihyo.jp … 技術評論社

YAPC::ASIA 2013

YAPC::ASIAに初めて参加してきました。

印象に残っているトークの感想などなど。

大規模Perl初心者研修を支える技術

圧巻の71人個別指導。

最初から高トラフィックを想定してデータ設計やコーディングをさせるというのは、そういうノウハウがあるからこそできることで、すごく羨ましいですね。

あとは、自身でふりかえれるようにフォローアップしていくというのは、自立的に動けるメンバーを育てるという観点からもいいやりかただなぁと勉強になりました。

ちなみに、これに関係する話が聞ける師弟登壇・新米サムライの集い 2013というイベントが来月開催されるみたいですよ。

僕の考えたFuture Perl

Perl 6、噂話程度にどういう状況なのかは聞いていましたけど、今の状況を整理して聞くことができたのはとてもよかった。

また、Perl 6 の機能を Perl 5 でも使えるような CPAN が出てきていて、その中でよいものを Perl 5 のコアに取りいれていくというのもよいのではという話は、言語のコアでそういうことをやれるとしたらおもしろいなぁ。

YAPC::Asia Tokyo 2013 特別座談会 「Rubyの良いところ語ってください 〜そんなPerlで大丈夫か?〜」

言語の差よりも、プログラマ自身の能力の差の方がずっと大きいからみんながんばれという話。

Rubyだと普通にその辺に言語のコア開発者がぞろぞろしてるけど、これはかなり特殊というか特別な状況というのを実感した。

Railsの影響でRubyには経済圏が出来たというのと、モダンな有償サービスでPerlのサポートは少なくて自分達で働きかけないといけないというのはハッとした。

本当にあったレガシーな話

どこかで聞いたことがあるような大変そうな話だった。 最後のキーノートにも繋る話で、こういうことをやった人を評価する仕組みっていうのが大切なんだなぁと。

Keynote

マネージャーという役職(?)についていろいろと考えさせられるトークだった。

運動部のマネージャーと会社のいわゆるマネージャー 社内政治のハッカー ディレクション リーダーとマネージャー

Ikebeさんみたいなマネージャーのいる会社はきっと楽しい(だけじゃないだろうけど)と思いました。

Closing

なんとなく、そろそろYAPCに参加してみようかなぁと思ったら、「現行体制での最後のYAPCです」と言われて、嬉しいやら悲しいやらという感じ。

RubyKaigi(1stシーズン)の最後にも立ち合ってしまったし、この業界自体がそういう時期にきているのかなぁと、いろいろ考えてしまいました。

まとめ

はじめて参加したYAPCでしたが、

インターネットでしか見たことない人の顔と名前がいっぱい一致した Perl ちょっとやってみようかな、という気になった 武蔵小杉の横須賀線からの乗り換え設計した人出てこい

という感じで、とても充実した二日間でした。ありがとうございました!

Sansan様でNiigata.rbの再演

昨年からお仕事でお世話になっているSansan様にてNiigata.rbの再演をしました。

この発表を作る上で今のプロジェクトに影響されているところも沢山あるので、そのあたりの裏話を混ぜたりして話してみました。

発表後の質疑応答のときに「なかなか上手にテストが書けないんだけど、いいテストと悪い(?)テストは何がどう違うのか。どうやったらいいテストが書けるようになるのか」みたいなことを言われたのですが、私の思いとしては

describeとcontextが整理されていること そのdescribeとcontextが嘘をついていないこと

で十分じゃないかなぁと思います。

1番目は、ここが整理されていると、エッジケースの漏れがないかとか、仕様のずれや漏れなどがないかとか、一目でわかるのでレビューが楽なんですよね。

2番目は、よくあるのがmockやstubを多用している(せざるをえない)ときですね。 shard_contextとかにも繋がるんですが、せっかく日本語(や英語)で状況を整理して書いているのに、実際にコード見たら「その騙し方はないだろう」みたいになるのがつらいよねという話。 で、多くの場合そういうテストコードは落ちてほしいときに落ちなくて、落ちないで欲しいときに落ちるよね、と。

他にもいろいろ質問をいただいたのですが、外と発表するのとは違ってコンテキストを共有できる状態でのディスカッションはやっぱり話が早いので、こういう機会を増やしていけるといいなぁと思ったのでした。

発表の機会をくださったSansan様ありがとうございました。

60min.第13回「Background Job Worker座談会」

ursmから、このようなものが何故必要なのか、そしてidobataで実際にどう利用しているのか、ということを話してもらった。

なぜ必要なのか

Railsのプロセスはだいたい200Mくらいはメモリを使うので、たとえばそれを32個上げるとするとそれだけで 200M * 32 でだいたい6Gくらいのメモリを使うことになる。(そして、メモリは普通有限なのだ)

たとえば1秒かかる処理があると、同時に捌けるリクエストは32個になってしまい、33個目は1秒後に処理が開始されることになって、レスポンスを返すまで2秒かかる。

これが1秒ならまだいいが、普通、処理待ちをしている間にもどんどんリクエストは来るので、雪だるま式に処理待ちのリクエストが増えていくことだろう。

なので、同期処理が必要ない部分は、積極的に非同期処理に逃がしていかないといけない。

Background Job Workerはどれを使えばいいの?

2013年では以下の4つのライブラリを抑えておけば十分で、それぞれ特徴があるからアプリの特性やインフラと相談して決めるのがいいよということ。

Resque Sidekiq queue_classic girl_friday

まず、ResqueとSidekiqについて。 仕組みはだいたい同じだが、Resqueは処理がプロセス、Sidekiqはスレッドになっている。

Ruby(MRI)はグリーンスレッドなのとMRIは1.9以降はネイティブスレッドだけどGVLがあるのと、マルチスレッドがらみのメモリリークやバグに悩まされたくないなら、とりあえずResqueという選択でもいいかもしれない。

queue_classicは、ジョブキューがPostgreSQLのPubSubを使っているので、ポーリングしている他のライブラリに比べて仕組みがクール。Redis等を入れなくてもいいので便利。

girl_fridayは、ジョブキューを自身のプロセスの中に持っている。ジョブを依頼する側と処理する側が同じプロセスになるので、ちょっと面白い(強引な)こともできたりする。ただ、Railsのプロセスが落ちるとジョブキューも無くなってしまうので、Redisバックエンドの仕組みを入れておいたほうがいいだろう。

因みに、私はとあるアプリでインフラにあまり手をいれたくなかったので、girl_fridayのオンメモリで実装したことがあります。ただ、それは運用の支援ツールみたいなやつで、「だめなら再実行すればいいからさくっと作ってほしいという話だったからなので、なるべくRedisバックエンドにしましょう。

まとめ

あまりこの辺に詳しくないなら、まずはResqueを使おう。ただ、Sidekiqでも実感できる程の処理の遅さはないと思う。

DBMSがPostgreSQLならqueue_classicは試してみる価値があるよ。

girl_fridayは、仕組みが面白いから教養として使ってみるといいかも。

ちなみに、idobataではSidekiqとgirl_fridayを使っているとのこと。(なんで2つあるのかは、忘れてしまったそうな)