ActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~...
-
Upload
koichiro-sumi -
Category
Software
-
view
421 -
download
1
Transcript of ActiveResourceモデルによるAPIの隠蔽の怖い話~レスポンスタイムへの致命的影響~...
[Confidential] © 2013 Actcat, Inc. 1
モデルによるAPIの隠蔽の怖い話 ~レスポンスタイムへの致命的影響~
[Confidential] © 2013 Actcat, Inc.
SideCIとは
n 継続的コードレビューサービス
n コードを自動的に解析、問題を発見、 改善を促します
n Ruby, PHPなどで開発されている プロジェクトで利用できます
2
[Confidential] © 2013 Actcat, Inc.
SideCIのご利用イメージ 1/2
3
GitHub PullRequest 上の問題のあるコードに 自動で問題点をコメントします
[Confidential] © 2013 Actcat, Inc.
SideCIのご利用イメージ 2/2
4
コードに含まれる全ての問題点は SideCIの画面上で閲覧出来ます
[Confidential] © 2013 Actcat, Inc.
SideCIのアーキテクチャ(2015/06) 8種類以上のサーバが…
n Frontend(API+Frontend+Job) n ツール毎サーバ
l RaislBestPractices(API+Job) l Brakeman(API+Job) l Bundler(API+Job)
n + 新しいアーキテクチャのサーバ l Job 処理サーバ(using docker) l Job 管理サーバ
5
[Confidential] © 2013 Actcat, Inc.
SideCIのアーキテクチャの歴史(の一部) サーバ構成を4回以上変えた
n 2014/04/30 l ベータ版リリース l Heroku でサービス提供 l 解析処理は解析ツール毎のサーバで
n 2014/夏 l AWSにjob処理部分を移行
n 2015/03 l アーキテクチャ全面見直し l 解析処理をどの解析ツールでも同じサーバ内でdockerを用いて実施するタイプを追加
n 2015/07 l 解析ツール毎のサーバを全台廃止
6
[Confidential] © 2013 Actcat, Inc. 7
ベータ版リリース当初アーキテクチャ
[Confidential] © 2013 Actcat, Inc.
マイクロサービスアーキテクチャ
8
www Frontend + API + Job
Brakeman API + Job
Rails Best Practices API + Job
Bundler API + Job
[Confidential] © 2013 Actcat, Inc.
ログイン後トップページの表示時APIコール
9
レポジトリの数だけ GitHubにAPIリクエスト
ブランチのリストAPI呼出
僕は誰?User api呼出 ここらへんはDBに保存・表示してた
[Confidential] © 2013 Actcat, Inc.
解析結果表示ページのAPIコール
10
このページはbrakeman専用サーバにAPIリクエスト、結果を表示
3サーバに同時にAPIリクエスト。 結果が3つ揃うと表示する。
(Brakeman, bundler, rails_best_practicesの3サーバ)
[Confidential] © 2013 Actcat, Inc.
問題が 発生したぽよ
11
[Confidential] © 2013 Actcat, Inc.
ログイン後トップページ
12
表示にかかる時間が15秒を 超えてしまうユーザ多数
Herokuのtimeoutが頻発
[Confidential] © 2013 Actcat, Inc.
実は各ツールが頻繁にwwwを呼び出す仕様。 wwwがボトルネックに。一回金パワーした
13
www Frontend + API + Job
Brakeman API + Job
Rails Best Practices API + Job
Bundler API + Job
PX Dyno
[Confidential] © 2013 Actcat, Inc.
解析結果ページ表示も timeoutしたのでこっちも金パワーした
14
www Frontend + API + Job
Brakeman API + Job
Rails Best Practices API + Job
Bundler API + Job
2x Dyno
2x Dyno
2x Dyno
[Confidential] © 2013 Actcat, Inc.
(お金ないけど)
15
[Confidential] © 2013 Actcat, Inc.
GitHubのAPI呼び出し回数が ボトルネックで、timeout頻発
16
www Frontend + API + Job
Brakeman API + Job
Rails Best Practices API + Job
Bundler API + Job
[Confidential] © 2013 Actcat, Inc.
金パワーの限界
17
[Confidential] © 2013 Actcat, Inc. 18
実装変更
[Confidential] © 2013 Actcat, Inc.
ログイン後トップページの表示時APIコール
19
ここはRedisキャッシュで なんとか
DBにデータ突っ込み
[Confidential] © 2013 Actcat, Inc.
各サーバがRedisでキャッシュ
20
www Frontend + API + Job
Brakeman API + Job
Rails Best Practices API + Job
Bundler API + Job
Redis Cache Redis Cache SideCI API Result Redis Cache
一部 Redis Cache
[Confidential] © 2013 Actcat, Inc.
なんとか動くように なったけど…
21
[Confidential] © 2013 Actcat, Inc.
つぎはぎの対応ばかり。 全体的に無駄・無理が多い
22
[Confidential] © 2013 Actcat, Inc.
結論: マイクロサービス
アーキテクチャは辞めて 新しいアーキテクチャで再実装
23
[Confidential] © 2013 Actcat, Inc. 24
原因分析
[Confidential] © 2013 Actcat, Inc.
なぜこんなことが 起こったか?
25
[Confidential] © 2013 Actcat, Inc. 26
www Frontend + API + Job
Brakeman API + Job
Rails Best Practices API + Job
Bundler API + Job
APIのリクエストが多すぎた
[Confidential] © 2013 Actcat, Inc.
なぜこんなに APIリクエストが 多かったのか?
27
[Confidential] © 2013 Actcat, Inc. 28
www Frontend + API + Job
Brakeman API + Job
Rails Best Practices API + Job
Bundler API + Job
各サーバにとって必要な情報が、 他のサーバの管轄だった。 各サーバは管轄サーバに
APIで問い合わせるしかなかった
[Confidential] © 2013 Actcat, Inc.
なんでこんな面倒な 設計で実装が出来たのか?
29
[Confidential] © 2013 Actcat, Inc.
なんでこんな面倒な 設計で実装が出来たのか?
30
[Confidential] © 2013 Actcat, Inc.
ActiveResource 超便利!
31
[Confidential] © 2013 Actcat, Inc.
さもDBに入っている データであるかのように、 APIのデータを使ってた。
32
[Confidential] © 2013 Actcat, Inc.
惜しげも無く APIリクエスト
33
[Confidential] © 2013 Actcat, Inc.
APIリクエストである認識がそもそもなかった
34
[Confidential] © 2013 Actcat, Inc. 35
ここまでのまとめ
[Confidential] © 2013 Actcat, Inc.
ActiveResouceはAPIだ!
n APIは隠蔽してもAPIだ(当たり前だ!
n Cache Resourceで多少問題回避出来たが、Cacheの管理のほうが大変になる。
n 隠蔽していても、APIだという認識で設計、実装が不可欠
36
[Confidential] © 2013 Actcat, Inc. 37
ちなみに現在
[Confidential] © 2013 Actcat, Inc.
各ツール毎のサーバを廃止。APIの集約廃止。 必要なデータはJob Enqueue時に付与
38
www Frontend + (API) + Job
Job管理 サーバ
Job実施 サーバ
必要なデータが入ったリクエストで
Enqueue
[Confidential] © 2013 Actcat, Inc. 39
SIDECIの宣伝
[Confidential] © 2013 Actcat, Inc.
開発メンバー募集中です
n アーキテクチャ綺麗になりました
n スケーラブルなアーキテクチャです
n 開発メンバー募集中です!
40
[Confidential] © 2013 Actcat, Inc. 41
もしまだ使ったことない方ぜひ。 設定は30秒で終わります。
Just nowでSign Upして貰えると嬉しいです https://www.sideci.com/