サーバサイジング

CPUの考え方は参考になる。
300PV/100秒 → 3tpsというざっくり見積でもいいのだろうが、この場合は1PV(リクエスト)処理につき1秒かかるという前提になっているので、もし厳密にやるのであればリンク先のように、1リクエストあたりにかかったCPU時間をベースにしたいところ。

メモリはジャブジャブ。
実機検証を踏まえて、性能限界を迎えた時のメモリ使用量を確保する。
※ Javaなら、ヒープで確保している最大領域が2MBとすると、1TPSあたりは2MB/1000TPSで算出といったどこかで使うかもしれない値も計算可能
(社内ノウハウなのでリンクなし)

単語帳
スループット:1秒あたりに処理可能なトランザクション量
tps:スループットの単位
pv数:ページビュー数。特定のページがアクセスされた回数を示す。必ずログイン画面を経由するようなサービスならば、リクエスト数≒PV数とカウント

参考資料群(後で読む。読んで不要なら削る。)
-
脱線するがスケールアップとスケールアウトは適切な使い方を考慮した方が良さそう。OLTPと呼ばれるトランザクションデータをリアルタイムで更新するような処理の場合はスケールアップが向いている。主にDBであり、WEB/APサーバはスケールアウトでもよい。DBは同じ筐体のメモリ内をベースに処理した方が処理の矛盾や遅延なく処理できるというメリットがある。並列処理が可能かどうかで、どちらを使うかは変わる。
-
検証は大事。検証時のサーバスペックは最小構成がオススメ。
-
以下の記述はインプットとして大事。1秒あたりのリクエストをTPSで割ると必要なコア数もわかってくる。
Web/APサーバーの台数については、利用ユーザー数の何%が1秒の間に同時に操作するかを想定して標準スペックおよび構成を用意しておくとよいと思います。
例えば、1000名利用想定で、利用ユーザー数の最大5%が秒間同時アクセスする想定の場合、秒間50リクエストを捌く事ができる処理性能が必要になります。
-
DBの見積の場合はキャッシュも考慮した方がよい。
-
以下もなるほどと。SGAなのでOracleベースの考え方。
一般的には、DBサーバーの処理がボトルネックになっていない場合、Web/APサーバーの台数を増やす事で、スループットも2倍程度になります。DBサーバーでの処理がボトルネックになりやすいシステムでは、Web/APサーバーの台数を増やしても、かえってDBサーバーの負荷が高くなり、システム全体のパフォーマンスが落ちてしまいます。Web/APサーバーの台数を増やすより、DBサーバーのメモリとSGAを増やした方が、パフォーマンスがよくなる可能性がある
以下の記事も、時間帯の集中とかを考慮しているので良さそう。

TPS(Transactions Per Second)とRPS(Requests Per Second)は、それぞれ異なる文脈で使用される単位です。どちらが正しいかは、使用するコンテキストに依存します。
TPS(Transactions Per Second):
用途: 主にデータベースやトランザクショナルなシステムにおいて使用されます。トランザクションは、データベースへの読み込みや書き込みなどのアクションを指します。TPSは、1秒間に処理されるトランザクションの数を表します。
RPS(Requests Per Second):
用途: 主にウェブサーバーやAPI、ネットワーク通信などで使用されます。リクエストは、クライアントからの要求を指し、これはウェブページの読み込み、API呼び出し、ファイルのダウンロードなど、様々な形態を取ります。RPSは、1秒間に処理されるリクエストの数を表します。
使い分け:
システムが主にデータベーストランザクションに関連している場合、TPSが適しています。
システムが主にウェブサービスやAPIのリクエストに関連している場合、RPSが適しています。
具体的なシナリオや業界の慣習によっても異なる場合があります。ただし、一般的には上記のような使い分けが行われます。

リクエスト(Request)とトランザクション(Transaction)は、異なるコンセプトであり、それぞれ異なる文脈で使用されます。
リクエスト(Request):
リクエストは、通常、クライアントがサーバーに対して行う要求や要請を指します。
ウェブ開発やネットワーク通信のコンテキストでは、クライアントがサーバーに対して送るHTTPリクエスト(GET、POSTなど)が一般的です。これは、ウェブページの読み込み、API呼び出し、画像のダウンロードなどが該当します。
リクエストは、通信の開始点で、サーバーはこれに対して適切な応答(レスポンス)を返します。
トランザクション(Transaction):
トランザクションは、通常、データベースや情報システムにおいて、アトミック性、整合性、独立性、永続性(ACID)の原則を満たす操作のまとまりを指します。
データベーストランザクションは、データベースにおける一連のデータ操作(挿入、更新、削除など)を指し、これらの操作は一貫してデータベースに適用される必要があります。
トランザクションは、成功するか失敗するかのいずれかで完了し、成功の場合は変更が確定され、失敗の場合は変更がロールバックされます。
要するに、リクエストは通信における要求であり、トランザクションはデータベースや情報システムにおける操作のまとまりです。リクエストは通常、サービスやアプリケーションの外部とのやり取りを指し、トランザクションはデータの一貫性を保つために行われる内部の処理を指します。

コアとクロックどちらが性能に影響するのか。
8コア1GHZと2コア4GHZだと同じスレッドさばけそうだが…2コア4GHZの方が性能は良いとのこと。
4core1GHZと2core2GHZだとスレッドとしては同じそうだが、スレッドに待ち時間が大きくなると、次の処理に着手できないのでレスポンスタイムは向上しがちになる。
そのため、マルチスレッド化に対応しているアプリであれば、マルチスレッド化するのがパフォーマンスにはよいのだろうと思う。
Load Testing使って検証だと、1スレッド(1CPU)での待ち時間が長いと次の処理も待たされることになり、レスポンスタイムが長くなり、スループットも落ちるという感じになっていたと思われる。
スレッドはアプリの処理をより細かくしたもの。1CPUが1アプリに独占されるわけではない。各アプリの細切れになった処理(スレッド)を逐次処理していく。
以下はchatGPTの回答をメモ代わりに残しておく。
CPUの4コア1スレッドと、2コア2スレッドだと処理性能としては同じですか?
ChatGPT
4コア1スレッドのCPUと2コア2スレッドのCPUは、物理的なコア数やスレッド数が異なるため、一概に同じ性能ではありません。以下にそれぞれの特徴を説明します。
4コア1スレッドのCPU:
4つの物理的なコアがあり、各コアは1つのスレッドしか同時に処理できません。これはシングルスレッドの処理性能が4つありますが、同時に処理できるスレッド数は4本までです。
2コア2スレッドのCPU:
2つの物理的なコアがあり、各コアは同時に2つのスレッドを処理できる仕組みを持っています。これにより、合計で4つのスレッドを同時に処理できます。
物理的なコア数やスレッド数だけでなく、アーキテクチャ、クロック速度、キャッシュサイズ、その他の特徴も性能に影響を与えます。したがって、同じ性能かどうかを判断するには、具体的なモデルやベンチマーク結果を比較する必要があります。
一般的に、多くのアプリケーションはマルチスレッド処理を活用できる場合があります。そのため、2コア2スレッドのCPUが4コア1スレッドのCPUよりも優れた性能を発揮することがあるかもしれませんが、具体的な使用ケースやタスクによります。
→ 4core1GHZと2core2GHZでどっちがいいかは、アプリケーションの特性によって決定するのが良さそうということか。ビシッとどっちがいいという話ではないと。
全体のスループットとしては向上するが、決して1つ1つのスレッドの処理時間が短縮されるというわけではなさそう。ただしシングルスレッドだと、直列処理になるので、待たされると、サイジングの時の1リクエスト当たりのレスポンス時間は伸びるけれど、CPUとしての処理時間は変わらないということかな。