"Jawaban" saya panjang - kuncinya adalah untuk tidak membingungkan 'throughput' dengan 'bandwidth' - meskipun 'bandwidth' dapat menjadi faktor pembatas
Singkatnya, throughput Anda mungkin terbatas meskipun bandwidth Anda tidak jenuh.
Saya harus membantu orang memahami dampak tumpukan aplikasi multi-tier.
Untuk aspek komunikasi TCP saya menggunakan perbedaan dalam RTT (round-trip-time).
Untuk single-tier Anda dapat membandingkan alamat IP lokal (pada NIC) dengan lo0 (loopback).
Untuk multi-tier Anda membandingkan / menghitung alamat "lebih jauh", misalnya, multi-tier dapat berupa dua VM di host yang sama, atau bisa juga host yang berbeda di pusat data yang sama, atau bisa juga di pusat data yang berbeda (mungkin jaraknya hanya 500 meter, tapi masih beda).
FYI: untuk banyak aplikasi, perbedaan RTT dapat diabaikan, tetapi untuk aplikasi yang melakukan 10-100 dari ribuan pesan kecil untuk waktu aplikasi RTT dapat menjadi hambatan.
(Saya telah melihat situasi di mana "batch membutuhkan waktu hampir 6 jam lebih lama di multi-tier ketika RTT 0,25 milidetik lebih lama, dibandingkan dengan single-tier)
Jadi, test bed sederhana:
Itu
for host in 127.0.0.1 192.168.129.63 192.168.129.72 192.168.129.254 192.168.129.71 p5.aixtools.net
do
wget -q http://${host}/ -O - >/dev/null
sleep 1
done
Dan program pemantauan saya adalah tcpdump - dengan opsi -ttt
-ttt
Prints a delta (in microseconds) between current and previous line on each dump line.
Satu mikrodetik adalah satuan waktu SI yang setara dengan satu juta (0,000001 atau 10−6 atau 1 / 1.000.000). Artinya, 1000 mikrodetik == 1 milidetik.
Jadi, di dua jendela berbeda saya menjalankan tcpdump:
Untuk waktu "lokal": tcpdump -i lo0 -n -ttt port 80 Dan untuk "remote" tcpdump -I en1 -n -ttt port 80
Dalam data di bawah ini - tujuannya bukan untuk melakukan analisis apa pun, tetapi untuk menunjukkan bagaimana Anda dapat mengidentifikasi 'perbedaan' dalam waktu yang dibutuhkan untuk menyelesaikan transaksi. Ketika throughput aplikasi adalah transaksi serial - throughput per "detik | min | jam" dipengaruhi oleh total waktu yang diperlukan untuk "respons". Saya telah menemukan ini paling mudah untuk dijelaskan dengan menggunakan konsep RTT - round-trip-time.
Untuk analisis nyata ada hal-hal tambahan yang perlu dilihat. Jadi, satu-satunya baris yang akan saya perlihatkan adalah jabat tangan TCP awal, dan paket keluar pertama dan ACK yang kembali. Sebagai perbandingan, bandingkan waktu delta berapa lama sebelum "balasan" kembali.
127.0.0.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo0, link-type 0, capture size 96 bytes
00:00:00.000000 IP 127.0.0.1.42445 > 127.0.0.1.80: S 1760726915:1760726915(0) win 65535 <mss 16856,nop,wscale 2,nop,nop,timestamp 1482096651 0>
00:00:00.**000035** IP 127.0.0.1.80 > 127.0.0.1.42445: S 3339083773:3339083773(0) ack 1760726916 win 65535 <mss 16856,nop,wscale 2,nop,nop,timestamp 1482096651 1482096651>
00:00:00.000013 IP 127.0.0.1.42445 > 127.0.0.1.80: . ack 1 win 33688 <nop,nop,timestamp 1482096651 1482096651>
00:00:00.**000014** IP 127.0.0.1.80 > 127.0.0.1.42445: . ack 1 win 33688 <nop,nop,timestamp 1482096651 1482096651>
192.168.129.63
perhatikan 01.XXXXXX - untuk satu detik tidur pada antarmuka "lo0"
00:00:01.006055 IP 192.168.129.63.42446 > 192.168.129.63.80: S 617235346:617235346(0) win 65535 <mss 16856,nop,wscale 2,nop,nop,timestamp 1482096653 0>
00:00:00.**000032** IP 192.168.129.63.80 > 192.168.129.63.42446: S 1228444163:1228444163(0) ack 617235347 win 65535 <mss 16856,nop,wscale 2,nop,nop,timestamp 1482096653 1482096653>
00:00:00.000014 IP 192.168.129.63.42446 > 192.168.129.63.80: . ack 1 win 33688 <nop,nop,timestamp 1482096653 1482096653>
00:00:00.**000010** IP 192.168.129.63.80 > 192.168.129.63.42446: . ack 1 win 33688 <nop,nop,timestamp 1482096653 1482096653>
192.168.129.72
mesin virtual di host yang sama - perhatikan waktu mulai pukul 00.000000 - paket pertama ditampilkan (dan 01.XXXXXX untuk dua alamat lainnya di bawah)
root@x063:[/]tcpdump -i en1 -n -ttt port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en1, link-type 1, capture size 96 bytes
00:00:00.000000 IP 192.168.129.63.42447 > 192.168.129.72.80: S 865313265:865313265(0) win 65535 <mss 1460,nop,wscale 3,nop,nop,timestamp 1482096655 0>
00:00:00.**000125** IP 192.168.129.72.80 > 192.168.129.63.42447: S 916041515:916041515(0) ack 865313266 win 65535 <mss 1460,nop,wscale 2,nop,nop,timestamp 1481318272 1482096655>
00:00:00.000028 IP 192.168.129.63.42447 > 192.168.129.72.80: . ack 1 win 32761 <nop,nop,timestamp 1482096655 1481318272>
00:00:00.**000055** IP 192.168.129.72.80 > 192.168.129.63.42447: . ack 1 win 65522 <nop,nop,timestamp 1481318272 1482096655>
192.168.129.254
router saya - di luar tuan rumah, bukan mesin virtual.
00:00:01.005947 IP 192.168.129.63.42448 > 192.168.129.254.80: S 2756186848:2756186848(0) win 65535 <mss 1460,nop,wscale 3,nop,nop,timestamp 1482096657 0>
00:00:00.**000335** IP 192.168.129.254.80 > 192.168.129.63.42448: S 2327415811:2327415811(0) ack 2756186849 win 5792 <mss 1460,nop,nop,timestamp 44854195 1482096657,nop,wscale 2,nop,opt-14:03>
00:00:00.000022 IP 192.168.129.63.42448 > 192.168.129.254.80: . ack 1 win 32761 <nop,nop,timestamp 1482096657 44854195>
00:00:00.**000090** IP 192.168.129.63.42448 > 192.168.129.254.80: P 1:142(141) ack 1 win 32761 <nop,nop,timestamp 1482096657 44854195>
192.168.129.71
koneksi yang sama dengan 192.168.129.72, tetapi ini 'sibuk' sementara '72' menganggur. Saya berharap bahwa jabat tangan awal hampir identik
00:00:01.005093 IP 192.168.129.63.42449 > 192.168.129.71.80: S 249227688:249227688(0) win 65535 <mss 1460,nop,wscale 3,nop,nop,timestamp 1482096659 0>
00:00:00.**000072** IP 192.168.129.71.80 > 192.168.129.63.42449: S 1898177685:1898177685(0) ack 249227689 win 65535 <mss 1460,nop,wscale 2,nop,nop,timestamp 1482096104 1482096659>
00:00:00.000022 IP 192.168.129.63.42449 > 192.168.129.71.80: . ack 1 win 32761 <nop,nop,timestamp 1482096659 1482096104>
00:00:00.**000050** IP 192.168.129.71.80 > 192.168.129.63.42449: . ack 1 win 65522 <nop,nop,timestamp 1482096104 1482096659>
banyak hop
ini adalah host yang sama, hasil apache yang sama, tetapi sekarang melalui antarmuka eksternal (6 IP hop, bukan langsung) - sekarang Anda dapat efek RTT jarak jauh. (ps, saya sedikit mengubah alamat IP). Lebih penting - perhatikan bahwa ada dua paket keluar setelah jabat tangan awal sebelum ACK pertama setelah jabat tangan kembali.
Jadi, daripada RTT 25 msec, pikirkan bahwa RTT adalah 250 mikrodetik, dibandingkan dengan 25 mikrodetik - dan Anda memiliki transaksi 500 ribu (yang hanya membutuhkan tambahan 120 hingga 125 detik dibandingkan dengan lokal, dan throughputnya adalah, imho, sebanding. Tetapi dengan 50 juta transaksi (seperti yang saya lakukan dalam situasi kehidupan nyata) Anda mendapatkan tambahan 12500 detik - yang menambahkan sekitar 3,5 jam tambahan untuk "secara harfiah" pekerjaan yang sama (dan bagian dari solusi untuk kasus ini adalah membuat paket lebih besar -. ukuran rata-rata awalnya 400-450 byte).
Ingat, apa yang ingin saya tunjukkan di sini adalah cara yang cukup sederhana untuk menjelaskan perbedaan waktu keseluruhan untuk aplikasi (pekerjaan batch) untuk menyelesaikan ketika membandingkan multi-tier dengan arsitektur single-tier.
00:00:01.162974 IP 192.168.129.63.42450 > XX.85.86.223.80: S 1331737569:1331737569(0) win 65535 <mss 1460,nop,wscale 3,nop,nop,timestamp 1482096661 0>
00:00:00.**023962** IP XX.85.86.223.80 > 192.168.129.63.42450: S 3130510306:3130510306(0) ack 1331737570 win 65535 mss 1460,nop,wscale 2,nop,nop,timestamp 1482096106 1482096661,nop,opt-14:03>
00:00:00.000025 IP 192.168.129.63.42450 > XX.85.86.223.80: . ack 1 win 32761 <nop,nop,timestamp 1482096661 1482096106>
00:00:00.000062 IP 192.168.129.63.42450 > XX.85.86.223.80: P 1:142(141) ack 1 win 32761 <nop,nop,timestamp 1482096661 1482096106>
00:00:00.**024014** IP XX.85.86.223.80 > 192.168.129.63.42450: . ack 1 win 65522 <nop,nop,timestamp 1482096107 1482096661>
Hal lain yang saya "sukai" tentang penggunaan tcpdump adalah program yang tersedia secara umum. Tidak ada tambahan yang perlu diinstal.