Năm 2010, trong bài chia sẻ về những bài học từ việc xây dựng Software Systems ở Google với sinh viên Đại học Stanford, Tiến sĩ Jeff Dean – Trưởng khoa của Google’s School of Infrastructure Wizardry, có vai trò quan trọng trong nhiều hệ thống ở Google như: TensorFlow, ProtocolBuffers, Bigtable, MapReduce, LevelDB, … – đã tiết lộ thời gian thực thi của các computer operations điển hình.
Mặc dù các con số trong đó có thể đã không còn đúng với những máy tính mạnh mẽ ngày nay, nhưng chúng ta vẫn có thể dựa vào những con số đó để dễ dàng hình dung về sự nhanh và chậm khác nhau của các computer operations.
Operation | Thời gian thực thi |
---|---|
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 = 10 μs |
Send 2K bytes over 1 Gbps network | 20.000 ns = 20 μs |
Read 1 MB sequentially from memory | 250.000 ns = 250 μs |
Round trip within same datacenter | 500.000 ns = 500 μs |
Disk seek | 10.000.000 ns = 10 ms |
Read 1 MB sequentially from network | 10.000.000 ns = 10 ms |
Read 1 MB sequentially from disk | 30.000.000 ns = 30 ms |
Send packet CA->Netherlands->CA | 150.000.000 ns = 150 ms |
LƯU Ý
ns = nanosecond, μs = microsecond, ms = millisecond
1 ns = 10⁻⁹ seconds
1 μs= 10⁻⁶ seconds = 1.000 ns
1 ms = 10⁻³ seconds = 1.000 μs = 1.000.000 ns
Sau đó, một software engineer của Google đã xây dựng một công cụ để visualize các số liệu trên của Tiến sĩ Jeff Dean.
Bằng cách phân tích các số liệu này, chúng ta có thể dễ dàng hiểu hơn về các lý thuyết mà các thầy cô trên trường hay nhắc đến:
- Tốc độ đọc dữ liệu từ memory nhanh hơn ổ cứng (disk) nhiều như thế nào.
- Read 1 MB sequentially from memory (250.000 ns = 250 μs)
- Read 1 MB sequentially from disk (30.000.000 ns = 30 ms).
- Hạn chế thực hiện tìm kiếm trên ổ cứng nhất có thể.
- Disk seek (10.000.000 ns = 10 ms)
- Các thuật toán nén dữ liệu (compress) cơ bản thực hiện rất nhanh. Hãy thực hiện nén dữ liệu trước khi truyền qua internet nếu có thể.
- Compress 1K bytes with Zippy (10.000 ns = 10 μs)
- Các Data Center thường được đặt ở các region khác nhau, vì vậy sẽ có độ trễ giữa thời gian truyền tin giữa chúng.
- Send packet CA->Netherlands->CA (150.000.000 ns = 150 ms)
Lời nhắn
Bạn có thể tham khảo thêm những bài viết trong series “System Design” của mình trên blog này nhé. Hi vọng kiến thức này hữu ích với bạn.
Follow mình trên Facebook “CLB Lập trình – THPT Ngọc Tảo” hoặc kênh Youtube “Tờ Mờ Sáng học Lập trình” để cùng nhau học tập, chia sẻ những kiến thức công nghệ và lập trình hoàn toàn miễn phí nhé!
Facebook CLB Lập trình – THPT Ngọc Tảo: https://www.facebook.com/clb.it.ngoctao/
Youtube Tờ Mờ Sáng học Lập trình: https://www.youtube.com/@tmsanghoclaptrinh
Hẹn gặp lại 👋
Bạn có thể đọc thêm
Clean Architecture: A Craftsman’s Guide to Software Structure and Design – Robert C. Martin
Designing Data – Insensitive applications – Martin Kleppmann
System Analysis and Design – Alan Dennis, Barbara Haley Wixom, Roberta M. Roth
System Design Interview – Alex Xu
Modern Systems Analysis and Design – Joseph Valacich, Joey George
Head First Design Patterns – Eric Freeman, Elisabeth Robson