JJUG CCC 2012 Fallで発表をしました。
2012年11月10日開催の日本Javaユーザーグループ主催のクロスコミュニティカンファレンス 2012 Fallにて「Javaを使用したSaaS型ECプラットフォームえびすマート開発の概要」という演目で発表させていただきました。発表の機会を与えて頂いた JJUG の皆様、業務内容を発表することを了解してくれた勤務先の会社であるインターファクトリーのは誠に感謝致します。
スライドはこちらにアップさせて頂いています。
http://www.slideshare.net/susumuishigami/jjug-ccc-2012-fall-javasaasec
同じ時間に寺田さんの発表(←僕も見たかった >< )とかぶってしまったので、多くの方はそちらへ行ってしまうのではないかと心配しましたが、それでも、数えていませんが20名くらいの方に参加をしていただきました。その方々には、質問のコーナーでとてもたくさんの質問を頂いてしまいとても有難く思っています。また、応援に駆けつけてくれた、Nさん、Sさん、Sくん、Tくん、Iさん、ありがとうございます。
事前に @skrb さんから https://twitter.com/skrb/status/264637984756883458 というアドバイスを頂いていたにもかかわらず、前半早口になってしまい、途中から気をつけましたが、結果的には質問の時間をたくさん取ることができ、質問も多数いただけたので良かったです。このあたりLTにはない悩みどころですね。
発表内容補足
質問にも挙がっていた、キャッシュとヒープ OldGen の関係について「SQLのキャッシュを取りすぎていたため」と発表では説明しましたが、正確に言えば下記の2点が特に多く消費していることが分かっています。
前者はMayaaがDOMを使用してXMLを解析するためによるものです。えびすマートの特性上、非常に多くのビューを扱う必要が有るため、ビューのキャッシュが問題レベルになっているようです。まだMayaaの内部実装を追いきれていないため、自分が行った拡張部分のせいである場合も考えられます。後者は発表で話した通りの部分です。
両者を見た時に、自分たちで何とか出来る可能性が強い、後者の方に注力して今は対応を急いでいます。
前者を研究することは、Mayaaというオープンソースに貢献する意味では価値があることなので是非取り組みたいところです。しかし下手な発表をして「Mayaaは多数のビューを扱う場合に弱いから使えない」などというあらぬ噂を広げてしまわないように、発表では控えました。しかし原理上はDOMを使っているので、使い方によってはそのような特性があることは間違いありません。もっとも、どのテンプレートエンジンにも同じような傾向があるでしょう。
この他、PermGen領域も結構使用しています。これは既にこちらに報告済みの問題です。
http://ml.seasar.org/archives/mayaa-user/2012-October/000939.html
取り急ぎの対応として、えびすマートではサーバサイドのJavaScriptをload関数で読ませることをやめ、直接mayaaファイルに記述することで回避しています。それでもまだなぜかclassのロード数が増大していく傾向があることを確認しています。これが自分がMayaaを拡張した部分のものなのか、Mayaa本体のものなのか検証ができていません。
これらのメモリの問題はアプリケーション側の問題であるにもかかわらず、サービスレベルを維持という企業のサービスとしての責任を果たすため、インフラ側の増強で回避したというのが事実です。発表の中にもあった「パフォーマンスが悪いとコストがかかる」そのものです。インフラ担当に聞くと、AWSはリザーブドインスタンス契約があるため費用はペイしているようです。
従ってこのような問題を解決していくことは経営にも直結していくことですので、費用対効果を分析して限られた開発リソースをどこに注力するのか、いつまでに対応するのかを、経営サイドと話して決めて行けることがSaaS開発の楽しみであるとは、発表で話したとおりであります。