はじめに
fargateで複数のコンテナ間通信が発生する場合fargate間のレスポンスタイムがどのくらいかかるのか気になったので参考までに測定してみたメモ。
構成
比較用に同一タスク上に複数コンテナ(サイドカー)を構築した場合と別タスクからELB経由でアクセスした際で比較を行った。

計測条件
別タスクのコンテナからELB経由でAPI Serverにアクセスした場合と、
同一タスクのコンテナからlocalhostでAPI Serverにアクセスした場合を
下記curlで測定した(localhostの場合のコマンド例)。
curl -kL -s -o /dev/null -w "%{time_total}\n" http://127.0.0.1/api
 ここでは
 ここでは time_total をレスポンスタイムとする
またそれぞれのコンテナ内で lscpu を見たところ別ものだったため別インスタンス上に配置されているものとする。
計測結果
10回測定し最速と最遅を切り捨て8回の平均値とする。
| 別タスク | 同一タスク | |
|---|---|---|
| 1 | 2 | |
| 2 | ||
| 3 | 8 | 2 | 
| 4 | 9 | 2 | 
| 5 | 8 | 2 | 
| 6 | 8 | |
| 7 | 9 | 1 | 
| 8 | 8 | 2 | 
| 9 | 9 | 1 | 
| 10 | 8 | 1 | 
| Ave. | 8.4 | 1.6 | 
(msec)
別タスクにすることで2者間の差である 6.8msec が乗ってくることになる。
スループット
同様に大きめのペイロードサイズ(100MB弱)を転送するときのスループットについても計測
| 別タスク | 同一タスク | |
|---|---|---|
| 1 | ||
| 2 | 3,611 | 379 | 
| 3 | 4,484 | 377 | 
| 4 | 2,925 | 380 | 
| 5 | 3,865 | 353 | 
| 6 | 4,205 | 353 | 
| 7 | 359 | |
| 8 | 3,944 | |
| 9 | 3,325 | 363 | 
| 10 | 4,353 | 358 | 
| Ave. | 3,839 | 365 | 
(msec)
2者間の差とペイロードサイズ(88,099,412byte)から 約200Mbps 程度と推定される
まとめ
このレイテンシーが許容されるのか否かで同一タスク上に構成すべきか検討材料になるであろう。
ただしスケールさせる場合はタスク単位となるためトレードオフである。
また本計測値はfargateのvCPUタイプやその他構成など条件によって変わってくるため参考値程度にとどめておく。
