0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

request per second について考えてみた

Last updated at Posted at 2024-01-14

ほぼ独り言に近いです。間違ってたら指摘してください。

前提

システムデザインの面接を受けていたとする。
ここで、このサービスはトラフィックのスパイクがあります、と言われたとする。

何を考えて何と答えますか?という話。

考え方

具体的に 何request per secですか?と尋ね、「500 rpsです」と答えられたとする。
が、それを聞いても(面接の場では)どうしようもない。

ボトルネックを考えることが大事なのじゃないかと思う。
ボトルネックとなりうる可能性を示唆して、解決方法を提示すればいいと思う。

  • web server -> DNS + LB + autoscaling で解決できそう。
  • app server の CPU 処理 -> 同じく、DNS + LB + autoscaling で解決できそう。
  • RDB の読み込み -> read replicaで解決できそう。
  • RDB の書き込み -> mutli-master 構成や、shardingで解決できそう。(ただし、complexityは増す。)

となると、DB「read heavy か write heavy か」は聞く/考える必要がありそう。

以下をもとに考えると、RDBへのwriteが一番のボトルネックになるのかも、と思った。

数字の勘

具体的な数字を聞いても仕方ない、とは言ったものの、具体的な数字のイメージを持つのは大事そう。

app server

app server の CPU 処理に関しては、CPU usage 10% で 100ms かかるリクエスト (これが現実的な数字かはわからない) があるとする。これを8コアのサーバー1台で裁くとすると、rpsは、

10 * 10 * 8 * 1 = 800 rps。

オートスケーリングするならこれに台数をかけたものになる。結構捌けるのだなという感想。

いや、よく考えると、

CPU usage 10% で 100ms かかる

これは、処理の重さとCPUの性能に依存して決まる数字なので、前提がガバガバな気がしてきた。

RDB

PostgreSQLで考えてみる。以下に依存するはず。

  • ハードウェアのスペック
  • 現在のテーブルサイズ。とはいえ、処理時間はO(N)なので、影響は大きくないのかも。
  • indexの個数。readは早くなり、writeは遅くなる。(indexの更新は非同期でもできるんだっけ?)
  • レプリケーションの数。readは早くなり、writeは遅くなる。(ただし、replicationを非同期にやればwriteへの影響は軽微。)
  • トランザクションのレベル。(最低レベルにすると、結構捌けるのかも。read/writeリクエストのそれぞれが、非同期に読み書きすればいいので。)

具体的な数字はわからなかったが、ネットでググると、PostgreSQLで、read queryを 20k/secとか、600k/secとか捌いたとかいう武勇伝が出てくる。本当なのだろうか。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?