Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

写真共有アプリのバックエンドサーバー

5,780 views

Published on

apppengine ja night #21 の資料です。

Published in: Technology
  • こちら写真のアップロードをGAEにしたのは何か意味がありますでしょうか?
    EC2内にEBSをマウントしそこにアップロードするより、パフォーマンス面等でメリットがありますでしょうか?
    よろしくお願いします。
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

写真共有アプリのバックエンドサーバー

  1. 1. 写真共有アプリのバックエンドサーバー appengine ja night #21 BeerTalk
  2. 2. お前、誰よ?● 岡野真也(twitter: @tokibito) ○ 株式会社ビープラウド ■ 受託開発 ■ Python ■ Django ■ GoogleAppEngine
  3. 3. 事例紹介: 写真共有アプリ Cotto● http://cotto.jp● 株式会社バスキュール号● サーバー側の開発をビープラウドがお手伝いし ました
  4. 4. http://cotto.jp/
  5. 5. アプリの概要● Android用アプリケーション● mixi/Twitter/facebookアカウントでログイン● 写真をデコってタイムラインに投稿● フォローしたユーザーの写真をタイムラインで見 れる● チェック、コメント● テーマごとに投稿された画像を見れる
  6. 6. システム構成● Android 2.3以上● GoogleAppEngine/Python 2.7● EC2(静的コンテンツの配信)
  7. 7. システムのイメージ
  8. 8. 開発で気を使った所● twitter/mixi/facebook認証● 画像データの保存と配信● タイムライン処理● 管理画面
  9. 9. twitter/mixi/facebook認証● サーバー側からSNSへ投稿する必要がある● サーバー側でソーシャルグラフを取得する必要 がある● クライアント-サーバー間の認証も必要 →WebViewでごにょごにょしてます
  10. 10. 認証フロー
  11. 11. 画像の保存と配信● 相互フォローの相手にしか見せない画像がある ○ →画像の取得には認証が必要● 論理削除がある● 画像主体のため、画像データへのアクセスが多 い →Frontendによるキャッシュ →memcacheの活用
  12. 12. Frontendキャッシュ有り(全体に公開する画像)Frontendキャッシュ無し(友達のみに公開する画像)
  13. 13. タイムライン処理● いわゆるTwitterみたいなタイムライン+α ○ facebookに近い● フォローしている人の投稿が見れる ○ 友達のみなら相互フォローの判定あり ○ 例えばフォロワーが1000人いたら、1000人のタイムライン に投稿画像が流れる ■ DatastoreはJOIN不可なのでクエリで取得は無理● フォローしている人がチェックしたものが見れる →taskqueue利用 →backends利用
  14. 14. 管理画面● GAEの管理コンソールではデータの追加削除 が難しい ○ 変更時にフックして処理を行なうこともできない ■ キャッシュ削除や配信処理など● 運用のためのツールが必要 ○ 各種データ投入や設定など →djangoformsを使って管理画面を 作った
  15. 15. その他● unittest書いてます● チューニング ○ 一括取得/一括更新 ■ db.get/db.put ○ 可能な限りmemcacheを使ってます ■ get_multi/set_multi● 時間のかかる処理は継続タスクで処理 ○ バッチ処理でも通常は1リクエストあたりで10秒以内にレ スポンスを返すようにしている ■ 続きの処理は別のタスクにする ■ エラー/中断時の最実行の単位を小さくするため
  16. 16. 宣伝 Python プロフェッショナル プログラミング 秀和システム 464ページ 2,940円 買ってね!
  17. 17. おしまい

×