一生書くことはない(可能性が高い)エンタープライズアプリケーションの話

@tagomoris さんと @ashigeru さんと @Guutara さんによって繰り広げられた深夜のエンタープライズアプリケーションの話
0
tagomoris @tagomoris

信頼性で思い出したけど、アプリケーションサーバ上にFluentd置いて、mutex保護された連番id採番プラグインがあれば、エンタープライズでも普通に使えるよね、って考えてた

2012-05-22 01:52:45
Suguru ARAKAWA @ashigeru

@tagomoris そこまでやるならついでにチャンキングしてまじめにやるとたぶん普通に使えるようになると当時考えてました

2012-05-22 02:04:54
tagomoris @tagomoris

@ashigeru それ、普通に、の範囲がだいぶ下の方までカバーしないといけなくてめんどくさいことが多そうw

2012-05-22 02:08:39
tagomoris @tagomoris

たとえば銀行での取引の分散トランザクションはFluentdに乗っかるとしたらその上にアプリケーションがあれこれやるレイヤを作ることになって、そこのスループット依存になることはわかりきってるので、まあFluentd向きではないですね

2012-05-22 02:11:08
tagomoris @tagomoris

でも課金や受発注での分散トランザクションだとshardがいくらでも分割できるのでアプリケーションレイヤでいくらでもやりようがあるから、やれるでしょ

2012-05-22 02:11:40
Suguru ARAKAWA @ashigeru

@tagomoris 結局まじめにやるとend to endの到達保証と絶対時間内での制限付けなきゃならんのですわ。ただ、スループットが絶望的かというとそんなことはないんじゃないかと思ってます。DBのレプリケーションとかと似た感じで。

2012-05-22 02:11:44
tagomoris @tagomoris

@ashigeru うん、でもそれミドルウェアで担保すべきものでは本来無い(アプリケーションの領域だ)と自分は思ってるので、Fluentdを下回りの配送に使って信頼性の担保は別レイヤでやればやれるでしょ、と

2012-05-22 02:12:52
tagomoris @tagomoris

1トランザクションを極短時間で終わらせないといけないものは置いといて、それ以外であればフロントエンドで採番+ローカルディスクに書き出し+バックエンドに配送、バックエンドで処理と同時に連番idがちゃんと抜け漏れなくリアルタイムでチェックして以下略、とかやれば簡単にやれるんじゃね

2012-05-22 02:14:36
Suguru ARAKAWA @ashigeru

@tagomoris んー、end to endと絶対時間保証と再送系はどっちにすべきなのかいつも悩むところではありますね。ただ、syncに近いプロトコルはアプリレイヤーだけでやっちゃいけないとは思います

2012-05-22 02:15:06
tagomoris @tagomoris

@ashigeru ディスクへのsyncをトランザクションの終了要件に含めるのはイマドキは時代遅れ感があると思うけどなーとは思うけど、まあそのへんをミドルウェアとして担保するものがあるならそれを使うべき、というなら、それは同意です

2012-05-22 02:17:36
Suguru ARAKAWA @ashigeru

@tagomoris あー、ローカルディスクへのっていうか、特定のendへのflush伝搬っていう意味で。

2012-05-22 02:19:16
tagomoris @tagomoris

@ashigeru え、そこ? それはアプリケーションが責任持つべきって言ってもいいと思ってるんだけどなー。だってミドルウェアは情報の価値の軽重を知らないもん。

2012-05-22 02:21:28
Suguru ARAKAWA @ashigeru

@tagomoris んー、アプリとミドルの分界点次第だとは思うけど、無限に処理の開始を待機しないですむためにはアプリの要請で一気通貫のheartbeatとsyncの処理を行えるべき、って感じ。かみ合ってなかったらスマヌ

2012-05-22 02:26:53
Guutara mmmmm (⁰⊖⁰) くぁwせdrftgy ふじこlp @Guutara

@ashigeru @tagomoris sync 考えられるやつは、普通のやつより、したに行くよ。w

2012-05-22 02:27:42
tagomoris @tagomoris

@ashigeru いや言ってることはわかる。処理の待機がどんだけ許せるかってのはアプリケーションの都合(とその時の処理内容)によって変わるし、それをミドルウェアに対して指定して守られることを期待するか、アプリケーション側で手を尽くしてなんとかすることを考えるべきか、って話でしょ

2012-05-22 02:28:24
tagomoris @tagomoris

@Guutara @ashigeru それは単に下の方を考えられる人間はアプリケーションを書く人間よりも貴重だ、という世間の認識のせいでしょw

2012-05-22 02:29:16
Guutara mmmmm (⁰⊖⁰) くぁwせdrftgy ふじこlp @Guutara

ま、TCP/IPと、南国生まれの、Ethernet 使ってるんだから、考え方、かえろよ!ってのは、どういする。

2012-05-22 02:30:03
tagomoris @tagomoris

@ashigeru で、自分の考えとしては、ちゃんと効率よく処理毎に担保する信頼性の違いをコントロールする(その方が最終的には全体の効率が良い)には、アプリケーション頑張んないとダメなんじゃないの、という

2012-05-22 02:30:24
tagomoris @tagomoris

「アプリケーションなんてアホの集団が書くんだから信頼性はミドルウェアで担保するに決まってんだろ!」おっしゃる通りです、こころ洗われる考えかたですね(棒読

2012-05-22 02:31:47
Guutara mmmmm (⁰⊖⁰) くぁwせdrftgy ふじこlp @Guutara

@tagomoris @ashigeru 少ないのが、貴重だとは、限らんのだよ。:p ただ、いまのお二人さんのような、会話は、しないだろうという、事実だね。やぁ、Sync 三回叩けば、いいっていわれたんで、えへへ。みたいな。

2012-05-22 02:31:55
Suguru ARAKAWA @ashigeru

@tagomoris そそ。ミドルで通信路確保してるなら、その通信路外でやっても効果が薄い可能性があるなーって話。もちろんやってやれなくないということは承知の上で。

2012-05-22 02:32:03
tagomoris @tagomoris

俺はアプリケーション開発者が下の方まですべて考えてコードを書く世界が素晴らしいしそうなってほしいなーと思っていますよ

2012-05-22 02:32:32
tagomoris @tagomoris

@ashigeru ああ、そういう意味では個別の経路の効率は多少犠牲にした上ででも、別のミドルウェアを組合せてアプリケーションがend-to-endで複数の経路をコントロールすべきなんじゃないかってのが自分の意見ですね

2012-05-22 02:33:51
tagomoris @tagomoris

なぜ俺はもう一生書くことはない(可能性が高い)エンタープライズアプリケーションの話をこのような夜中にしているのだろう

2012-05-22 02:34:40
Guutara mmmmm (⁰⊖⁰) くぁwせdrftgy ふじこlp @Guutara

@tagomoris すごい、人間性がすけてみえるぞ!w そういうかんじは、好きじゃないな。 ただ、数の論理で、たくさんいる方が、振り幅はおおきくなるって、だけじゃないかね。

2012-05-22 02:34:47