ā§Ļā§Š. āĻŦā§āϝāĻžāĻ-āĻ āĻĢ-āĻĻā§āϝ-āĻāύāĻā§āϞāĻĒ āĻāϏā§āĻāĻŋāĻŽā§āĻļāύ (Back-of-the-envelope Estimation) āĻŦāĻž āĻāϏā§āĻž āĻšāĻŋāϏāĻžāĻŦ
āϏāĻŋāϏā§āĻā§āĻŽ āĻĄāĻŋāĻāĻžāĻāύ āĻāύā§āĻāĻžāϰāĻāĻŋāĻāϤ⧠āĻ āύā§āĻ āϏāĻŽā§ āĻāĻĒāύāĻžāĻā§ āĻŦā§āϝāĻžāĻ-āĻ āĻĢ-āĻĻā§āϝ-āĻāύāĻā§āϞāĻĒ āĻāϏā§āĻāĻŋāĻŽā§āĻļāύ (āĻāϏā§āĻž āĻšāĻŋāϏāĻžāĻŦ) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻā§āύ⧠āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āϧāĻžāϰāĻŖāĻā§āώāĻŽāϤāĻž (capacity) āĻŦāĻž āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏā§āϰ āĻĒā§āϰā§ā§āĻāύā§ā§āϤāĻž āĻ āύā§āĻŽāĻžāύ āĻāϰāϤ⧠āĻŦāϞāĻž āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻā§āĻāϞā§āϰ āϏāĻŋāύāĻŋā§āϰ āĻĢā§āϞ⧠āĻā§āĻĢ āĻĄāĻŋāύā§āϰ āĻŽāϤā§, âāĻŦā§āϝāĻžāĻ-āĻ āĻĢ-āĻĻā§āϝ-āĻāύāĻā§āϞāĻĒ āĻā§āϝāĻžāϞāĻā§āϞā§āĻļāύ āĻšāϞ⧠āĻāĻŽāύ āĻāĻ āϧāϰāĻŖā§āϰ āĻ āύā§āĻŽāĻžāύ, āϝāĻž āĻāĻĒāύāĻŋ āĻŦāĻŋāĻāĻŋāύā§āύ āĻĨāĻ āĻāĻā§āϏāĻĒā§āϰāĻŋāĻŽā§āύā§āĻ (thought experiments) āĻāĻŦāĻ āĻĒā§āϰāĻāϞāĻŋāϤ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āĻĄā§āĻāĻžāϰ āϏāĻŽāύā§āĻŦā§ā§ āϤā§āϰāĻŋ āĻāϰā§āύāĨ¤ āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻĒāύāĻŋ āϏāĻšāĻā§āĻ āĻŦā§āĻāϤ⧠āĻĒāĻžāϰā§āύ āϝ⧠āĻā§āύ āĻĄāĻŋāĻāĻžāĻāύāĻāĻŋ āĻāĻĒāύāĻžāϰ āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āĻāĻžāĻšāĻŋāĻĻāĻžāĻā§āϞ⧠āĻāĻžāϞā§āĻāĻžāĻŦā§ āĻŽā§āĻāĻžāϤ⧠āĻĒāĻžāϰāĻŦā§â [ā§§]āĨ¤
āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻāĻ āĻŦā§āϝāĻžāĻ-āĻ āĻĢ-āĻĻā§āϝ-āĻāύāĻā§āϞāĻĒ āĻāϏā§āĻāĻŋāĻŽā§āĻļāύ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻĒāύāĻžāϰ āϏā§āĻā§āϞā§āĻŦāĻŋāϞāĻŋāĻāĻŋāϰ (scalability) āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻ āĻŦāĻŋāώā§āĻā§āϞ⧠āϏāĻŽā§āĻĒāϰā§āĻā§ āĻā§āĻŦ āĻāĻžāϞ⧠āϧāĻžāϰāĻŖāĻž āĻĨāĻžāĻāϤ⧠āĻšāĻŦā§āĨ¤ āĻŦāĻŋāĻļā§āώ āĻāϰ⧠āύāĻŋāĻā§āϰ āĻŦāĻŋāώā§āĻā§āϞ⧠āĻāĻžāϞā§āĻāĻžāĻŦā§ āĻŦā§āĻāϤ⧠āĻšāĻŦā§:
- āĻĒāĻžāĻā§āĻžāϰ āĻ āĻĢ āĻā§ āĻŦāĻž ⧍-āĻāϰ āĻāĻžāϤ (power of two) [⧍]
- āϞā§āϝāĻžāĻā§āύā§āϏāĻŋ āύāĻžāĻŽā§āĻŦāĻžāϰ (latency numbers) āϝāĻž āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻžāϰā§āϰ āĻāĻžāύāĻž āĻāĻāĻŋāϤ
- āĻ ā§āϝāĻžāĻā§āĻāϞā§āĻŦāĻŋāϞāĻŋāĻāĻŋ āύāĻžāĻŽā§āĻŦāĻžāϰ āĻŦāĻž āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āĻĒā§āϰāĻžāĻĒā§āϝāϤāĻžāϰ āĻšāĻŋāϏāĻžāĻŦ (availability numbers)
āĻĒāĻžāĻā§āĻžāϰ āĻ āĻĢ āĻā§ (Power of two) āĻŦāĻž ⧍-āĻāϰ āĻāĻžāϤ
āĻĄāĻŋāϏā§āĻā§āϰāĻŋāĻŦāĻŋāĻāĻā§āĻĄ āϏāĻŋāϏā§āĻā§āĻŽ (distributed systems) āύāĻŋā§ā§ āĻāĻžāĻ āĻāϰāĻžāϰ āϏāĻŽā§ āĻĄā§āĻāĻžāϰ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āĻ āύā§āĻ āĻŦāĻŋāĻļāĻžāϞ āĻšāϤ⧠āĻĒāĻžāϰā§, āĻāĻŋāύā§āϤ⧠āϏāĻŦ āĻšāĻŋāϏāĻžāĻŦ-āύāĻŋāĻāĻžāĻļ āĻĻāĻŋāύāĻļā§āώ⧠āĻāĻāĻĻāĻŽ āĻŽā§āϞāĻŋāĻ āĻŦāĻŋāώā§āĻā§āϞā§āϰ āĻāĻĒāϰāĻ āύāĻŋāϰā§āĻāϰ āĻāϰā§āĨ¤ āύāĻŋāϰā§āĻā§āϞ āĻšāĻŋāϏāĻžāĻŦ āĻĒāĻžāĻā§āĻžāϰ āĻāύā§āϝ âāĻĒāĻžāĻā§āĻžāϰ āĻ āĻĢ ā§¨â (⧍-āĻāϰ āĻāĻžāϤ) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻĄā§āĻāĻž āĻāϞāĻŋāĻāĻŽā§āϰ āĻāĻāĻāĻā§āϞ⧠(data volume units) āĻāĻžāύāĻž āĻ āϤā§āϝāύā§āϤ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖāĨ¤
āĻāĻāĻāĻŋ āĻŦāĻžāĻāĻ (byte) āĻšāĻ˛ā§ ā§ŽāĻāĻŋ āĻŦāĻŋāĻā§āϰ (bits) āϏāĻŽāώā§āĻāĻŋāĨ¤ āĻāĻāĻāĻŋ āĻāϏāĻāĻŋ (ASCII) āĻā§āϝāĻžāϰā§āĻā§āĻāĻžāϰ āĻŽā§āĻŽā§āϰāĻŋāϤ⧠āĻāĻ āĻŦāĻžāĻāĻ (ā§Ž āĻŦāĻŋāĻ) āĻāĻžā§āĻāĻž āĻĻāĻāϞ āĻāϰā§āĨ¤ āύāĻŋāĻā§ āĻĄā§āĻāĻž āĻāϞāĻŋāĻāĻŽā§āϰ āĻāĻāĻāĻā§āϞ⧠āĻŦā§āϝāĻžāĻā§āϝāĻž āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āϏāĻžāϰāĻŖā§ (Table 1) āĻĻā§āĻā§āĻž āĻšāϞā§:
| āĻĒāĻžāĻā§āĻžāϰ (Power) | āĻāύā§āĻŽāĻžāύāĻŋāĻ āĻŽāĻžāύ (Approximate value) | āĻĒā§āϰ⧠āύāĻžāĻŽ (Full name) | āϏāĻāĻā§āώāĻŋāĻĒā§āϤ āύāĻžāĻŽ (Short name) |
|---|---|---|---|
| ā§§ā§Ļ (2^10) | ā§§ āĻšāĻžāĻāĻžāϰ (1 Thousand) | ā§§ āĻāĻŋāϞā§āĻŦāĻžāĻāĻ (1 Kilobyte) | 1 KB |
| ⧍ā§Ļ (2^20) | ā§§ āĻŽāĻŋāϞāĻŋā§āύ / ā§§ā§Ļ āϞāĻžāĻ (1 Million) | ā§§ āĻŽā§āĻāĻžāĻŦāĻžāĻāĻ (1 Megabyte) | 1 MB |
| ā§Šā§Ļ (2^30) | ā§§ āĻŦāĻŋāϞāĻŋā§āύ / ā§§ā§Ļā§Ļ āĻā§āĻāĻŋ (1 Billion) | ā§§ āĻāĻŋāĻāĻžāĻŦāĻžāĻāĻ (1 Gigabyte) | 1 GB |
| ā§Ēā§Ļ (2^40) | ā§§ āĻā§āϰāĻŋāϞāĻŋā§āύ (1 Trillion) | ā§§ āĻā§āϰāĻžāĻŦāĻžāĻāĻ (1 Terabyte) | 1 TB |
| ā§Ģā§Ļ (2^50) | ā§§ āĻā§ā§āĻžāĻĄā§āϰāĻŋāϞāĻŋā§āύ (1 Quadrillion) | ā§§ āĻĒā§āĻāĻžāĻŦāĻžāĻāĻ (1 Petabyte) | 1 PB |
āϞā§āϝāĻžāĻā§āύā§āϏāĻŋ āύāĻžāĻŽā§āĻŦāĻžāϰ āϝāĻž āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻžāϰā§āϰ āĻāĻžāύāĻž āĻāĻāĻŋāϤ (Latency numbers every programmer should know)
āĻā§āĻāϞā§āϰ āĻĄ. āĻĄāĻŋāύ ⧍ā§Ļā§§ā§Ļ āϏāĻžāϞ⧠āϏāĻžāϧāĻžāϰāĻŖ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāϰ āĻ āĻĒāĻžāϰā§āĻļāύā§āϰ āϏāĻŽā§āĻāĻžāϞā§āϰ āĻāĻāĻāĻŋ āϤāĻžāϞāĻŋāĻāĻž āĻĒā§āϰāĻāĻžāĻļ āĻāϰā§āύ [ā§§]āĨ¤ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāϰ āĻāϰāĻ āĻĻā§āϰā§āϤāĻāϤāĻŋāϏāĻŽā§āĻĒāύā§āύ āĻ āĻļāĻā§āϤāĻŋāĻļāĻžāϞ⧠āĻšāĻā§āĻžāϰ āĻāĻžāϰāĻŖā§ āĻāϰ āĻŽāϧā§āϝ⧠āĻāĻŋāĻā§ āύāĻžāĻŽā§āĻŦāĻžāϰ āĻŦāĻž āĻĄā§āĻāĻž āĻāĻāύ āĻĒā§āϰā§āύ⧠āĻšā§ā§ āĻā§āĻā§āĨ¤ āϤāĻŦā§, āĻāĻ āύāĻžāĻŽā§āĻŦāĻžāϰāĻā§āϞ⧠āĻāĻāύāĻ āĻāĻŽāĻžāĻĻā§āϰ āĻŦāĻŋāĻāĻŋāύā§āύ āĻāĻŽā§āĻĒāĻŋāĻāĻāĻžāϰ āĻ āĻĒāĻžāϰā§āĻļāύā§āϰ āĻāϤāĻŋ (āĻā§āύāĻāĻž āĻāϤ āĻĻā§āϰā§āϤ āĻŦāĻž āϧā§āϰ) āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāĻāĻāĻŋ āĻāĻžāϞ⧠āϧāĻžāϰāĻŖāĻž āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āĨ¤
āϏāĻžāϰāĻŖā§ ā§§ (Table 1)
| āĻ āĻĒāĻžāϰā§āĻļāύā§āϰ āύāĻžāĻŽ (Operation name) | āϏāĻŽā§ (Time) |
|---|---|
| L1 āĻā§āϝāĻžāĻļ āϰā§āĻĢāĻžāϰā§āύā§āϏ (L1 cache reference) | 0.5 ns |
| āĻŦā§āϰāĻžāĻā§āĻ āĻŽāĻŋāϏāĻĒā§āϰā§āĻĄāĻŋāĻā§āĻ (Branch mispredict) | 5 ns |
| L2 āĻā§āϝāĻžāĻļ āϰā§āĻĢāĻžāϰā§āύā§āϏ (L2 cache reference) | 7 ns |
| āĻŽāĻŋāĻāĻā§āĻā§āϏ āϞāĻ/āĻāύāϞāĻ (Mutex lock/unlock) | 100 ns |
| āĻŽā§āĻāύ āĻŽā§āĻŽāϰāĻŋ āϰā§āĻĢāĻžāϰā§āύā§āϏ (Main memory reference) | 100 ns |
| āĻāĻŋāĻĒāĻŋ (Zippy) āĻĻāĻŋā§ā§ ā§§ āĻāĻŋāϞā§āĻŦāĻžāĻāĻ āĻāĻŽāĻĒā§āϰā§āϏ āĻāϰāĻž | 10,000 ns = 10 Âĩs |
| ā§§ āĻāĻŋāĻŦāĻŋāĻĒāĻŋāĻāϏ (1 Gbps) āύā§āĻāĻā§āĻžāϰā§āĻ⧠⧍ āĻāĻŋāϞā§āĻŦāĻžāĻāĻ āĻĄā§āĻāĻž āĻĒāĻžāĻ āĻžāύ⧠| 20,000 ns = 20 Âĩs |
| āĻŽā§āĻŽāϰāĻŋ āĻĨā§āĻā§ āĻā§āϰāĻŽāĻžāύā§āĻŦāϝāĻŧā§ (sequentially) ā§§ āĻŽā§āĻāĻžāĻŦāĻžāĻāĻ āϰāĻŋāĻĄ āĻāϰāĻž | 250,000 ns = 250 Âĩs |
| āĻāĻāĻ āĻĄā§āĻāĻžāϏā§āύā§āĻāĻžāϰā§āϰ āĻā§āϤāϰ⧠āϰāĻžāĻāύā§āĻĄ āĻā§āϰāĻŋāĻĒ (Round trip) | 500,000 ns = 500 Âĩs |
| āĻĄāĻŋāϏā§āĻ āϏāĻŋāĻ (Disk seek) | 10,000,000 ns = 10 ms |
| āύā§āĻāĻā§āĻžāϰā§āĻ āĻĨā§āĻā§ āĻā§āϰāĻŽāĻžāύā§āĻŦāϝāĻŧā§ ā§§ āĻŽā§āĻāĻžāĻŦāĻžāĻāĻ āϰāĻŋāĻĄ āĻāϰāĻž | 10,000,000 ns = 10 ms |
| āĻĄāĻŋāϏā§āĻ āĻĨā§āĻā§ āĻā§āϰāĻŽāĻžāύā§āĻŦāϝāĻŧā§ ā§§ āĻŽā§āĻāĻžāĻŦāĻžāĻāĻ āϰāĻŋāĻĄ āĻāϰāĻž | 30,000,000 ns = 30 ms |
| āĻā§āϝāĻžāϞāĻŋāĻĢā§āϰā§āύāĻŋāϝāĻŧāĻž (CA) -> āύā§āĻĻāĻžāϰāϞā§āϝāĻžāύā§āĻĄāϏ -> āĻā§āϝāĻžāϞāĻŋāĻĢā§āϰā§āύāĻŋāϝāĻŧāĻžāϝāĻŧ (CA) āĻĒā§āϝāĻžāĻā§āĻ āĻĒāĻžāĻ āĻžāύ⧠| 150,000,000 ns = 150 ms |
āϏāĻžāϰāϪ⧠⧍: āύā§āĻ (Table 2 Notes)
- ns = āύā§āϝāĻžāύā§āϏā§āĻā§āύā§āĻĄ (nanosecond), Âĩs = āĻŽāĻžāĻāĻā§āϰā§āϏā§āĻā§āύā§āĻĄ (microsecond), ms = āĻŽāĻŋāϞāĻŋ āϏā§āĻā§āύā§āĻĄ (millisecond)
- 1 ns = 10^-9 āϏā§āĻā§āύā§āĻĄ
- 1 Âĩs = 10^-6 āϏā§āĻā§āύā§āĻĄ = 1,000 ns
- 1 ms = 10^-3 āϏā§āĻā§āύā§āĻĄ = 1,000 Âĩs = 1,000,000 ns
āĻā§āĻāϞā§āϰ āĻāĻāĻāύ āϏāĻĢāĻāĻā§ā§āϝāĻžāϰ āĻāĻā§āĻāĻŋāύāĻŋā§āĻžāϰ āĻĄ. āĻĄāĻŋāύā§āϰ āĻāĻ āύāĻžāĻŽā§āĻŦāĻžāϰāĻā§āϞ⧠āĻāĻŋāĻā§āϝā§ā§āĻžāϞāĻžāĻāĻ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻā§āϞ āϤā§āϰāĻŋ āĻāϰā§āĻā§āύāĨ¤ āĻā§āϞāĻāĻŋ āϏāĻŽā§ā§āϰ āĻĒāϰāĻŋāĻŦāϰā§āϤāύā§āϰ āĻŦāĻŋāώā§āĻāĻŋāĻ āĻŦāĻŋāĻŦā§āĻāύāĻžā§ āϰāĻžāĻā§āĨ¤ āĻāĻŋāϤā§āϰ ā§§-āĻ (Figure 1) ⧍ā§Ļ⧍ā§Ļ āϏāĻžāϞ āĻĒāϰā§āϝāύā§āϤ āĻāĻ āϞā§āϝāĻžāĻā§āύā§āϏāĻŋ āύāĻžāĻŽā§āĻŦāĻžāϰāĻā§āϞā§āϰ āĻāĻŋāĻā§āϝā§ā§āĻžāϞāĻžāĻāĻā§āĻļāύ āĻĻā§āĻāĻžāύ⧠āĻšā§ā§āĻā§ (āĻāĻŦāĻŋāϰ āĻā§āϏ: āϰā§āĻĢāĻžāϰā§āύā§āϏ āĻŽā§āϝāĻžāĻā§āϰāĻŋā§āĻžāϞ [ā§Š])āĨ¤
āĻāĻŋāϤā§āϰ ā§§-āĻāϰ āĻĄā§āĻāĻž āĻŦāĻŋāĻļā§āϞā§āώāĻŖ āĻāϰ⧠āĻāĻŽāϰāĻž āύāĻŋāĻā§āϰ āϏāĻŋāĻĻā§āϧāĻžāύā§āϤāĻā§āϞā§āϤ⧠āĻĒā§āĻāĻāĻžāϤ⧠āĻĒāĻžāϰāĻŋ:
- āĻŽā§āĻŽāϰāĻŋ āĻ āύā§āĻ āĻĻā§āϰā§āϤ āĻāĻžāĻ āĻāϰā§, āĻāĻŋāύā§āϤ⧠āĻĄāĻŋāϏā§āĻ āĻ āύā§āĻ āϧā§āϰāĻāϤāĻŋāϰāĨ¤
- āϝāϤāĻāĻž āϏāĻŽā§āĻāĻŦ āĻĄāĻŋāϏā§āĻ āϏāĻŋāĻ (disk seeks) āĻā§āĻŋā§ā§ āĻāϞāĻž āĻāĻāĻŋāϤāĨ¤
- āϏāĻžāϧāĻžāϰāĻŖ āĻāĻŽā§āĻĒā§āϰā§āĻļāύ āĻ ā§āϝāĻžāϞāĻāϰāĻŋāĻĻāĻŽāĻā§āϞ⧠(compression algorithms) āĻŦā§āĻļ āĻĻā§āϰā§āϤ āĻāĻžāĻ āĻāϰā§āĨ¤
- āĻāύā§āĻāĻžāϰāύā§āĻā§ āĻĄā§āĻāĻž āĻĒāĻžāĻ āĻžāύā§āϰ āĻāĻā§ āϏāĻŽā§āĻāĻŦ āĻšāϞ⧠āϤāĻž āĻāĻŽāĻĒā§āϰā§āϏ (compress) āĻāϰ⧠āύā§āĻā§āĻž āĻāĻāĻŋāϤāĨ¤
- āĻĄā§āĻāĻžāϏā§āύā§āĻāĻžāϰāĻā§āϞ⧠āϏāĻžāϧāĻžāϰāĻŖāϤ āĻŦāĻŋāĻāĻŋāύā§āύ āĻ āĻā§āĻāϞ⧠(regions) āĻ āĻŦāϏā§āĻĨāĻŋāϤ āĻĨāĻžāĻā§, āϤāĻžāĻ āĻāĻĻā§āϰ āĻŽāϧā§āϝ⧠āĻĄā§āĻāĻž āĻāĻĻāĻžāύ-āĻĒā§āϰāĻĻāĻžāύ āĻāϰāϤ⧠āĻŦā§āĻļ āĻāĻžāύāĻŋāĻāĻāĻž āϏāĻŽā§ āϞāĻžāĻā§āĨ¤
āĻ ā§āϝāĻžāĻā§āĻāϞā§āĻŦāĻŋāϞāĻŋāĻāĻŋ āύāĻžāĻŽā§āĻŦāĻžāϰ (Availability numbers) āĻŦāĻž āĻĒā§āϰāĻžāĻĒā§āϝāϤāĻžāϰ āĻšāĻŋāϏāĻžāĻŦ
āĻšāĻžāĻ āĻ ā§āϝāĻžāĻā§āĻāϞā§āĻŦāĻŋāϞāĻŋāĻāĻŋ (High availability) āĻšāϞ⧠āĻā§āύ⧠āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āĻĻā§āϰā§āĻ āϏāĻŽā§ āϧāϰ⧠āύāĻŋāϰāĻŦāĻā§āĻāĻŋāύā§āύāĻāĻžāĻŦā§ āĻāĻžāĻ āĻŦāĻž āĻ āĻĒāĻžāϰā§āĻļāύāĻžāϞ āĻĨāĻžāĻāĻžāϰ āĻā§āώāĻŽāϤāĻžāĨ¤ āĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻļāϤāĻžāĻāĻļā§ (percentage) āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻāϰāĻž āĻšā§āĨ¤ ā§§ā§Ļā§Ļ% āĻŽāĻžāύ⧠āĻšāϞ⧠āĻāĻŽāύ āĻāĻāĻāĻŋ āϏāĻžāϰā§āĻāĻŋāϏ āϝāĻžāϰ āĻā§āύ⧠āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ (downtime) āĻŦāĻž āĻŦāύā§āϧ āĻĨāĻžāĻāĻžāϰ āϏāĻŽā§ āύā§āĻāĨ¤ āϤāĻŦā§ āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ āϏāĻžāϰā§āĻāĻŋāϏāĻ ā§¯ā§¯% āĻĨā§āĻā§ ā§§ā§Ļā§Ļ%-āĻāϰ āĻŽāϧā§āϝ⧠āĻĨāĻžāĻā§āĨ¤
āϏāĻžāϰā§āĻāĻŋāϏ āϞā§āĻā§āϞ āĻ ā§āϝāĻžāĻā§āϰāĻŋāĻŽā§āύā§āĻ (Service Level Agreement āĻŦāĻž SLA) āĻšāϞ⧠āϏāĻžāϰā§āĻāĻŋāϏ āĻĒā§āϰā§āĻāĻžāĻāĻĄāĻžāϰāĻĻā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻŦāĻšā§āϞ āĻŦā§āϝāĻŦāĻšā§āϤ āĻļāĻŦā§āĻĻāĨ¤ āĻāĻāĻŋ āĻŽā§āϞāϤ āĻāĻĒāύāĻžāϰ (āϏāĻžāϰā§āĻāĻŋāϏ āĻĒā§āϰā§āĻāĻžāĻāĻĄāĻžāϰ) āĻāĻŦāĻ āĻāĻĒāύāĻžāϰ āĻā§āϰāĻžāĻšāĻā§āϰ āĻŽāϧā§āϝ⧠āĻāĻāĻāĻŋ āĻā§āĻā§āϤāĻŋ, āϝāĻž āĻāύā§āώā§āĻ āĻžāύāĻŋāĻāĻāĻžāĻŦā§ āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰ⧠āϝ⧠āĻāĻĒāύāĻžāϰ āϏāĻžāϰā§āĻāĻŋāϏ āĻ āĻŋāĻ āĻāϤāĻāĻž āĻāĻĒāĻāĻžāĻāĻŽ (uptime) āĻĻā§āĻŦā§āĨ¤ āĻ ā§āϝāĻžāĻŽāĻžāĻāύ (Amazon) [ā§Ē], āĻā§āĻāϞ (Google) [ā§Ģ] āĻāĻŦāĻ āĻŽāĻžāĻāĻā§āϰā§āϏāĻĢāĻā§āϰ (Microsoft) [ā§Ŧ] āĻŽāϤ⧠āĻā§āϞāĻžāĻāĻĄ āĻĒā§āϰā§āĻāĻžāĻāĻĄāĻžāϰāϰāĻž āϤāĻžāĻĻā§āϰ SLA ⧝⧝.⧝% āĻŦāĻž āϤāĻžāϰ āĻāĻĒāϰ⧠āϰāĻžāĻā§āĨ¤ āĻāĻĒāĻāĻžāĻāĻŽ āĻāϤāĻŋāĻšā§āϝāĻāϤāĻāĻžāĻŦā§ âāύāĻžāĻāύāϏâ (nines āĻŦāĻž ⧝) āĻĻāĻŋā§ā§ āĻĒāϰāĻŋāĻŽāĻžāĻĒ āĻāϰāĻž āĻšā§āĨ¤ ⧝-āĻāϰ āϏāĻāĻā§āϝāĻž āϝāϤ āĻŦā§āĻļāĻŋ, āϏāĻžāϰā§āĻāĻŋāϏ āϤāϤ āĻāĻžāϞā§āĨ¤ āϏāĻžāϰāĻŖā§ ā§Š-āĻ āĻĻā§āĻāĻžāύ⧠āĻšāϝāĻŧā§āĻā§ āĻā§āĻāĻžāĻŦ⧠⧝-āĻāϰ āϏāĻāĻā§āϝāĻž āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āϏāĻŽā§āĻāĻžāĻŦā§āϝ āĻĄāĻžāĻāύāĻāĻžāĻāĻŽā§āϰ āϏāĻžāĻĨā§ āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤāĨ¤
āϏāĻžāϰāĻŖā§ ā§Š (Table 3)
| āĻ ā§āϝāĻžāĻā§āĻāϞā§āĻŦāĻŋāϞāĻŋāĻāĻŋ (Availability) % | āĻĻā§āύāĻŋāĻ āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ | āϏāĻžāĻĒā§āϤāĻžāĻšāĻŋāĻ āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ | āĻŽāĻžāϏāĻŋāĻ āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ | āĻŦāĻžāϰā§āώāĻŋāĻ āĻĄāĻžāĻāύāĻāĻžāĻāĻŽ |
|---|---|---|---|---|
| ⧝⧝% (99%) | ā§§ā§Ē.ā§Ēā§Ļ āĻŽāĻŋāύāĻŋāĻ | ā§§.ā§Ŧā§Ž āĻāĻŖā§āĻāĻž | ā§.ā§Šā§§ āĻāĻŖā§āĻāĻž | ā§Š.ā§Ŧā§Ģ āĻĻāĻŋāύ |
| ⧝⧝.⧝⧝% (99.99%) | ā§Ž.ā§Ŧā§Ē āϏā§āĻā§āύā§āĻĄ | ā§§.ā§Ļā§§ āĻŽāĻŋāύāĻŋāĻ | ā§Ē.ā§Šā§Ž āĻŽāĻŋāύāĻŋāĻ | ā§Ģ⧍.ā§Ŧā§Ļ āĻŽāĻŋāύāĻŋāĻ |
| ⧝⧝.⧝⧝⧝% (99.999%) | ā§Žā§Ŧā§Ē.ā§Ļā§Ļ āĻŽāĻŋāϞāĻŋ āϏā§āĻā§āύā§āĻĄ | ā§Ŧ.ā§Ļā§Ģ āϏā§āĻā§āύā§āĻĄ | ⧍ā§Ŧ.ā§Šā§Ļ āϏā§āĻā§āύā§āĻĄ | ā§Ģ.⧍ā§Ŧ āĻŽāĻŋāύāĻŋāĻ |
| ⧝⧝.⧝⧝⧝⧝% (99.9999%) | ā§Žā§Ŧ.ā§Ēā§Ļ āĻŽāĻŋāϞāĻŋ āϏā§āĻā§āύā§āĻĄ | ā§Ŧā§Ļā§Ē.ā§Žā§Ļ āĻŽāĻŋāϞāĻŋ āϏā§āĻā§āύā§āĻĄ | ⧍.ā§Ŧā§Š āϏā§āĻā§āύā§āĻĄ | ā§Šā§§.ā§Ģā§Ŧ āϏā§āĻā§āύā§āĻĄ |
āĻāĻĻāĻžāĻšāϰāĻŖ: āĻā§āĻāĻāĻžāϰā§āϰ QPS āĻāĻŦāĻ āϏā§āĻā§āϰā§āĻā§āϰ āĻĒā§āϰā§ā§āĻāύā§ā§āϤāĻž āĻ āύā§āĻŽāĻžāύ āĻāϰāĻž (Estimate Twitter QPS and storage requirements)
āĻ āύā§āĻā§āϰāĻš āĻāϰ⧠āĻŽāύ⧠āϰāĻžāĻāĻŦā§āύ āϝ⧠āύāĻŋāĻā§āϰ āϏāĻāĻā§āϝāĻžāĻā§āϞ⧠āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻ āĻ āύā§āĻļā§āϞāύā§āϰ āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§ā§āĻā§, āĻāĻā§āϞ⧠āĻā§āĻāĻāĻžāϰā§āϰ āĻāϏāϞ āĻĄā§āĻāĻž āύā§āĨ¤
āĻ āύā§āĻŽāĻžāύ āĻŦāĻž āϧāĻžāϰāĻŖāĻž (Assumptions):
- āĻŽāĻžāϏāĻŋāĻ āϏāĻā§āϰāĻŋā§ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠(monthly active users) ā§Šā§Ļā§Ļ āĻŽāĻŋāϞāĻŋā§āύāĨ¤
- ā§Ģā§Ļ% āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ āĻā§āĻāĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤
- āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰā§āϰāĻž āĻā§ā§ āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ ⧍āĻāĻŋ āĻāϰ⧠āĻā§āĻāĻ āĻāϰā§āύāĨ¤
- ā§§ā§Ļ% āĻā§āĻāĻā§ āĻŽāĻŋāĻĄāĻŋā§āĻž (āĻāĻŦāĻŋ/āĻāĻŋāĻĄāĻŋāĻ) āĻĨāĻžāĻā§āĨ¤
- ā§Ģ āĻŦāĻāϰā§āϰ āĻāύā§āϝ āĻĄā§āĻāĻž āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻž āĻšā§āĨ¤
āĻšāĻŋāϏāĻžāĻŦ (Estimations):
ā§§. āĻĒā§āϰāϤāĻŋ āϏā§āĻā§āύā§āĻĄā§ āĻā§ā§ā§āϰāĻŋ āĻŦāĻž āĻāĻŋāĻāĻĒāĻŋāĻāϏ (QPS) āĻāϰ āĻšāĻŋāϏāĻžāĻŦ:
- āĻĄā§āĻāϞāĻŋ āĻ ā§āϝāĻžāĻā§āĻāĻŋāĻ āĻāĻāĻāĻžāϰ āĻŦāĻž āĻĻā§āύāĻŋāĻ āϏāĻā§āϰāĻŋā§ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠(DAU) = ā§Šā§Ļā§Ļ āĻŽāĻŋāϞāĻŋā§āύ * ā§Ģā§Ļ% = ā§§ā§Ģā§Ļ āĻŽāĻŋāϞāĻŋā§āύāĨ¤
- āĻā§āĻāĻ QPS = ā§§ā§Ģā§Ļ āĻŽāĻŋāϞāĻŋā§āύ * ⧍ āĻā§āĻāĻ / ⧍ā§Ē āĻāĻŖā§āĻāĻž / ā§Šā§Ŧā§Ļā§Ļ āϏā§āĻā§āύā§āĻĄ = ~ā§Šā§Ģā§Ļā§Ļ
- āĻĒāĻŋāĻ (Peak) āĻŦāĻž āϏāϰā§āĻŦā§āĻā§āĻ QPS = ⧍ * QPS = ~ā§ā§Ļā§Ļā§Ļ
⧍. āĻŽāĻŋāĻĄāĻŋā§āĻž āϏā§āĻā§āϰā§āĻā§āϰ āĻšāĻŋāϏāĻžāĻŦ (āĻāĻŽāϰāĻž āĻāĻāĻžāύ⧠āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻŽāĻŋāĻĄāĻŋā§āĻž āϏā§āĻā§āϰā§āĻā§āϰ āĻšāĻŋāϏāĻžāĻŦ āĻāϰāĻŦ):
- āĻāĻāĻāĻŋ āĻā§āĻāĻā§āϰ āĻā§ āϏāĻžāĻāĻ:
- tweet_id: ā§Ŧā§Ē āĻŦāĻžāĻāĻ (64 bytes)
- text: ā§§ā§Ēā§Ļ āĻŦāĻžāĻāĻ (140 bytes)
- media: ā§§ āĻŽā§āĻāĻžāĻŦāĻžāĻāĻ (1 MB)
- āĻŽāĻŋāĻĄāĻŋā§āĻž āϏā§āĻā§āϰā§āĻ: ā§§ā§Ģā§Ļ āĻŽāĻŋāϞāĻŋā§āύ * ⧍ * ā§§ā§Ļ% * ā§§ āĻāĻŽāĻŦāĻŋ = āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ ā§Šā§Ļ āĻā§āϰāĻžāĻŦāĻžāĻāĻ (30 TB)
- ā§Ģ āĻŦāĻāϰā§āϰ āĻŽāĻŋāĻĄāĻŋā§āĻž āϏā§āĻā§āϰā§āĻ: ā§Šā§Ļ āĻāĻŋāĻŦāĻŋ * ā§Šā§Ŧā§Ģ āĻĻāĻŋāύ * ā§Ģ āĻŦāĻāϰ = ~ā§Ģā§Ģ āĻĒā§āĻāĻžāĻŦāĻžāĻāĻ (55 PB)
āĻāĻŋāĻĒāϏ (Tips)
āĻŦā§āϝāĻžāĻ-āĻ āĻĢ-āĻĻā§āϝ-āĻāύāĻā§āϞāĻĒ āĻāϏā§āĻāĻŋāĻŽā§āĻļāύā§āϰ āĻĒā§āϰ⧠āĻŦā§āϝāĻžāĻĒāĻžāϰāĻāĻžāĻ āĻšāϞ⧠āĻāϰ āĻĒā§āϰāĻā§āϰāĻŋā§āĻž (process)āĨ¤ āύāĻŋāĻā§āĻāϤ āĻĢāϞāĻžāĻĢāϞ āĻĒāĻžāĻā§āĻžāϰ āĻā§ā§ā§ āϏāĻŽāϏā§āϝāĻžāĻāĻŋ āĻāĻĒāύāĻŋ āĻā§āĻāĻžāĻŦā§ āϏāĻŽāĻžāϧāĻžāύ āĻāϰāĻā§āύ āϏā§āĻāĻŋ āĻŦā§āĻļāĻŋ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖāĨ¤ āĻāύā§āĻāĻžāϰāĻāĻŋāĻā§āĻžāϰāϰāĻž āĻŽā§āϞāϤ āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻŦāϞā§āĻŽ āϏāϞāĻāĻŋāĻ āϏā§āĻāĻŋāϞ (problem-solving skills) āϝāĻžāĻāĻžāĻ āĻāϰāϤ⧠āĻāĻžāύāĨ¤ āĻāĻāĻžāύ⧠āĻ āύā§āϏāϰāĻŖ āĻāϰāĻžāϰ āĻŽāϤ⧠āĻāĻŋāĻā§ āĻāĻŋāĻĒāϏ āĻĻā§āĻā§āĻž āĻšāϞā§:
- āϰāĻžāĻāύā§āĻĄāĻŋāĻ āĻāĻŦāĻ āĻ ā§āϝāĻžāĻĒā§āϰāĻā§āϏāĻŋāĻŽā§āĻļāύ (Rounding and Approximation): āĻāύā§āĻāĻžāϰāĻāĻŋāĻ āĻāϞāĻžāĻāĻžāϞā§āύ āĻāĻāĻŋāϞ āĻāĻžāĻŖāĻŋāϤāĻŋāĻ āĻšāĻŋāϏāĻžāĻŦ āĻāϰāĻž āĻŦā§āĻļ āĻāĻ āĻŋāύāĨ¤ āϝā§āĻŽāύ āϧāϰā§āύ, âā§¯ā§¯ā§¯ā§Žā§ / ⧝.ā§§â āĻāϰ āĻĢāϞāĻžāĻĢāϞ āĻā§? āĻāĻ āϧāϰāύā§āϰ āĻāĻāĻŋāϞ āĻ āĻā§āĻā§āϰ āĻĒā§āĻāύ⧠āĻāĻĒāύāĻžāϰ āĻŽā§āϞā§āϝāĻŦāĻžāύ āϏāĻŽā§ āύāώā§āĻ āĻāϰāĻžāϰ āĻā§āύ⧠āĻĒā§āϰā§ā§āĻāύ āύā§āĻāĨ¤ āĻāĻĒāύāĻžāϰ āĻāĻžāĻā§ āύāĻŋāĻā§āĻāϤ āύāĻŋāϰā§āĻā§āϞāϤāĻž (Precision) āĻāĻļāĻž āĻāϰāĻž āĻšā§ āύāĻŋā§ā§āĻāĻāϰā§āϤāĻžāϰāĻžāĨ¤ āϤāĻžāĻ āϰāĻžāĻāύā§āĻĄ āύāĻžāĻŽā§āĻŦāĻžāϰ (round numbers) āĻāĻŦāĻ āĻāύā§āĻŽāĻžāύāĻŋāĻ āĻšāĻŋāϏāĻžāĻŦ (approximation) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤ āĻāĻĒāϰā§āϰ āĻāĻžāĻā§āϰ āĻ āĻā§āĻāĻāĻŋāĻā§ āϏāĻšāĻāĻāĻžāĻŦā§ āĻāĻāĻžāĻŦā§ āĻšāĻŋāϏāĻžāĻŦ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ: âā§§ā§Ļā§Ļ,ā§Ļā§Ļā§Ļ / ā§§ā§ĻâāĨ¤
- āĻāĻĒāύāĻžāϰ āĻ āύā§āĻŽāĻžāύāĻā§āϞ⧠(assumptions) āϞāĻŋāĻā§ āϰāĻžāĻā§āύ: āĻāĻĒāύāĻŋ āϝā§āϏāĻŦ āĻ āύā§āĻŽāĻžāύ āϧāϰ⧠āύāĻŋāĻā§āĻā§āύ āϏā§āĻā§āϞ⧠āϞāĻŋāĻā§ āϰāĻžāĻāĻž āĻāĻāĻāĻŋ āĻāĻžāϞ⧠āĻ āĻā§āϝāĻžāϏ, āϝāĻžāϤ⧠āĻĒāϰ⧠āĻĒā§āϰā§ā§āĻāύ āĻšāϞ⧠āϰā§āĻĢāĻžāϰā§āύā§āϏ āĻšāĻŋāϏā§āĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
- āĻāĻāĻ āĻŦāĻž āĻāĻāύāĻŋāĻāĻā§āϞ⧠(units) āĻāϞā§āϞā§āĻ āĻāϰā§āύ: āĻāĻĒāύāĻŋ āϝāĻāύ āĻāĻžāϤāĻžā§ âā§Ģâ āϞāĻŋāĻāĻā§āύ, āϤāĻāύ āĻāĻāĻŋ āĻĻāĻŋā§ā§ āĻāĻŋ ā§Ģ āĻāĻŋāϞā§āĻŦāĻžāĻāĻ (5 KB) āύāĻžāĻāĻŋ ā§Ģ āĻŽā§āĻāĻžāĻŦāĻžāĻāĻ (5 MB) āĻŦā§āĻāĻžāĻā§āĻā§āύ? āĻāĻā§āϞ⧠āύāĻž āϞāĻŋāĻāϞ⧠āĻāĻĒāύāĻŋ āύāĻŋāĻā§āĻ āĻāύāĻĢāĻŋāĻāĻāĻĄ āĻšā§ā§ āϝā§āϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āϤāĻžāĻ āĻāĻāĻ āϞāĻŋāĻā§ āϰāĻžāĻā§āύ, āĻāĻžāϰāĻŖ â5 MBâ āϞāĻŋāĻāϞ⧠āĻā§āύ⧠āĻĻā§āĻŦāĻŋāϧāĻž (ambiguity) āĻĨāĻžāĻā§ āύāĻžāĨ¤
- āϏāĻžāϧāĻžāϰāĻŖāϤ āϝā§āϏāĻŦ āĻŦā§āϝāĻžāĻ-āĻ āĻĢ-āĻĻā§āϝ-āĻāύāĻā§āϞāĻĒ āĻāϏā§āĻāĻŋāĻŽā§āĻļāύ āĻŦā§āĻļāĻŋ āĻāĻŋāĻā§āĻāĻžāϏāĻž āĻāϰāĻž āĻšāϝāĻŧ: QPS, āĻĒāĻŋāĻ QPS, āϏā§āĻā§āϰā§āĻ, āĻā§āϝāĻžāĻļ (cache), āϏāĻžāϰā§āĻāĻžāϰā§āϰ āϏāĻāĻā§āϝāĻž āĻāϤā§āϝāĻžāĻĻāĻŋāĨ¤ āĻāύā§āĻāĻžāϰāĻāĻŋāĻā§ā§āϰ āĻĒā§āϰāϏā§āϤā§āϤāĻŋāϰ āϏāĻŽā§ āĻāĻĒāύāĻŋ āĻāĻ āĻšāĻŋāϏāĻžāĻŦāĻā§āϞ⧠āĻ āύā§āĻļā§āϞāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻĒā§āϰā§āϝāĻžāĻāĻāĻŋāϏ āĻāĻĒāύāĻžāĻā§ āύāĻŋāĻā§āĻāϤ āĻāϰāĻŦā§ (Practice makes perfect)āĨ¤
āĻ āĻāĻŋāύāύā§āĻĻāύ, āĻāĻĒāύāĻŋ āĻāϤāĻĻā§āϰ āĻĒāϰā§āϝāύā§āϤ āĻĒā§ā§ āĻļā§āώ āĻāϰā§āĻā§āύ! āĻĻāĻžāϰā§āĻŖ āĻāĻžāĻ āĻāϰā§āĻā§āύ, āĻāĻŦāĻžāϰ āύāĻŋāĻā§āϰ āĻĒāĻŋāĻ āĻāĻāĻā§ āĻāĻžāĻĒā§ā§ āĻĻāĻŋāύ!