第14回 オープンソーステクノロジー勉強会に行ってきた.

行ってきましたGREE主催の勉強会.と言うわけで,右後ろでカシャカシャ打ってたログを.

モバイルフレームワーク MobaSiF

昔と比べて携帯サービス開発は楽
  • 昔と比べて楽になった
    • 端末の認証情報
      • UIDの取得は確かに楽になった
    • 絵文字の扱い
      • auが外字コードで出し入れ可能になった
    • 画像の出し分け
    • タグの有効無効
      • <table>の扱い
    • ページ容量向上
    • 画面サイズと液晶の画質の向上
  • MobaSiFが対象としているのは通常のHTMl
    • Flash/アプリ/動画などは機種個別の扱いが必要
  • 古い機種を切り捨ると確かに楽だが....
    • i-mode IDの取り方(参考)
      • guid=ONつけないとダメ
      • formの場合は
        • GET -> hidden でかかないとダメ
        • POST -> action に query をつけないとダメ
    • 古い機種の対応
      • mova
        • XHTML,背景色がダメ
      • foma 〜901, 〜701
        • <table>が使えない
      • au CDMA 1X
        • 50Kまで
        • 絵文字が<local src="***">
      • softbank 3GC 型以外
        • png 素材も用意しないとダメ
      • softbank C型
        • 公式以外では端末認証できない
          • これは知らなかったので,いい情報.あとでUA調べてみよう.
MobaSiFとは
  • モバオク,ポケットアフィリエイトモバゲータウン,モバコレで使われているものの機能を切り出した感じ.
  • 基本思想
    • 気軽に作れて,ヒットしたらスケールできるのが理想
    • 細かいところはきにしない
    • フレームワーク全体を把握して開発すべき.
    • 運用も想定して開発すべき
    • フレームワークは生もの.サービスとともに成長する
      • このあたりは Rails とは少し想定が違う感じ.
MobaSiF特徴
  • モバイル特有の処理
    • 端末情報・絵文字
  • 軽い
    • XS モジュール
      • テンプレートの処理や地図・アバターの合成などはXSを使ってる
    • 起動コストが小さい
      • トラフィックが多いことを想定しているので,サーバ再起動時などに,必要に応じてモジュールをロードできるような仕組み
    • 素朴な実装
      • 全体を把握しやすく,融通が利くように
        • Rails だとこの真逆かな.
    • 依存モジュールが少ない
      • ほとんどPerlの基本モジュールのみ
      • XSは build しなければならない?
    • 動作環境はある程度しばる
  • 動作環境
  • 対応案末
基本機能構成
  • ディスパッチャ
    • モバイル用環境変数の設定
    • リクエストパラメータ取得
    • ユーザデータ取得
    • ステータスチェック
    • モジュールロード
    • 処理実行
  • 端末情報取得
    • UserAgent から判別したキャリア
      • データベースに機種情報があり,それとの組み合わせで判別もしている
    • IPから判別したキャリア
    • 端末タイプ,モデル名
    • UID
    • 画面サイズ
  • ユーザ認証
  • 絵文字変換
  • テンプレート
    • 事前コンパイル方式
    • コンパイル -> 3キャリアのバイナリテンプレートが生成される
    • 共有メモリ(mmp)でテンプレートを読み込むので高速
    • 必要最低限の機能
    • 静的ページも動的生成
  • テンプレート処理
    • 変数埋め込みや分岐処理,ループ処理など
  • 基本遷移
    • ユーザの導線
Webアプリ以外での使用
  • batch/daemon/監視スクリプトなどでも使える
  • use MobaConf; だけで,Webアプリと同じ設定を読み込め,全機能にアクセスできる
  • 日記の更新
    • ローカルファイルにアクセス記録
    • その後にデータベースサーバに集約している
    • リアルタイムに処理するには重すぎる場合の処理
      • モバゲーの日記はリアルタイムにアクセス数が更新されないのか
モバゲーのものとの違い
  • メール送受信部分の割愛
  • セキュリティー的に見せられないコードの割愛
  • docomo の認証
    • SSL でとれないので,session で引き回して取得しなければならない
  • 絵文字のとりまわし
  • 誤字の訂正
モバゲーの課題
  • DBアクセスで律速なので,フレームワーク高速化してもあまり意味がない
    • これはどこも同じか
    • 1サーバ15プロセスで,いかに詰まらせないかを考えている
    • DB 500 台あるらしい
  • システム全体が巨大になり,フレームワークの修正が危険になってきた.
  • 少人数開発前提なので,コード品質のばらつきに弱い
  • そろそろutf8に移行すべきか....
質疑応答
  • 非同期処理のキックは何で?
    • Webサーバでローカルキューに書き出し,daemon がbatch処理サーバに送信し,batch処理サーバが処理する
    • ファイル監視方式.プログラム書く人がファイルの監視部分に注意する.
  • デプロイ関係でデータベース変更がある場合の手順などは?
    • 先に configuration 巻いて,手順通りにやる
    • DNS ベースで slave 先を見ているので,そこを書き換えれば OK
    • master の変更は,朝方に 5分程度のメンテナンス
    • 普段の deploy は rsync で1台ずつ
      • Webサーバ200台ぐらいあるそうな
  • 直したいところは?
    • 文字コード周りを直したい.
    • MySQL 4.0 では問題ないが,MySQL 5.0 では SET NAME とか面倒なことしなければいけないので,そこな直したい.
    • O/R Mapper を使おうとは思わない
  • 逆質問:Greeの藤本さんはどうなんですか?
    • 手を離れているので,ちょっと
    • utf-8 対応にしておきたかった.
  • DeNAで使ってるCPAN module は?
    • DBI ぐらいしか入ってない
  • コーディングルールとかは?
    • 空気読めればいい!
    • だんだん空気感が伝わらなくなってくる
    • 地道にルール作っていくしかない
    • テストの基準もそろそろどうになしないと
  • データベースとファイルの使い分けは?
    • ファイルは非同期処理の手段として使う
      • 決済処理などはファイルを使わない
      • 欠落しても問題なさそうな軽めの情報をファイルに書く
      • ファイルだと現場ベースで扱いやすい
    • 端末データはデータベース上にあるが,基本的にプロセス上でキャッシュしている
  • MobaSiFはXSも入ってるけど,どこをCでどこをPerl
    • 基本処理をPerlで書いて,処理時間を計って,頻度と時間に応じてかき分けている
    • あとは書きたかったから
  • データベース負荷分散は?
    • プログラムベースでIDベースのデータベースパーティショニングをやっている
    • キーの値に応じて,DB1, DB2 などの振り分けは,手動で組んでやっている
    • インフラ周りとしては標準の負荷分散

まとめ

今回の主題である MobaSiFPerl でのフレームワークだったわけですが,やはりモバイルではみんなどこも同じことをやるんだなぁと言うのが第一印象.あと日記のアクセス数など,バッチ処理でこなしている部分も結構あるみたいで,即時性と完全性が要求される部分とそうでない部分を切り分けるのも重要だと感じました.

次回はインフラ周りか検索エンジンの話なのかな?それも期待です.