app engineと非同期とテストと私

30
App Engineと 非同期とテストと私

Upload: yusuke-muraoka

Post on 24-May-2015

1.336 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: App Engineと非同期とテストと私

App Engineと非同期とテストと私

Page 2: App Engineと非同期とテストと私

おまえ誰よ?

•村岡友介 a.k.a @jbking•プログラマ have to look the job board for food!• App Engine ユーザ• Love asynchronous processing• Love TDD (and also BDD)

Page 3: App Engineと非同期とテストと私

発表の流れ•自己紹介•発表の流れ ← いまここ•今日いいたいこと•非同期処理•非同期処理とテスト•非同期処理とテストと私•まとめ

Page 4: App Engineと非同期とテストと私

今日いいたいこと

• 自己紹介

• 発表の流れ

• 今日いいたいこと ← いまここ

• 非同期処理

• 非同期処理とテスト

• 非同期処理とテストと私

• まとめ

Page 5: App Engineと非同期とテストと私

... even on App Engine.

SeeAsynchronous processing everywhere.

It’s fun.

Page 6: App Engineと非同期とテストと私
Page 7: App Engineと非同期とテストと私

非同期処理

• 自己紹介

• 発表の流れ

• 今日いいたいこと

• 非同期処理 ← いまここ

• 非同期処理とテスト

• 非同期処理とテストと私

• まとめ

Page 8: App Engineと非同期とテストと私

非同期処理使ってますか?

Page 9: App Engineと非同期とテストと私

ですよねー

Page 10: App Engineと非同期とテストと私

非同期IO (Asynchronous I/O) あるいは非ブロッキングIO(non-blocking I/O)とは、入出力の完了を待たずに、システムコールが終了する入出力処理の実装の事である。たとえば、ダイレクト・メモリ・アクセスで動作するファイル操作であれば、メインメモリ上に存在するデータに対してDMA転送を開始しても、ディスク上に転送が終了するまで、数msの待ち時間が必要になる。この間に、コンピュータはマルチタスク処理で多重処理を行うことが出来るが、処理を発行したプロセスやタスクは、処理の完了を待たなくてはならない。しかし非同期IOでは、処理を発行したプロセスやタスクは、入出力処理の完了を待つことなく、自身の処理を進めることが可能になる。したがって、入出力命令を連続して発行することが可能になり、シングルプロセスのプログラムでも、自身の入出力を多重し、複数の入出力処理を同時並行化できる。このため、時間制約の厳しい、リアルタイムオペレーティングシステムの入出力システムコールでは、このタイプの実装が多い。

http://ja.wikipedia.org/wiki/非同期IO

Page 11: App Engineと非同期とテストと私

非同期IO (Asynchronous I/O) あるいは非ブロッキングIO(non-blocking I/O)とは、入出力の完了を待たずに、システムコールが終了する入出力処理の実装の事である。たとえば、ダイレクト・メモリ・アクセスで動作するファイル操作であれば、メインメモリ上に存在するデータに対してDMA転送を開始しても、ディスク上に転送が終了するまで、数msの待ち時間が必要になる。この間に、コンピュータはマルチタスク処理で多重処理を行うことが出来るが、処理を発行したプロセスやタスクは、処理の完了を待たなくてはならない。しかし非同期IOでは、処理を発行したプロセスやタスクは、入出力処理の完了を待つことなく、自身の処理を進めることが可能になる。したがって、入出力命令を連続して発行することが可能になり、シングルプロセスのプログラムでも、自身の入出力を多重し、複数の入出力処理を同時並行化できる。このため、時間制約の厳しい、リアルタイムオペレーティングシステムの入出力システムコールでは、このタイプの実装が多い。

http://ja.wikipedia.org/wiki/非同期IO

CPUを無駄にしない

技術

Page 12: App Engineと非同期とテストと私

•プログラミング言語 Java Script, Ruby, Erlang, Oz, any event driven or multi-(or co-)thread capable language. Also the Python.

•ライブラリ redis, RabbitMQ, 0MQ.

• POSIX select, poll, message queue, pthread, fork, signal.

•ハードウェア Direct Memory Access (DMA), Interrupt ReQuest(IRQ).

Page 13: App Engineと非同期とテストと私

Python

Page 14: App Engineと非同期とテストと私

•言語 ジェネレータ (yield文)

• POSIX os.fork(), subprocess, multiprocessing, threading, select, signal, etc...

•ライブラリ Tornado, Twisted, meinheld, Eventlet, gevent, greenlet, stackless, etc...

Page 15: App Engineと非同期とテストと私

App Engine

Page 16: App Engineと非同期とテストと私

•機能 Task Queue API, Cron.

•ライブラリ deferred.defer().

•制約 フロントエンドとCronのHTTPリクエストは30秒以内に処理が終わらなければならない. タスクは10分以内.

Page 17: App Engineと非同期とテストと私

非同期処理とテスト

• 自己紹介

• 発表の流れ

• 今日いいたいこと

• 非同期処理

• 非同期処理とテスト ← いまここ

• 非同期処理とテストと私

• まとめ

Page 18: App Engineと非同期とテストと私

Python

Page 19: App Engineと非同期とテストと私

•そもそも 外界との通信による待ちを減らす技術なのでテストしづらい.

•ユニットテスト 通信部分にパッチ.

•ファンクショナルテスト 通信先をエミュレート.

•フレームワーク Twisted Trial.

•パッチ geventとかは標準APIにパッチあてるので差を気にする必要がない.

Page 20: App Engineと非同期とテストと私

App Engine

Page 21: App Engineと非同期とテストと私

タイプ 開発環境

本番環境 非同期

NoseGAE Runner ○GAETestBase UnitTest ○ ○

GAE Unit Runner ○ ○

GAE Testbed UnitTest ○ ○

Page 22: App Engineと非同期とテストと私

非同期処理とテストと私

• 自己紹介

• 発表の流れ

• 今日いいたいこと

• 非同期処理

• 非同期処理とテスト

• 非同期処理とテストと私 ← いまここ

• まとめ

Page 23: App Engineと非同期とテストと私

App Engineと非同期とテストと私

Page 24: App Engineと非同期とテストと私

My products

Page 25: App Engineと非同期とテストと私

GAE Deferred• TwistedのDeferredのようなもの• DeferredList• 並列実行されてる非同期処理が全て終了したら, キャッシュ更新とか.

• http://pypi.python.org/pypi/gaedeferred/

• http://blog.jbking.org/2011/01/gaedeferred-021.html

Page 26: App Engineと非同期とテストと私

GAE Storyタイプ 開発

環境本番環境 非同期

NoseGAE Runner ○GAETestBase UnitTest ○ ○

GAE Unit Runner ○ ○

GAE Testbed UnitTest ○ ○

GAE Story Runner ○ ○ ○

Page 27: App Engineと非同期とテストと私

タイプ 開発環境

本番環境 非同期

NoseGAE Runner ○GAETestBase UnitTest ○ ○

GAE Unit Runner ○ ○

GAE Testbed UnitTest ○ ○

GAE Story Runner ○ ○ ○

GAE Story

Under

designi

ng

Page 28: App Engineと非同期とテストと私

まとめ

• 自己紹介

• 発表の流れ

• 今日いいたいこと

• 非同期処理

• 非同期処理とテスト

• 非同期処理とテストと私

• まとめ ← さいご!

Page 29: App Engineと非同期とテストと私

... Use the Force for Hacking!

SeeAsynchronous processing everywhere.

It’s fun.

Page 30: App Engineと非同期とテストと私

Thanks! :^)