マイクロサービス化するならこれを読め!モノタロウのマイクロサービス化と速度向上の秘策 #pyconjp 2016 #pyconjp_201

マイクロサービスを利用する側のパフォーマンス向上策 Atsushi Kanaya マイクロサービスを利用する側として処理速度を向上するために、非同期IOやmultiprocessingを使った場合の事例を紹介します。 続きを読む
2
られ @rarewin

チュートリアルでも暗黒面とかいうてる……。 > gevent methane.github.io/gevent-tutoria… #pyconjp #pyconjp_201

2016-09-21 11:24:05
トゥギャッター開発まとめ @tg__dev

#pyconjp #pyconjp_201 geventを使うと future1 = gevent.spawn(...) future2 = gevent.spawn(...) . . . などと書けるが、API側に過負荷をかけてしまう→何かしらの制御が必要

2016-09-21 11:24:41
トゥギャッター開発まとめ @tg__dev

#pyconjp #pyconjp_201 geventではsemaphoreというものをつかってコンテキスト内の同時接続数を制限できる。

2016-09-21 11:25:42
トゥギャッター開発まとめ @tg__dev

#pyconjp #pyconjp_201 アプリケーション・サーバーも変更した ・Apache+mod_wsgiを捨てる(geventを使っている例がない) ・gevent.pywsgi.WSGIServerを使用 ・必要に応じWSGIServerを複数プロセス作る

2016-09-21 11:26:55
られ @rarewin

ところで、黒魔術使う発表が Lv1 なのかどうかという疑問が……。 #pyconjp #pyconjp_201

2016-09-21 11:27:16
NAKAMURA, Tomohiro @tomoh1r

たぶん Apache+mod_wsgi ではなく別にアプリケーションサーバー作っちゃうかな #pyconjp #pyconjp_201

2016-09-21 11:27:27
トゥギャッター開発まとめ @tg__dev

#pyconjp #pyconjp_201 コード自体の変更料は少なく、サーバーとの通信部分、ロジックをgeventに変える、APサーバを変える、等の変更があった

2016-09-21 11:27:55
トゥギャッター開発まとめ @tg__dev

#pyconjp #pyconjp_201 検証2 実環境に近い環境でパフォーマンス比較 同時アクセス数を2,4,8,16...と増加 同時アクセス数8付近が負荷の高い時間帯の1台あたりの同時アクセス数になる pic.twitter.com/35Jzm4u74o

2016-09-21 11:31:26
拡大
kzfm @fmkz___

キャッシュも非同期対応させなあかんのか… #pyconjp_201

2016-09-21 11:31:52
トゥギャッター開発まとめ @tg__dev

#pyconjp #pyconjp_201 memcachedへの同期IOが問題 python-memcachedが非同期対応 ワーカー全体がレスポンス待ちになる →memcachedのライブラリにもgeventのモンキーパッチを当てる

2016-09-21 11:32:05
られ @rarewin

memcachedのライブラリにも黒魔術。 #pyconjp #pyconjp_201

2016-09-21 11:32:33
NAKAMURA, Tomohiro @tomoh1r

構成のリファクタリングの話、とても面白い #pyconjp #pyconjp_201

2016-09-21 11:33:23
トゥギャッター開発まとめ @tg__dev

#pyconjp #pyconjp_201 通常の負荷ではgevent版が勝つ 通常の倍の負荷がかかると現行版が勝つ→CPUバウンドに切り替わる負荷 pic.twitter.com/BLqzuvT7ww

2016-09-21 11:33:29
拡大
トゥギャッター開発まとめ @tg__dev

#pyconjp #pyconjp_201 今のビジネス規模であればサイト高速化に貢献 規模拡大時には見直しが必要→非同期IO対応版はCPUを使いすぎる→並列処理のためのロジックを見直す

2016-09-21 11:34:33
トゥギャッター開発まとめ @tg__dev

#pyconjp #pyconjp_201 独自フレームワークを捨てることまで視野に入れて考える必要がある

2016-09-21 11:35:06
Hiroshi Sano @hrs_sano645

独自フレームワークがちょっときになる #pyconjp #pyconjp_201

2016-09-21 11:35:12
トゥギャッター開発まとめ @tg__dev

#pyconjp #pyconjp_201 geventによる非同期IO対応 ・数くないコード変更で非同期IO対応 ・IO待ちの多い環境では有効 ・外部ライブラリの非同期IO対応が必要 ・ブロック箇所を探す必要がある pic.twitter.com/PvxfzGXOjC

2016-09-21 11:37:35
拡大
NAKAMURA, Tomohiro @tomoh1r

マイクロサービス化が本当に良かったのかな。 #pyconjp #pyconjp_201

2016-09-21 11:38:04
トゥギャッター開発まとめ @tg__dev

#pyconjp #pyconjp_201 全体のまとめ モノタロウはマイクロサービス化を進めている→APIコールが多すぎる 1つ1つの処理時間の短縮  memcached Varnish Cache 複数の処理の並列化→非同期IO gevent 二種類の対応

2016-09-21 11:38:49
トゥギャッター開発まとめ @tg__dev

#pyconjp #pyconjp_201 Q.マイクロサービス化の際にフレームワークの使用は視野になかったのか A.比較した結果独自のものを使うほうがレスポンスが良かった

2016-09-21 11:42:24
トゥギャッター開発まとめ @tg__dev

#pyconjp #pyconjp_201 登壇者:Atsushi Kanayaさん マイクロサービスを利用する側のパフォーマンス向上策 ありがとうございました!! pic.twitter.com/pMFBsUrupc

2016-09-21 11:44:32
拡大
拡大