3分でわかる! スループット/TPS/レイテンシーとその関係性

## スループット(Throughput)とレイテンシー(Latency)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/70987be4-81fa-a71c-0dd3-4f18d4530b4b.png)


この2つのことをよく理解することは、バックエンドソフトウェアシステムの容量や性能に関連することを効果的に考え、議論し、計画するために大いに役立ちます。

しかし、この2つの概念に関する古くからの神話は、いまだに根強く残っており、[リトルの法則](https://hitofuri.su-gaku.net/little-j-d)のような明確な理論をもってしても、なかなか払拭することができません。 

そこで、この記事ではイラストを用いて、この2つの概念をより直感的な方法で簡単に説明します。

## スループット(Throughput)とは
「時間あたりの処理能力」
一回の処理でどのぐらいのデータを送ったりできるか、という指標。
高ければ高いほど性能が良いということになる。
ただし、あんまりにも一度にたくさんのデータを送ると、レイテンシー(Latency)が低くなる。

https://e-words.jp/w/%E3%82%B9%E3%83%AB%E3%83%BC%E3%83%97%E3%83%83%E3%83%88.html

## レイテンシー(Latency)とは
「通信の遅延時間」(要求してから応答が返るまでの時間)
数え方は「低い（良い）」か「高い（悪い）」。
Webオンラインシステムやスマホゲームなどは通信の度に何秒も待たされるとものすごいストレスになるので、そういう場合はスループットよりもレイテンシーが重視される。

https://www.idcf.jp/words/latency.html

## TPS(Transaction per second)
システムによって1秒間に完了したトランザクションの数

https://ja.theastrologypage.com/transactions-per-second


## イラストを用いた概念の理解

このイラストでは、水滴がAからBまでの3つのパイプセクションを通過することで、あるトランザクションを表現しています。
パイプセクションは、トランザクションの一部である「プロセス」、または「リソース」と見なすことができます。 システムは6つのフェーズを経て、それぞれのフェーズで**水の流量(スループット)**（T1〜T6で表される）(※Tは、Throughputを指す)が増加する。

**水滴がA地点からB地点に移動するまでの経過時間が、このトランザクションの応答時間または遅延時間(レイテンシー）**（L1〜L6）(※Lは、Latencyを指す)である。 つまり、スループットT1〜T6の6つのフェーズすべてについて、それぞれL1〜L6のLatency（所要時間）に対応する値が存在することになります。

このアニメーションは、概念をより直感的に理解するためのメタファーに過ぎないことに注意してください。

このイラストを見ることで、以下のような結論を導き出すことができます。

### L1 ≈ L2 ≈ L3 while T3 > T2 > T1
![throughput_and_latency_phase1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/7198ae21-bd8e-bed4-ff0b-9410e443dad7.png)
![throughput_and_latency_phase2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/a57dc94a-3fda-1c0b-cd8a-70ec2d5c3645.png)
![throughput_and_latency_phase3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/d50b3406-c8e7-0c35-05c9-2bdf6fe11daf.png)

必要なシステムリソースのいずれもが完全に占有されていない限り、Latencyは、フェーズ１からフェーズ３まで同じように維持されます。 この場合、スループット（TPS、Transactions Per Second）が高いほど、利用可能なリソースをより効率的に使用することができます。

### 平均レイテンシはPhase-4から増加
![throughput_and_latency_phase4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/e39cac3d-d7c3-4819-2f5f-507711d51835.png)

T4のようにスループットがP2の能力を超えた場合、トランザクションはP1のプロセスでP2を待つキューに入れられ、結果として待ち時間が長くなります。

### P2は、このシステムの「ボトルネック」と特定
![throughput_and_latency_phase5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/e9decef1-8c59-81b2-d538-2449c53036b1.png)

なぜなら、P1のフローキャパシティ（またはスループット）がP2のフローキャパシティより大きいからです。また、P2がP3のキャパシティを効率的に処理できないため、システムがビジー状態でもリソースP3はたくさんアイドルすることになる。

### 負荷が高い状態が続くと、"タイムアウト "が発生
![throughput_and_latency_phase6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/88c12724-a865-4a83-dcf5-c1c45c3ce97f.png)

システムのスループット（または負荷）がP2の流量容量（T4～T6）よりも高く、十分に長い時間続くと、AからBへ移動する水が予想以上に時間を要する「タイムアウト」が発生し始める。

### ローカルのキューが満杯になると、トランザクションの呼び出しが即座に失敗
スループットレートがP2のフローキャパシティを超える時間が十分に長いと、Point Aのキューもオーバーフローし、トランザクションは事実上即座に失敗することになる。


## 参考文献
https://www.dnsstuff.com/latency-throughput-bandwidth

https://qiita.com/kkino1985/items/de3e852d9bd8f4deb01c

https://e-words.jp/w/%E3%82%B9%E3%83%AB%E3%83%BC%E3%83%97%E3%83%83%E3%83%88.html

https://www.idcf.jp/words/latency.html

https://ja.theastrologypage.com/transactions-per-second

https://www.linkedin.com/pulse/understand-throughput-tps-latency-relationship-3-minutes-kai-zhou/

https://player.vimeo.com/video/162256326?autoplay=1&loop=1&title=0&byline=0&portrait=0

https://hitofuri.su-gaku.net/little-j-d