マイクロサービス化するならこれを読め!モノタロウのマイクロサービス化と速度向上の秘策 #pyconjp 2016 #pyconjp_201
チュートリアルでも暗黒面とかいうてる……。 > gevent methane.github.io/gevent-tutoria… #pyconjp #pyconjp_201
2016-09-21 11:24:05#pyconjp #pyconjp_201 geventを使うと future1 = gevent.spawn(...) future2 = gevent.spawn(...) . . . などと書けるが、API側に過負荷をかけてしまう→何かしらの制御が必要
2016-09-21 11:24:41#pyconjp #pyconjp_201 geventではsemaphoreというものをつかってコンテキスト内の同時接続数を制限できる。
2016-09-21 11:25:42#pyconjp #pyconjp_201 アプリケーション・サーバーも変更した ・Apache+mod_wsgiを捨てる(geventを使っている例がない) ・gevent.pywsgi.WSGIServerを使用 ・必要に応じWSGIServerを複数プロセス作る
2016-09-21 11:26:55たぶん Apache+mod_wsgi ではなく別にアプリケーションサーバー作っちゃうかな #pyconjp #pyconjp_201
2016-09-21 11:27:27#pyconjp #pyconjp_201 コード自体の変更料は少なく、サーバーとの通信部分、ロジックをgeventに変える、APサーバを変える、等の変更があった
2016-09-21 11:27:55#pyconjp #pyconjp_201 検証1 既存コードとgevent版の検証 pic.twitter.com/y9QBd4JilL
2016-09-21 11:29:20#pyconjp #pyconjp_201 検証2 実環境に近い環境でパフォーマンス比較 同時アクセス数を2,4,8,16...と増加 同時アクセス数8付近が負荷の高い時間帯の1台あたりの同時アクセス数になる pic.twitter.com/35Jzm4u74o
2016-09-21 11:31:26#pyconjp #pyconjp_201 memcachedへの同期IOが問題 python-memcachedが非同期対応 ワーカー全体がレスポンス待ちになる →memcachedのライブラリにもgeventのモンキーパッチを当てる
2016-09-21 11:32:05#pyconjp #pyconjp_201 通常の負荷ではgevent版が勝つ 通常の倍の負荷がかかると現行版が勝つ→CPUバウンドに切り替わる負荷 pic.twitter.com/BLqzuvT7ww
2016-09-21 11:33:29#pyconjp #pyconjp_201 今のビジネス規模であればサイト高速化に貢献 規模拡大時には見直しが必要→非同期IO対応版はCPUを使いすぎる→並列処理のためのロジックを見直す
2016-09-21 11:34:33#pyconjp #pyconjp_201 geventによる非同期IO対応 ・数くないコード変更で非同期IO対応 ・IO待ちの多い環境では有効 ・外部ライブラリの非同期IO対応が必要 ・ブロック箇所を探す必要がある pic.twitter.com/PvxfzGXOjC
2016-09-21 11:37:35#pyconjp #pyconjp_201 全体のまとめ モノタロウはマイクロサービス化を進めている→APIコールが多すぎる 1つ1つの処理時間の短縮 memcached Varnish Cache 複数の処理の並列化→非同期IO gevent 二種類の対応
2016-09-21 11:38:49#pyconjp #pyconjp_201 Q.マイクロサービス化の際にフレームワークの使用は視野になかったのか A.比較した結果独自のものを使うほうがレスポンスが良かった
2016-09-21 11:42:24#pyconjp #pyconjp_201 登壇者:Atsushi Kanayaさん マイクロサービスを利用する側のパフォーマンス向上策 ありがとうございました!! pic.twitter.com/pMFBsUrupc
2016-09-21 11:44:32