先日 @keisuke69 のAMQPとRabbitMQの話をききにいったときに、
CloudFoundryの輪読会にエバンジェリストがきてSpring Batchを
Spring Integration使ってCloudFoundry上で〜みたいな勉強会やるよ
ってことで行ってきました↓
第11回CloudFoundry輪読会(http://atnd.org/events/36145)
ちょっと遅れて入っていったら、発表者のテンション高いアニキに
Helloって言われてちょっと驚きましたが、
Joshuaが本名だけどJoshと呼ばれたいんだ!というとても気さくでユーモラスな方でした。
最初の方はvmcコマンドでアレコレやって、普通な感じのアプリケーションを動かす感じ。
CloudEnvironmentオブジェクトってCloudFoundry用のクラス使って
RDBMSのデータソースを取得してるよーとか。Redisも似たような感じで。
で、段々話が本日の主題の方に移っていって、
『バッチでゴッソリファイルをDBに突っ込んだりするのはPrettyじゃない』
コ○ラーに対する激しいディス(最初自分が携わってる電子書籍がディスられてるのかと思った…汗)とともに、
ManifestoとMavenの設定ファイルをみながらこんな感じでやればサクっと。
RabbitMQ使って連携出来るんだぜー、と。
RabbitMQに関しては、金融機関に対して商用のスッゲー高いMQ製品を売りつけたり
コンサルティングフィーをふんだくったりしてるようなのよりもイケてるとか辛口な語りとともに、
1つのプロデューサーから1つのコンシューマーはもとより、
1つのプロデューサーから複数のコンシューマーにってのも簡単に出来るから、
スケーラブルでしょ、と。
Amazonなんかでも、彼らは自前のSQSってMQ持ってるけど、
最近はRabbitMQ使ってるらしいよ、とか。
んで、どんな流れでこのスライドが出てきたのか忘れたけど、
世界で最初のクラウドメッセージングはコレだ!とw
引き続き、話はバッチプロシージャの方に移っていきます。
SocialSecurityってアメリカの役所でバッチ処理がバグってて112,000人に
余計にお金が払われてしまった。バッチ処理ってのはクリティカルなんだぜ、と。
#日本でも似たようなのありましたもんねぇ。
SpringBatchとは何ぞや?っていうところをドメインモデルと一緒に説明。
Jobってのがあって、それにはStepがブラ下がってて。
StepはReadするコンポーネントやWriteするコンポーネントがあって。
Jobのインスタンスが起動されてStepが実行されていく、と。
例えば、ウン百万件のレコードを一気にselectしてもイイけど、
オェップってなって死んじゃうから(Out Of Memoryとかを彼なりに表現したのでしょうw)
カーソル開きっぱで順繰りやってくような実装するわけだけども、
それについては、銀行でも使われてるようなガッツリテストされたコンポーネントを
Springが提供してるから、自分たちで車輪の再発明する必要ないぜ、と。
SpringBatchの設定ファイルを元に、
ReaderからProcessorに処理を委譲。んでもってWriterに、と。
そいつらはXMLで↓こんな風に(思いっきり端折っててスイマセン。。)
step tasklet chunk -Reader -Processor -Writer -commit間隔
次のstepの定義で前の処理のexitコードがxxだったらログ出力とか。
#ってかコレもSpringのApplicationContextみたいにJavaのコードで
#定義出来ないのかな?なんかXMLいっぱい書くのはなんだかなぁと。
で、ここでRabbitMQですよ、と。
処理をMasterとSlaveに分割して↓こんな風にしたらいいじゃない、と。
-Masterは処理して欲しい命令をRabbitMQに。
-SlaveはCloudFoundryに分散させて配置されていてRabbitMQから命令受け取って処理。
#リランっていうかHadoopみたくどっかのノードが逝っても〜的な仕掛けを
#コレ使って実現できたらカッコエエなぁなんて前に思ったけど、結局何もしてないな…
にしても、Joshアニキはコ○ラーだけでなく、ペ○パーもお嫌いらしく、
でも、そいつらとホゲホゲしなきゃいけない局面は出てくるから、
MQカマしてchannelって形で疎結合にやりとり出来てナイスだぜ、と。
口は悪いけど、的を得ているな、と。んで”do NOT reinvent the Wheel!”。
でもって、このMQを効果的に使ったインテグレーションに関して、やっぱり
Enterprise Integration Patternは必読書だぜ、と。
コレ読めばSpringIntegrationの事を理解出来るはずだそうです。
この本の著者の1人のGregor Hohpeはイイヤツだけどクレイジーだそうで、
日本の女性が大好きなので何年か日本に住んでたそうです。会ってみたかったなぁ。
んで、Spring Integrationの思想について。
Pipe and Filters。Linuxのパイプを例にして、要はコレと同じだよ、と。
ココからはデモ用のコード見ていく感じで、
クライアント側からすると、ただの普通なJavaのプログラムだけど、
裏側はスケーラブルな感じになってる。そこを意識しなくてイイのナイスだよね、と。
Spring Batchでcron的なのもアノテーションで記述できちゃうし。
が、デモしてるときにY!PIPSのAPIの呼び出しがうまくいかなくて(株価情報引っ張ってきてたのかな?)
vmc updateとかdeleteとかtunnelとかガツガツやりまくってたけどw
コードは↓で見れるそです。
https://github.com/cloudfoundry-samples/stock-workers
Q&A
Q:ギガバイトとかのデカいファイルのやりとりするときRabbitMQはどう?
A:MQにデカいの入れるのはよろしくない。
Claim Checkというパターン。
いいレストランいったら上着やカバン預けるだろ?んで、番号札もらう。そういうこと。
Q:Apache Camelとの違いは?
A:Spring Integrationは歴史も長いし、Joshさん自身いろいろイジってきたけどSpringイイよ、と。
本のインデックスがどうのって言ってたけど、どういう意味だったんだろ?
Camelには実装されてない機能が多いとかそういう事だったんだろうか…
んま、そんなこんなでJoshさんのお話、非常に参考になりました。
あの毒舌、またどっかで聞きたいな〜。笑
LTと懇親会もナイスな雰囲気でした。
現状Rails4アプリはライブラリのアレが的な感じでCloudFoundryにデプロイ出来ないらしく
@hamakn さんががその場でパッチを送ってました〜
Addison-Wesley Professional
売り上げランキング: 53,159
コメント
[…] […]