OIDC ・ ・ は接続先の例 A B C 基盤ごとに別のRailsアプリ 認証アダプター A 接続先のID基盤 アーティストAのID基盤 認証アダプター B 今回のFalcon移行対象 認証アダプター C 事務所BのID基盤 ID 接続先の方式・情報APIに対応 独自認証・独自API 別の認証方式・情報API アーティストCのID基盤 接続先の方式・情報APIに対応 必要情報は固有API 認証方式・情報API・応答時間の違いを、各アダプターで扱う 認証アダプターを分離し、遅い外部APIの影響が本体に広がるのを抑える。 01 · サービスと負荷 7
2 Ruby 0 2 A B A 処理 4 C 6 外部API待ち D 8 E 10 12 14 時間 →(単位は模式的) 16 18 22 : 待ち A C C:API待ち C E E:API待ち B B:API待ち B D D:API待ち D C:空き枠待ち D:空き枠待ち E:空き枠待ち A API 待ち行列 C 待ち行列 D 待ち行列 E Rubyの実行 A B A C B D C E D I/O待ちは重ねられる。RubyのCPU処理は、GVLにより一度に1スレッド。 スレッド上限は、メモリ・応答時間・接続数を負荷試験で確かめて決める。 02 · 並行処理とFalcon 20 24 E E 12
Fiber C Fiber D Fiber E Ruby 0 2 A B A 処理 4 C 6 外部API待ち D 8 E 10 12 14 : 待ち A B B:API待ち B C C:API待ち C D D:API待ち D E E:API待ち 時間 →(単位は模式的) 16 18 20 22 24 A API E 同じスレッド A B C D A E B C D E Fiberで待ちを重ねる。ただし、受付数・上流への同時接続数は別途制御する。 02 · 並行処理とFalcon 13