GAE勉強会

( GoogleAppEngine )

GAE勉強会 ※わからないないところもあったので後で調べる予定です。

内容

<セッション1> 発表者:松尾さん(@tmatsuo) テーマ:「App Engine アンチパターンその他」 内容:App Engine でやってはいけないパターンを紹介、その他で小技集の紹介をします。

<セッション2> 発表者:ひがやすをさん(@higayasuo) テーマ:「Global Transaction」 内容:Global Transactionを理解するために必要なことを全部お話します。

セッション1

  1. 【モデル】
  2. インデックスの張り過ぎには注意 メタデータにも注意 カラムの名前でデータとして入る。ここで性能の問題になるので命名には気をつける。 過インドの属性名もメタデータして保持されるので、短い属性名を利用するようにしてデータストア を節約させる。(そこそこらしい) 検索不要なプロパティは、インデックス対象にならないようにPUTする。
    # before
    class Bar(db.Model):
    prop1 = db.StringProperty()
    

    after

    class Bar(db.Model): prop1 = db.StringProperty(false)

  3. 【Query】
  4. コンポジットインデックス ソートもインデックスを使用して検索するので注意。
  5. 【モジュール】
  6. pythonではimportはファイルの先頭に記述するのが定石。しかしこれはappengine的には無駄らしい。 appengineの場合は関数の中で必要なモジュールのみimportする

    #import hoge_utils
    
    def_index(request):
    # ここでimportしたほうがいい
    import hoge_utils
    return hoge_utils.getQuery();
    
    <li>【SDK1.3.1 新機能】</li>
    <li>
             <ol>
    
  7. transaction task queue
  8. transactionalTaskQueue→transactionが成功するとTaskQueueが追加される。 失敗したときはTaskがQueueに追加されない TaskQueueは指定した時刻に起動ができるらしい(ETAを利用すれば・・・)→正確ではないらしい 同時にさばけるのは20らしい
  9. Cursor
  10. pagingに使えそうなイメージ
  11. appstats
  12. RPCのグラフみれたり、どっかでその時点でのコードがみれる memcacheを利用している pythonの作者が作成した
             </ol>
        </li>
    

セッション2 GTX

1エンティティ1トランザクションが制約 複数のエンティティトランザクションを保証する ー>グローバルトランザクション エンティティグループロック??

2相コミット

リソースマネージャー(RDBMS) トランザクションコーディネータ 2つのフェーズに分かれる

コーディネータが準備してくださいというリクエストを送る リソースマネージャーが準備が終了したよっていうリクエストがきた段階でコーディネータが処理を開始する。

いずれにせよ極力エンティティは小さくする BaseTransaction &  LocalTransaction

--通常のDB-- 1ジャーナルの書き出し 2内部コミット 3ロールフォワード ジャーナルの適用 ジャーナルからなにをしなければいけなのか聞き出して適用させる

–GTX– 0ロックの取得 1ジャーナルの書き出し 2内部コミット 3ロールフォワード ジャーナルの適用 ジャーナルからなにをしなければいけなのか聞き出して適用させる 4ロック解除

・自動採番の落とし穴 データストアでは0.1%ぐらいで不整合がおきるらしい サーバ側で1.3.1からリトライしている。 プログラム側でもやっておいた方が安全だよね

・GAEには30秒ルールがある。

・ロックにタイムスタンプがあり 30ありだけどグローバルトランザクションIDがあればまだ解除しない まだジャーナルの書き出し中の場合とか。。。 終われば解除。

・パフォーマンスが最優先。 トランザクションが混在するときは気をつける。 ローカルトランザクションとグローバルトランザクションの混在に気をつける。

感想

まずは、自分のレベルがまだGAEをデプロイした程度でこの勉強会に参加することが 厳しかったものあり、すべてを理解することが難しかったです。内容としても 実際にGAEを業務として行い、その結果として身に付いたプラクティスであったり だとかある制限の中でどれだけ性能を引き出せるかというものでした。

付いていけたかどうかかなり不安なものですが、これから勉強していくにあたって 十分な肥やし?なったのかと思っています。

後、クラウド化されたサービスやアプリはどんどん加速化していくのかなと思いました。

心の中) グリー?がこれだけ研究に研究を重ねているということは、その技術に対してのそれだけの将来性 を見越しているんだろうなーー。

仮にそうなったとしてプログラマやサーバエンジニアは少なからずいままでメソッドやマインドを一新しないと いけないんだろうな。

簡単なところでいうとクラウド化するってことはデータがいろんなところに混在して、データはどんどん いままで以上にLANといったネットワークを超えた通信をしていなかければいけない。だからそういった ことも考慮にいれて実装なり構築なりしていかないいけないのかな。今回話にでていたのがトランザクション の話だったりGAEなりのデータ構造の設計というのそれに相当していたんだと思うぉ。

まぁ将来的に抽象化されるんだろうけどさ・・・・。

僕たちはそろそろかわらねばならないステージに来てるんだろうと思う。

用語とか

BigTable Google File SystemなどのGoogle インフラの上に作られた分散データベース。 複数のテーブル群をまとめる、 Relational DB とは違い、テーブルひとつが論理単位となっている。

参考URL

Kays daddy App EngineのEntitiyGroupを理解しよう Google App EngineでGlobal Transaction Google App Engine入門:Datastore上で「ユニーク制限」を実現する方法