システム開発や計算機科学の世界において、避けて通れない不都合な真実があります。それが「アムダールの法則(Amdahl’s law)」です。
「サーバーのスペックを2倍にすれば、処理速度も2倍になるはず」
「プロセッサのコア数を100倍に増やせば、AIの学習が100倍速くなるはず」
このように考えたことはないでしょうか。結論から言うと、これは大きな誤りです。アムダールの法則は、私たちのこうした直感的な期待を打ち砕き、「どれだけ並列化を進めても、プログラム全体の高速化には絶対に超えられない限界がある」という冷徹な事実を突きつけます。
本記事では、アムダールの法則の基本概念から、数式の丁寧な導出、直感的な具体例、そしてこの法則と対をなす「グスタフソンの法則」との違いについて解説します。さらに、マルチコアCPUやGPU、現代のAI(大規模言語モデルなど)の分散学習、クラウドアーキテクチャにおいて、この法則とどのように向き合い、ボトルネックを打破すべきかまで、8,000文字を超える圧倒的なボリュームで徹底的に深掘りします。
第1章:アムダールの法則とは何か?基本概念を学ぶ
1-1. アムダールの法則の一言要約
アムダールの法則を一言で表現すると、「プログラムの処理速度は、並列化できない『直列処理』の部分によって頭打ちになる」ということです。
コンピューターの処理を高速化するために、複数のプロセッサ(コア)に仕事を分担させる「並列処理」という手法がよく使われます。しかし、どれだけ大量のプロセッサを投入しても、プログラムの中に「順番に1個ずつ処理するしかない部分」が少しでも残っていれば、全体の処理時間はその部分より短くなることはありません。
1-2. 提唱者ジーン・アムダールと1967年の背景
この法則は、1967年にIBMの優れたコンピューター設計者であったジーン・アムダール(Gene Amdahl)氏によって提唱されました。
当時、コンピューターの性能向上は主に単一のプロセッサの動作クロック(処理スピード)を上げることで達成されていました。しかし、アムダール氏は将来的に複数のプロセッサを組み合わせた「並列計算機」が登場することを見越し、その限界を数学的に指摘したのです。彼の予測は驚くほど正確であり、半世紀以上が経過した現代のマルチコアCPUやスーパーコンピューター、クラウドの時代においても、システム設計の根本的な指針として生き続けています。
1-3. 誰もが陥る「並列化の罠」
多くのエンジニアやプロジェクトマネージャーが、以下のような罠に陥りがちです。
並列化の罠の例:
「現在、1台のサーバーで10時間かかっているバッチ処理がある。この処理の80%は並列化可能だ。よし、サーバー(プロセッサ)を10倍の10台に増やそう。そうすれば、処理時間は10分の1の1時間になるはずだ!」
一見すると筋が通っているように思えますが、アムダールの法則によれば、これは絶対に不可能です。プロセッサを10倍に増やしても、処理時間は1時間にはなりません。実際には3時間近くかかってしまいます。なぜこのような乖離が生まれるのか、次の章で数式と理論から解き明かしていきましょう。
第2章:数式から紐解くアムダールの法則
アムダールの法則を正しく理解し、実際のシステム設計に役立てるためには、数式とその導出プロセスを理解することが不可欠です。数学が苦手な方でも分かるよう、順を追って丁寧に分解していきます。
2-1. アムダールの法則の基本数式
アムダールの法則は、以下の数式によって定義されます。
各変数の意味は以下の通りです。
$S$(Speedup): システム全体のスピードアップ倍率(並列化前に比べて何倍速くなったか)
$P$(Parallel fraction): プログラム全体のうち、並列化可能な部分の割合(0から1の間の値。例えば80%なら0.8)
$1 – P$: プログラム全体のうち、並列化できない(直列に処理するしかない)部分の割合(例えば全体の20%なら0.2)
$N$(Number of processors): 並列処理に投入するプロセッサの数(コア数やサーバー数)
2-2. 数式の導出プロセス
なぜこの数式が導き出されるのか、具体的な処理時間をもとに考えてみましょう。
元の処理時間を $T_1$ とする
プロセッサが1台($N=1$)のときの合計処理時間を $T_1$ とします。
処理時間を「直列部分」と「並列部分」に分ける
並列化できる割合が $P$ なので、それぞれの処理時間は次のようになります。
直列処理にかかる時間:$T_s = (1 – P) \times T_1$
並列処理にかかる時間:$T_p = P \times T_1$
プロセッサを $N$ 台にしたときの処理時間 $T_N$ を求める
プロセッサを $N$ 台に増やすと、並列化できる部分($T_p$)の時間は $N$ 分の1に縮まります。しかし、直列処理部分($T_s$)の時間は変わりません。
$$T_N = T_s + \frac{T_p}{N} = (1 – P)T_1 + \frac{P \times T_1}{N}$$これを $T_1$ でくくります。
$$T_N = T_1 \left( (1 – P) + \frac{P}{N} \right)$$スピードアップ倍率 $S$ を計算する
元の時間 $T_1$ を、並列化後の時間 $T_N$ で割ることで、何倍速くなったか($S$)を求めます。
$$S = \frac{T_1}{T_N} = \frac{T_1}{T_1 \left( (1 – P) + \frac{P}{N} \right)} = \frac{1}{(1 – P) + \frac{P}{N}}$$
このようにして、先ほどのアムダールの法則の公式が完成します。
2-3. プロセッサを無限大にしたときの極限(無限の壁)
この数式の最も恐ろしいところは、プロセッサの数($N$)を無限大($N \to \infty$)にすっ飛ばしたときに現れます。
分母にある $\frac{P}{N}$ の項に注目してください。$N$ が無限に大きくなると、この項はゼロに近づいていきます($\frac{P}{\infty} \to 0$)。
したがって、プロセッサを無限に増やしたときのスピードアップ倍率 $S_{\max}$ は以下のようになります。
これは、「全体の性能向上幅は、どれだけお金をかけてプロセッサを並べても、直列処理部分の割合($1-P$)の逆数を超えることはできない」という限界を示しています。
並列化可能割合が 50% ($P=0.5$) の場合:最大でも $\frac{1}{1-0.5} = 2$ 倍までしか速くならない。
並列化可能割合が 90% ($P=0.9$) の場合:最大でも $\frac{1}{1-0.9} = 10$ 倍までしか速くならない。
並列化可能割合が 99% ($P=0.99$) の場合:最大でも $\frac{1}{1-0.99} = 100$ 倍までしか速くならない。
たとえ99%の処理を完璧に並列化できたとしても、わずか1%の直列処理が残っているだけで、システム全体は元の100倍以上の速度には絶対にならないのです。
第3章:アムダールの法則シミュレーション(数値データで見る限界)
言葉や数式だけでは実感が湧きにくいかもしれません。ここでは、並列化可能な割合($P$)とプロセッサ数($N$)を変化させたとき、実際のスピードアップ倍率($S$)がどのように推移するのかを具体的な数値テーブルで確認してみましょう。
3-1. スピードアップ倍率の比較表
以下の表は、アムダールの法則の公式にそれぞれの値を代入して得られた、理論上のスピードアップ倍率です。
| 並列化割合 (P) \ プロセッサ数 (N) | N=2 | N=4 | N=8 | N=16 | N=64 | N=256 | N=∞ (限界) |
| P = 50% (半分が直列) | 1.33倍 | 1.60倍 | 1.78倍 | 1.88倍 | 1.97倍 | 1.99倍 | 2.00倍 |
| P = 70% (3割が直列) | 1.54倍 | 2.11倍 | 2.58倍 | 2.94倍 | 3.27倍 | 3.32倍 | 3.33倍 |
| P = 90% (1割が直列) | 1.82倍 | 3.08倍 | 4.71倍 | 6.40倍 | 8.77倍 | 9.66倍 | 10.00倍 |
| P = 95% (5%が直列) | 1.90倍 | 3.48倍 | 5.93倍 | 9.14倍 | 15.42倍 | 18.89倍 | 20.00倍 |
| P = 99% (1%が直列) | 1.98倍 | 3.88倍 | 7.48倍 | 13.91倍 | 39.26倍 | 72.11倍 | 100.00倍 |
3-2. データから読み解く悲酷な現実
このデータから、2つの重要な事実を読み取ることができます。
① プロセッサを増やすほど「投資対効果」は悪化する
$P=90\%$ の行を見てください。
プロセッサを1台から2台(2倍)にすると、速度は1.82倍になります(効率的)。
しかし、プロセッサを16台から64台(4倍)に増やしても、速度は6.40倍から8.77倍(約1.37倍)にしか増えません。
さらに、64台から256台(4倍)にしても、8.77倍から9.66倍(約1.1倍)という微々たる向上にとどまります。
つまり、プロセッサを増やせば増やすほど、追加投資に対するパフォーマンスの戻り(ROI)は急激に減少していくのです。
② 並列化率のわずかな差が、大規模システムでの成否を分ける
プロセッサ数が $N=256$ の列に注目してください。
$P=90\%$ のシステムでは、256台も並べたのに 9.66倍 で頭打ちです。プロセッサの利用効率(9.66 ÷ 256)はわずか 3.7% です。残りの96%以上の計算リソースは、直列処理の順番待ちで遊んでいることになります。
一方で、$P=99\%$ までチューニングされたシステムであれば、256台のプロセッサで 72.11倍 の速度を出せます。
大規模な並列システム(スーパーコンピューターやクラウドの分散処理)を組む場合、プロセッサの数を増やすことよりも、「並列化できない部分をいかに1%以下に抑え込むか」というチューニングの方が遥かに重要であることが、この数字から一目瞭然で分かります。
第4章:なぜ「並列化できない直列処理」が生まれるのか?
では、なぜプログラムの中には、どれだけ技術が進化しても並列化できない「直列処理の部分」が生まれてしまうのでしょうか?その主な原因を4つの要素に分類して解説します。
4-1. データの依存関係(データハザード)
並列処理ができない最大の原因は、「前の処理の結果が決まらないと、次の処理を始められない」というデータの因果関係です。
簡単な例として、以下の計算を考えてみましょう。
ステップ1:$A = 5 + 3$
ステップ2:$B = A \times 2$
ステップ3:$C = B – 1$
この処理を行う場合、ステップ2はステップ1の結果($A$ の値)がないと計算できませんし、ステップ3はステップ2の結果($B$ の値)が必要です。どれだけ高性能なプロセッサを3台用意して「3つのステップを同時に処理せよ」と命じても、ステップ2と3を担当するプロセッサは、前の処理が終わるのをただ待つしかありません。これがデータ依存による直列化です。
4-2. I/O(入出力)のボトルネック
計算そのものは並列化できても、データの読み込みや書き込み(I/O)の部分が一本道であるケースです。
ハードディスクやSSDへのログ書き込み
単一のデータベース(RDB)への書き込み・更新
ネットワークを介したデータの送受信
どれだけ100個のコアが超高速で計算を終えても、最終的な結果を1つのファイルに書き出さなければならない場合、そのファイル書き込み処理の順番待ちが発生します。ストレージやネットワークの帯域幅(通信路の太さ)の上限が、システム全体の直列ボトルネックになります。
4-3. 同期処理と排他制御(ロック)
複数のプロセッサが、同じデータ(メモリ空間)を同時に書き換えると、データが破損したり矛盾が生じたりします。これを防ぐために、プログラムでは排他制御(Mutexやロック)を行います。
排他制御のイメージ:
あるプロセッサがデータAを書き換えている間、他のプロセッサはデータAに触れてはいけない(ロックされる)。他のプロセッサは、ロックが解除されるまで一列に並んで待たなければならない。
このロックがかかっている期間は、実質的に「完全な直列処理」となります。並列プログラミングにおいて、スレッド間の同期を取るためのオーバーヘッドやロック競合は、アムダールの法則を悪化させる最大の敵の一つです。
4-4. タスク割り振りのオーバーヘッド(管理コスト)
仕事を複数人で分担するときには、必ず「指示を出す」「成果をまとめる」という管理コストが発生します。コンピューターも同様です。
メインのプロセッサが、データを分割して他のプロセッサに配る時間
各プロセッサの処理が終わったかどうかを監視する時間
バラバラになった処理結果を1つに統合する時間
プロセッサの数($N$)が増えれば増えるほど、この管理コスト(コミュニケーションコスト)は増大します。アムダールの法則の単純な数式ではこのオーバーヘッドは固定値(または無視)されていますが、現実のシステムでは、プロセッサを増やしすぎると管理コストが肥大化し、ある点を境に逆に遅くなるという現象さえ発生します。
第5章:日常生活やビジネスで例えるアムダールの法則
コンピューターの話が続いたので、ここで視点を変えて、私たちの日常生活やビジネスの現場にアムダールの法則を当てはめてみましょう。驚くほど身近なところにも、この法則が潜んでいることが分かります。
5-1. 例1:カレー作り(料理の並列化)
あなたが友人を家に招き、4人で協力してカレーを作るとします。
並列化できる作業($P=80\%$): 野菜を切る、肉を下処理する、皿を並べる、テーブルを拭く
直列処理しかできない作業($1-P=20\%$): 鍋で具材をじっくり煮込む、ルーを溶かす
4人で手分けすれば、野菜を切る時間は4分の1に短縮できます。もし近所の人が手伝いに来て10人、100人に増えたらどうなるでしょうか?野菜は一瞬で切り終わるようになりますが、「鍋で30分煮込む」という工程の時間は、人間が何人増えても絶対に縮まりません。
最終的なカレーの完成時間は、この「煮込み時間(直列部分)」によって完全に支配されます。
5-2. 例2:引っ越し作業(運搬のボトルネック)
ワンルームから荷物を運び出す引っ越しを考えます。手伝ってくれる友達を10人呼びました。
並列化できる作業: 部屋の中で段ボールに荷物を詰める
直列処理しかできない作業: 部屋の「狭いドア」を通過して外に出る、エレベーターに荷物を載せて下りる
部屋の中で10人が同時に荷造りをすれば、荷造りは一瞬で終わります。しかし、部屋のドアが1人分の幅しかなく、エレベーターも1台しかなければ、段ボールを持った友達がドアの前で大渋滞を起こします。人間を増やした結果、ドアの前での「待ち時間」が増えるだけで、全体の引っ越し時間はほとんど変わりません。
5-3. 例3:ビジネスプロジェクト(承認プロセス)
ある製品の開発プロジェクトで、エンジニアを5人から50人に増やしたとします。
並列化できる作業: 各機能のソースコードを書く
直列処理しかできない作業: 部長の承認をもらう、法務のリーガルチェックを受ける、最終的なシステム統合テストを行う
コードを書く人員を10倍に増やしても、部長が仕様書をレビューしてハンコを押すスピードが従来通りであれば、プロジェクト全体の進捗は部長のデスクの上でストップします。人件費が10倍になっただけで、リリース日は大して早くならないという、ビジネスで非常によく見られる悲劇です。
第6章:アムダールの法則の限界と「グスタフソンの法則」
アムダールの法則は1967年に提唱され、並列計算の限界を示す絶対的な真理として君臨していましたが、1988年、これに一石を投じる新たな法則が登場しました。それが「グスタフソンの法則(Gustafson’s law)」です。
アムダールの法則が「悲観的な法則」と呼ばれるのに対し、グスタフソンの法則は「希望の法則」と呼ばれます。なぜなら、アムダールが示した限界を、現実的なアプローチで打ち破る道筋を示したからです。
6-1. アムダールの法則の「盲点」とは?
アムダールの法則には、ある1つの強力な前提条件があります。それは、「処理する問題の大きさ(データ量やタスクの総量)が、あらかじめ固定されている」ということです。
先ほどのバッチ処理の例で言えば、「100万件のデータを処理する」という問題のサイズが変わらないことを前提としています。
しかし、現実のコンピューターの世界では、プロセッサが100倍に増えたとき、私たちは「同じ100万件のデータを100倍速く解きたい」と思うだけでなく、「同じ時間を使って、100倍大きい(1億件の)データを解きたい」と考えるのが普通です。
6-2. グスタフソンの法則の考え方
ジョン・グスタフソン氏は、「コンピューターの性能が上がれば、人間はより大規模で、より精度の高い問題を解くようになるため、直列処理の割合は相対的に小さくなる」と指摘しました。
アムダール: 固定されたタスクを、プロセッサを増やして短時間で終わらせたい(時間の短縮に注目)。
グスタフソン: 固定された時間の中で、プロセッサを増やしてより多くの仕事をこなしたい(処理量の拡大に注目)。
6-3. グスタフソンの法則の公式
グスタフソンの法則によるスピードアップ倍率 $S_G$ は、以下の簡単な式で表されます(これをスケールド・スピードアップと呼びます)。
$N$:プロセッサの数
$s$:高性能な並列システム上で計測した、直列処理にかかった時間の割合(0~1)
例えば、100台のプロセッサ($N=100$)を使ってある巨大なシミュレーションを実行したとき、全体の処理時間のうち1%($s=0.01$)だけが直列処理だったとします。これを式に代入すると、以下のようになります。
アムダールの法則では、プロセッサを増やしてもどこかで頭打ちになりましたが、グスタフソンの法則では、プロセッサ数 $N$ に比例してスピードアップ倍率がほぼ直線的(線形)に伸びていくことが分かります。
6-4. アムダール vs グスタフソンの比較まとめ
両者の違いを明確にするために、以下の表にまとめました。
| 比較項目 | アムダールの法則 | グスタフソンの法則 |
| 前提条件 | 問題のサイズ(データ量)が固定 | 実行時間(処理時間)が固定 |
| 視点 | 既存の処理をどれだけ「高速化」できるか | 同じ時間でどれだけ「大容量化・高精度化」できるか |
| プロセッサ増の効果 | 途中で頭打ちになる(収束する) | ほぼ直線的に性能が伸びる(線形) |
| 主な用途 | 単一バッチ、リアルタイム処理の最適化 | 気象予測、科学計算、AIの巨大モデル学習 |
| 評価 | 悲観的(限界を警告する) | 楽観的・現実的(スケールの可能性を示す) |
第7章:現代のIT・AI技術におけるアムダールの法則
1967年の法則が、2020年代、そして2026年現在の最新技術にどのように影響を与えているかを見てみましょう。現代のエンジニアリングは、まさに「アムダールの法則との戦いの歴史」そのものです。
7-1. マルチコアCPU時代へのシフト(クロックの限界)
2000年代半ばまで、CPUの性能向上は「クロック周波数(GHz)」を上げることで達成されていました。しかし、消費電力と発熱の限界(熱の壁)により、単一コアのクロック向上は頭打ちになりました。
そこでインテルやAMDなどのチップメーカーが舵を切ったのが、1つのCPUに複数の頭脳を載せる「マルチコア化(メニコア化)」です。現在では、一般的なPCでも8コアや16コア、サーバー用CPUに至っては128コアを超えるものが登場しています。
ここで直面したのがアムダールの法則です。単一コアが速くならない以上、ソフトウェア側がマルチスレッド(並列処理)に対応しなければ、コアが100個あろうがソフトは1ミリも速くなりません。 現代のプログラマーに並列プログラミング(Go言語のGoroutineや、Rustの並行処理など)のスキルが強く求められるようになったのは、このアムダールの壁を乗り越えるためです。
7-2. GPUとディープラーニング(生成AIの爆発)
ChatGPTをはじめとする大規模言語モデル(LLM)や、画像生成AIの急速な発展を支えているのは、NVIDIA社などのGPU(グラフィックス・プロセッシング・ユニット)です。
GPUは、CPUが数個〜数十個の高機能なコアを持つのに対し、数千〜数万個という大量の「単純なコア」を持っています。なぜAIの世界ではGPUがこれほど圧倒的なパワーを発揮できるのでしょうか?
それは、ディープラーニングの行列計算が、アムダールの法則における「並列化可能割合($P$)が極めて100%に近い処理」だからです。
AI処理の特徴:
数千億個のパラメータの掛け算・足し算を同時に行う処理は、それぞれの計算が独立しているため、数万個のコアに完全にバラバラに割り振ることができます($P \approx 0.9999$)。
そのため、GPUのコア数を増やせば増やすほど、グスタフソンの法則に従って処理能力が線形にスケールし、現代の驚異的なAIの進化が可能になりました。
7-3. AI分散学習における新たなアムダールの壁
しかし、そんなAIの世界にも新たなアムダールの法則の壁が忍び寄っています。それが「通信(インターコネクト)のボトルネック」です。
数千台のGPUを繋いで1つの巨大なAIモデルを学習させる場合、各GPUが計算した結果(勾配データ)を、定期的にすべてのGPU間で同期(All-Reduceと呼ばれる処理)しなければなりません。
この「他のGPUの計算が終わるのを待ち、ネットワーク経由でデータを同期する時間」は、完全な直列処理(並列化できない部分)になります。
NVIDIAが単に速いGPUを作るだけでなく、GPU間を「NVLink」という超高速な専用線で結んだり、InfiniBandという爆速のネットワーク技術を重視しているのは、この「通信という名の直列ボトルネック(アムダールの壁)」によって、せっかくのGPUのパワーが相殺されるのを防ぐためなのです。
第8章:ソフトウェア開発におけるアムダールの法則への対策
もしあなたが開発したシステムやプログラムが「並列化しているのに、思ったほど速くならない」と壁にぶつかったとき、どのように対処すべきでしょうか。アムダールの法則の呪縛から逃れるための具体的なアプローチを4つ紹介します。
8-1. 対策①:プロファイリングによるボトルネックの可視化
アムダールの法則が教えてくれる最も重要なアプローチは、「並列部分をさらに最適化するよりも、直列部分を削る方が効果が高い」ということです。
どこが直列処理になっているか分からない状態で、勘に頼ってコードをいじってはいけません。必ずプロファイラ(性能測定ツール)を使用し、プログラムの実行時間の内訳をグラフ化(フレームグラフなど)してください。
全体の80%の時間を占めているのが、実は「データベースのロック待ち」だった
データのシリアライズ(JSON変換など)がシングルスレッドで動いていてボトルネックになっていた
これらを特定し、最も遅い「直列の1点」をピンポイントで潰すことが、最大のスピードアップへの近道です。
8-2. 対策②:直列処理そのもののアルゴリズム高速化
並列化できない部分($1-P$)がどうしても残るなら、その部分自体の処理速度を、力技やスマートなアルゴリズムで底上げするしかありません。
例えば、直列処理部分のアルゴリズムを、計算量が $O(N^2)$ の二重ループから、$O(N \log N)$ の効率的なアルゴリズム(クイックソートやハッシュマップの活用など)に書き換えます。直列部分自体の絶対的な時間が半分になれば、アムダールの数式の分母が小さくなり、並列化全体の効果が劇的に向上します。
8-3. 対策③:非同期I/Oとイベント駆動アーキテクチャ
I/O待ちによる直列化を防ぐためには、非同期処理(Asynchronous I/O)への移行が有効です。
従来の同期処理(ブロッキングI/O)では、データベースからの返答を待つ間、スレッドは何もできずに停止していました。これを非同期処理(Node.js、Go、Pythonのasync/awaitなど)に書き換えることで、データの到着を待つ「何もしていない無駄な時間」に、プロセッサが別のタスクを次々と処理できるようになります。これにより、システム全体の直列空き時間を極限まで減らすことができます。
8-4. 対策④:ロックフリー(Lock-free)データ構造の採用
マルチスレッドプログラミングにおいて、データの不整合を防ぐための「ロック(排他制御)」は直列化の大きな原因だと説明しました。
この対策として、CPUが持つハードウェアレベルのアトミック命令(CAS: Compare-And-Swapなど)を利用した、ロックフリーなデータ構造を採用する手法があります。ミューテックス(Mutex)を使ってスレッド全体をスリープさせるのではなく、スレッドを止めずにデータの変更を試みることで、同期にかかる直列オーバーヘッドを劇的に削減できます。
第9章:まとめ 〜エンジニアとマネージャーが持つべきマインドセット〜
アムダールの法則は、一見すると私たちの挑戦を制限する「冷酷な壁」のように思えます。しかし、この法則の本質を正しく理解することは、不可能な魔法を追い求めるのをやめ、地に足のついた正しいシステム設計を行うための強力な武器になります。
最後に、この記事の要点を振り返り、私たちが持つべきマインドセットをまとめます。
🔑 本記事の重要ポイント
アムダールの法則の本質:
プロセッサをどれだけ増やしても、システム全体の速度は並列化できない「直列処理の部分」によって頭打ちになる。
数式が示す限界:
わずか1%でも直列処理が残っていれば、プロセッサを無限に増やしても全体の速度は元の100倍未満で頭打ちになる。
グスタフソンの法則との関係:
データ量(問題のサイズ)が固定ならアムダールが適用され、時間固定でデータ量をスケールさせるならグスタフソンが適用される。
現代の戦い:
マルチコアCPU、GPU、AIの分散学習の成否は、演算性能そのものよりも、同期・通信・I/Oといった「直列ボトルネック」をいかに排除できるかにかかっている。
💡 現場で活かすマインドセット
「とりあえずスペックアップ(スケールアウト)」の誘惑に負けない
システムが遅いとき、安易にサーバーの台数を増やしたり、コア数の多い高級なインスタンスに切り替えたりするのはやめましょう。まずは「並列化の恩恵を受けられる構造になっているか?」を問い直してください。
ボトルネック(最も弱いリンク)に注力する
並列化できる綺麗なコードをさらに美しく磨き上げるよりも、泥臭くて誰も触りたがらない「データの同期部分」や「レガシーなDB書き込み処理」を1秒縮める方が、システム全体にとっては数百倍の価値があります。
アムダールの法則を理解したあなたなら、もう「コア数を増やせばいくらでも速くなる」という幻想に惑わされることはないはずです。システムの限界をクールに見つめ、ボトルネックをスマートに撃破するアーキテクチャを設計していきましょう!

