封筒裏の計算の大切さ
性能やスケーラビリティが求められるシステムでは、どこにどれくらいの性能オーダーが必要なのかを検討するのは、アーキテクチャを検討する上でとても重要になる。封筒裏の計算の段階で大体のオーダーがわかれば、必要になるSWのアーキテクチャ、アルゴリズム、ハードがある程度はわかり、そのレベルで破綻していないことは事前に検証ができる。
それらの大体のオーダーについて、以下の3つのblogではまとめている。開発/インフラ運用の両方で、どこでどの程度の性能オーダーになっているのかを理解できていると、破綻のしない開発/運用が行えると思う。
- http://highscalability.com/blog/2011/1/26/google-pro-tip-use-back-of-the-envelope-calculations-to-choo.html
- http://duartes.org/gustavo/blog/post/what-your-computer-does-while-you-wait
- http://nippondanji.blogspot.com/2009/03/ssd-fusion-io-iodrive-duopci-expiress.html
ハードも年々進化していくわけで、どのようなアーキテクチャでどのようなオーダーで、どの部分が動作するのかについては、意識してウォッチしていきたいと思う今日この頃。
L1 cache reference 0.5 ns Branch mispredict 5 ns L2 cache reference 7 ns Mutex lock/unlock 100 ns Main memory reference 100 ns Compress 1K bytes with Zippy 10,000 ns Send 2K bytes over 1 Gbps network 20,000 ns Read 1 MB sequentially from memory 250,000 ns Round trip within same datacenter 500,000 ns Disk seek 10,000,000 ns Read 1 MB sequentially from network 10,000,000 ns Read 1 MB sequentially from disk 30,000,000 ns Send packet CA->Netherlands->CA 150,000,000 ns