垂直スケーリングは、マシンの1秒あたりのリクエスト処理能力を向上させます。Node.jsのようなシングルスレッド言語では、垂直スケーリングは主にメモリとストレージを強化し、処理能力はそれほど向上しません。Node.jsで計算集約型のタスクを実行するには、クラスタモジュールとワーカスレッドが必要です。Rust、Go、Javaなどのマルチスレッド言語は、複数のコアを利用できるため、垂直スケーリングからより大きな恩恵を受けます。キャパシティ推定には、サーバーのニーズの計算、トラフィックスパイクの処理、サービスレベルアグリーメント(SLA)の達成が含まれます。オートスケーリンググループは、CPU使用率などのメトリックに基づいてサーバーインスタンスを動的に調整します。チェスアプリなどでの永続的な接続では、ダウンサイジング中の切断を管理するために、慎重なスケーリングが必要です。アプリケーションによってスケーリング戦略は異なり、Replitはウォームプールを使用し、YouTubeはキューベースのアプローチを採用しています。SLAはパフォーマンスの期待値と可用性を定義し、計算によって許容できるダウンタイムが決定されます。水平スケーリングは、負荷の増加に対応するためにインスタンスを追加し、多くの場合、オートスケーリンググループやコンテナ化を使用します。重要な用語には、ロードバランサー、AMI、ターゲットグループ、起動テンプレート、SSH、インバウンドルールなどがあります。データベースのインデックス作成は、Bツリーなどのデータ構造を使用して読み取り操作を高速化しますが、書き込み操作を遅くします。データベースの正規化は、テーブルをさまざまな正規形(1NF、2NF、3NF、BCNFなど)に分解することでデータの冗長性を削減し、効率とデータ整合性のバランスを取るために3NFまたはBCNFを目指します。
dev.to
Scaling & DB Optimization
Create attached notes ...
