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

Post on 24-May-2015

1.336 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

おまえ誰よ?

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

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

今日いいたいこと

• 自己紹介

• 発表の流れ

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

• 非同期処理

• 非同期処理とテスト

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

• まとめ

... even on App Engine.

SeeAsynchronous processing everywhere.

It’s fun.

非同期処理

• 自己紹介

• 発表の流れ

• 今日いいたいこと

• 非同期処理 ← いまここ

• 非同期処理とテスト

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

• まとめ

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

ですよねー

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

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

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

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

CPUを無駄にしない

技術

•プログラミング言語 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).

Python

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

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

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

App Engine

•機能 Task Queue API, Cron.

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

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

非同期処理とテスト

• 自己紹介

• 発表の流れ

• 今日いいたいこと

• 非同期処理

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

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

• まとめ

Python

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

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

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

•フレームワーク Twisted Trial.

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

App Engine

タイプ 開発環境

本番環境 非同期

NoseGAE Runner ○GAETestBase UnitTest ○ ○

GAE Unit Runner ○ ○

GAE Testbed UnitTest ○ ○

非同期処理とテストと私

• 自己紹介

• 発表の流れ

• 今日いいたいこと

• 非同期処理

• 非同期処理とテスト

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

• まとめ

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

My products

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

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

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

GAE Storyタイプ 開発

環境本番環境 非同期

NoseGAE Runner ○GAETestBase UnitTest ○ ○

GAE Unit Runner ○ ○

GAE Testbed UnitTest ○ ○

GAE Story Runner ○ ○ ○

タイプ 開発環境

本番環境 非同期

NoseGAE Runner ○GAETestBase UnitTest ○ ○

GAE Unit Runner ○ ○

GAE Testbed UnitTest ○ ○

GAE Story Runner ○ ○ ○

GAE Story

Under

designi

ng

まとめ

• 自己紹介

• 発表の流れ

• 今日いいたいこと

• 非同期処理

• 非同期処理とテスト

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

• まとめ ← さいご!

... Use the Force for Hacking!

SeeAsynchronous processing everywhere.

It’s fun.

Thanks! :^)

top related