PofEAA読書会第5回

参加してきました。前回は風邪をひいて休んでしまったので、2ヶ月ぶりの参加ということになります。
発表されたid:bakockさん、id:thataさん、WRさん、お疲れさまでした。


ポジションペーパー

前々回はネタ系だったので、今回は真面目に。肩書きを公の場で自分から発表したのは実は初めてでした。その意味では今回のPPは個人的な思い出になるかなと思います。

今回はネタ系のひとのPPは凄いものが多かった。極めつけはid:koichikさんのクロスワードでしょうか。


Session State (担当はid:bakockさん)

Client Session State、Server Session State、そしてDatabase Session Stateについてです。
まずひとつ発見があったのは、Session内のオブジェクト群をシリアライズしてデータベースに格納する手法はパターンとしてはServer Session Stateに入るということです。
以前システム設計を行ったときに、リソース効率が良いままでシステムをスケールアウトさせるためにSessionの内容をデータベースのLOB列に格納していました。この設計をDatabase Session Stateにあたると思い込んでいましたが、これはServer Session Stateということでした。
データをLOBのようにひとかたまりにするのではなく、意味のあるカラムに分解して格納するのがDatabase Session Stateとなるようです。


Ways to store Session Stateあたりの論点はRich Clientがまだあまりメジャーでないころの記述に感じられるとのことで、時代の流れを感じさせます。たった2年くらいで、システム設計の主流も変わっていくということだと思います。


メモ: LLな人達はMySQLをフルに使用するので、"MySQL Session State"パターンという言葉が会場で生まれました。MySQLのスピード、キャッシュを最大限に使い、StateをMySQLに格納してスケールアウトする手法です。個人的には凄く興味アリ。



Distribution Strategy (担当はid:thataさん)

「分散ストラテジー」というタイトル付けが椎名林檎みたい、というかくたにさんの意見 in ポジションペーパー。その視点を発見したかくたにさんの方が凄い。


ファウラー節「分散オブジェクト設計第一の法則: オブジェクトを分散させるな」に酔う。原書はバリバリに強調表示になっているけど、邦訳は普通のおとなしい字になっているらしい。もったいない。

ファウラーは「アプリケーションを分散させるのではなく、アプリケーション毎に分散させるのが良いのでは」という主張のようです。このあたりの意見「複数の正規化モデル」、「アプリケーション境界」とも関係あるでしょうか。

ファウラー自身は「分散しない」でファイナルアンサー気味なので、少し主張が控え目な章になったようです。分散への怒りはRod Johnsonの方が強かったかもしれません。


メモ: 分散時のパフォーマンスは

同一プロセス <<<<<<<<<<< 別プロセス <<< 別ノード


メモ: DTOには2つある

  • Remote DTO (物理的なtierを越えるためのもの、coarse-grained)
  • Local DTO (論理的なlayerを越えるためのもの、fine-grainedでも良い)

『.NETエンタープライズWebアプリケーション開発技術大全 Vol.5 トランザクション 設計編』第3部 複雑なトランザクション制御のサマリ (発表: WRさん)

WRさんの充実した資料による発表は今回は時間の関係で少しだけ。バッチ設計についてでした。ちなみに次回は「サーガ」。気になる気になる。

実はバッチ設計にも時代の流れがあるということが会場で判明して、勉強になりました。バッチ設計のパターンもいろいろ知りたい。


メモ:オフラインバッチ処理とは

  • OLTPシステムが動いていない夜間等に実行するバッチ
  • システムトランザクション制御が行われないケースが多い(そもそもデータベースを占有できる)
  • 落ちたらバックアップから戻してリランする → リラン時間を確保する必要性がある


でもバッチが落ちる原因は? 大体データ不備
機械的にリランしても再度失敗する可能性大
→ 手でデータ修正する必要あり
→ なんらかの運用手段が必要


対策法

  • ショートバッチ(小さいバッチに分けて、トランザクションを切っていく方法)
  • 失敗を無視する(n件処理、m件失敗)という方法もある → 失敗分をエラーログに


バッチをパラレルに走らせる場合にはディスクのpartitionをきちんとしておかないと、パラレルに実行してもパフォーマンスが出ない。インデックスの競合などが起こるため。異なるバッチが異なるディスクを扱うように物理設計すること。
(追記: バッチを走らせる前にindexを削除してしまう手法もあったように思われます。)



KPT

短い時間でKPT。時間の関係で今回はKeepが出せなかった...
KPTに続いて次回の担当分をサインアップ(アサインでは無い!!)。
今回で終わりで良いのではという意見もありましたが、次回以降もパターンを掘り下げていく路線で行くことになりました。
次回は少し間が空いて9/11日とのことです。



飲み会

id:kunitさんに御挨拶(ちなみに、読みは「けーゆにっと」ではないということでした)。前々からお会いしたかったので、この機会にお会いできてよかったと思います。他の言語を知っているプログラマPHPに入門するための本は何が良いですかという質問をしたところ、PHPの言語マニュアルが結局一番良いと教えてくださいました。PHPのマニュアルはユーザからのフィードバックが迅速に取り入れられるため、非常に良いドキュメントとなっているとのことでした。ここ(http://www.php.net/manual/ja/)でしょうか。(追記: id:honeybeさんから教えていただいたURLに修正しました)

  • koichikさんと日本Rubyの会会長の言語話にはついていけず。すごい知識量。
  • このような場でリクルート活動を行う人も多くなってきたので、個人的には焦ります。
  • 「こういうことを話して欲しい」というリクエストが複数あったので、次のJ2EE勉強会で私が話すことについてもテーマが決まりました。
  • J2EE勉強会に続いて、領収証をしっかりゲット。こういうのがあとで効いてくる。
  • 参加された方々のマシンはほとんどがThinkpad。何人かの方がMacを使っていて、その二つ以外のマシンを使っていたのは私だけ。黒いノートの業界内シェアは恐ろしい。


(追記: kdmsnrさん曰く、「トラックバックするまでが読書会」とのことなので、読書会Wikiトラックバックしました。)