Apa cara terbaik untuk mentransfer satu file besar melalui tautan WAN berkecepatan tinggi dan latensi tinggi?

21

Ini terlihat terkait dengan ini , tetapi agak berbeda.

Ada tautan WAN ini antara dua situs perusahaan, dan kita perlu mentransfer satu file yang sangat besar (Oracle dump, ~ 160 GB).

Kami memiliki bandwidth 100 Mbps penuh (telah diuji), tetapi sepertinya koneksi TCP tunggal tidak dapat memaksimalkannya karena cara kerja TCP (ACK, dll.). Kami menguji tautan dengan iperf , dan hasilnya berubah secara dramatis ketika meningkatkan Ukuran Jendela TCP: dengan pengaturan basis, kami mendapatkan ~ 5 Mbps throughput, dengan WS yang lebih besar kita bisa mencapai ~ 45 Mbps, tetapi tidak lebih dari itu. Latensi jaringan sekitar 10 ms.

Karena penasaran, kami menjalankan iperf menggunakan lebih dari satu koneksi tunggal, dan kami menemukan bahwa, ketika menjalankan empat dari mereka, mereka memang akan mencapai kecepatan masing-masing ~ 25 Mbps, mengisi semua bandwidth yang tersedia; jadi kuncinya terlihat dalam menjalankan beberapa transfer simultan.

Dengan FTP, segalanya menjadi lebih buruk: bahkan dengan pengaturan TCP yang dioptimalkan (Ukuran Jendela tinggi, MTU maks., Dll.) Kami tidak bisa mendapatkan lebih dari 20 Mbps dalam satu transfer. Kami mencoba melakukan FTP beberapa file besar pada saat yang bersamaan, dan memang segalanya menjadi jauh lebih baik daripada saat mentransfer satu file saja; tetapi kemudian pelakunya menjadi disk I / O, karena membaca dan menulis empat file besar dari bottleneck disk yang sama segera; juga, kami tampaknya tidak dapat membagi satu file besar itu menjadi yang lebih kecil dan kemudian menggabungkannya kembali, setidaknya tidak pada waktu yang dapat diterima (jelas kami tidak dapat menghabiskan penyambungan / penggabungan kembali file waktu yang sebanding dengan dari memindahkannya).

Solusi ideal di sini adalah alat multithreaded yang dapat mentransfer berbagai potongan file secara bersamaan; semacam program peer-to-peer seperti emule atau BitTorrent sudah melakukannya, tetapi dari satu sumber ke satu tujuan. Idealnya, alat ini akan memungkinkan kita untuk memilih berapa banyak koneksi paralel untuk digunakan, dan tentu saja mengoptimalkan disk I / O untuk tidak melompat (terlalu) secara liar di antara berbagai bagian file.

Apakah ada yang tahu alat seperti itu?

Atau, adakah yang bisa menyarankan solusi yang lebih baik dan / atau sesuatu yang sudah kita tidak coba?

PS Kami sudah memikirkan untuk mendukung itu ke tape / disk dan secara fisik mengirimkannya ke tujuan; itu akan menjadi ukuran ekstrem kita jika WAN tidak memotongnya, tetapi, seperti yang dikatakan AS Tanenbaum, "Jangan pernah meremehkan lebar pita sebuah station wagon yang penuh dengan kaset yang meluncur deras di jalan raya."

Massimo
sumber
1
Karena penasaran, apakah waktu yang dibutuhkan sangat kritis? Juga, apakah menjenuhkan tautan selama transfer 160Gb tidak berdampak pada jaringan Anda yang lain?
Bryan
6
Saya ingat mengirimkan beberapa autoloader DLT dan beberapa ratus kartrid kepada Pelanggan di tahun '99. Kami menghitung kapasitas baku mobil saya dengan sekitar 200 kartrid DLT IV yang dimuat di dalamnya (masing-masing kapasitas 35GB) sekitar 6,3TB. Saya berkendara dari kantor kami ke situs Pelanggan di sekitar 55 mintues, memberikan "Evan di Metro Geo mengemudi seperti orang gila di Interstate" mekanisme transportasi cadangan throughput yang efektif sekitar 118GB / menit. Throughput yang baik, tetapi latensi adalah pembunuh ...> senyum <
Evan Anderson
Bryan: ya, waktu sangat penting (dibutuhkan sekitar DUA PULUH JAM dengan standar FTP dan pengaturan jaringan standar), dan tidak, tidak akan ada masalah dalam menjenuhkan tautan, karena transfer akan dijadwalkan dalam waktu tidak bekerja.
Massimo
Evan: itulah yang saya maksud ;-)
Massimo
Saya telah berhadapan dengan situasi yang sama, dengan ~ 200GB dari SQL .bak, kecuali satu-satunya cara saya bisa mendapatkan tautan WAN ke saturate adalah dengan FTP. Saya akhirnya menggunakan 7-zip dengan kompresi nol untuk memecahnya menjadi potongan-potongan 512MB. Waktu "Kompresi" dan "dekompresi" cukup singkat; semuanya jauh lebih baik daripada menyekop media fisik di seluruh negeri. (Situs berada di pantai yang berlawanan dari AS)
Adrien

Jawaban:

15

Mencari "transfer file latensi tinggi" memunculkan banyak hits menarik. Jelas, ini adalah masalah yang telah dimasukkan oleh komunitas CompSci dan komunitas komersial.

Beberapa penawaran komersial yang tampaknya sesuai dengan tagihan:

  • FileCatalyst memiliki produk yang dapat mengalirkan data melalui jaringan latensi tinggi baik menggunakan UDP atau beberapa aliran TCP. Mereka juga punya banyak fitur lain (kompresi on-the-fly, transfer delta, dll).

  • The FASP transfer file "teknologi" dari Aspera tampaknya sesuai dengan tagihan untuk apa yang Anda cari, juga.

Di dunia open-source, proyek uftp terlihat menjanjikan. Anda tidak terlalu membutuhkan kemampuan multicastnya, tetapi ide dasar untuk meluncurkan file ke penerima, menerima NAK untuk blok yang terlewat di akhir transfer, dan kemudian meledakkan blok-blok NAK'd (busa, bilas, ulangi) terdengar seperti itu akan melakukan apa yang Anda butuhkan, karena tidak ada ACK'ing (atau NAK'ing) dari penerima sampai setelah transfer file selesai satu kali. Dengan asumsi jaringan hanya laten, dan tidak lossy, ini bisa melakukan apa yang Anda butuhkan juga.

Evan Anderson
sumber
uftp terlihat sangat menjanjikan, saya bisa mencapai 30 Mbps di antara dua komputer desktop (yang pasti tidak terlalu hebat dalam kinerja disk); Saya akan mengujinya di server "nyata" segera. Saya tidak bisa mendapatkan lisensi demo FileCatalyst karena beberapa bug dalam formulir pendaftaran (terus mengatakan nomor permintaan telah digunakan), dan fasp tidak menawarkannya.
Massimo
60 Mbps antara dua komputer dengan disk yang tepat dan buffer penerimaan yang besar. Besar!
Massimo
Saya suka perangkat lunak bebas / sumber terbuka! > tersenyum <Aku pasti akan mencoba uftp dengan beberapa hal yang aku lakukan. Saya bertanya-tanya bagaimana hal itu akan dilakukan dalam solusi pencitraan disk multicast berbasis Linux yang saya kumpulkan beberapa tahun yang lalu menggunakan "udpcast".
Evan Anderson
beberapa waktu yang lalu saya bertanya serverfault.com/questions/173358/multicast-file-transfers Akhirnya saya sampai pada kesimpulan bahwa uftp dan mrsync adalah alat pilihan. Silakan kirim komentar di sana jika Anda melakukan sesuatu yang berguna dengan uftp, karena saya akan menggunakan satu atau yang lain lagi tahun ini (persiapan untuk konferensi).
Jed Daniels
2
Ketika saya bekerja dengan UFTP, UDT, dan UDP Tsunami, UFTP memiliki kinerja terburuk di antara ketiganya. Tentu saja, itu mungkin protokol yang paling matang. UDT hanya menyediakan protokol transfer sederhana dan dirancang untuk bertindak sebagai perpustakaan untuk mengembangkan perangkat lunak khusus dan penulis Tsunami benar-benar mengarahkan kami ke UDT karena Tsunami belum dikembangkan secara aktif baru-baru ini karena kurangnya waktu.
Thomas Owens
9

Saran yang sangat aneh yang satu ini .. Siapkan server web sederhana untuk meng-host file di jaringan Anda (saya sarankan nginx, kebetulan), lalu atur pc dengan firefox di ujung lainnya, dan instal ekstensi DownThemAll .

Ini akselerator unduhan yang mendukung chunking dan re-assembly.
Anda dapat memecah setiap unduhan menjadi 10 bagian untuk dirakit ulang, dan itu sebenarnya membuat segalanya lebih cepat!

(peringatan: Saya belum pernah mencobanya pada apa pun sebesar 160GB, tetapi itu bekerja dengan baik dengan file iso 20GB)

Tom O'Connor
sumber
40 Mbps antara komputer yang sama. Terlihat sangat bagus juga.
Massimo
1
ganti firefox dengan axel.alioth.debian.org dan itu bukan saran yang buruk.
Justin
7

The UDT transportasi mungkin adalah transportasi paling populer untuk komunikasi latency tinggi. Ini mengarah ke perangkat lunak lain mereka yang disebut Sektor / Sphere "Sistem File Terdistribusi Kinerja Tinggi dan Mesin Pemrosesan Data Paralel" yang mungkin bermanfaat untuk dilihat.

Steve-o
sumber
1
Saya melakukan beberapa pekerjaan dengan UDT untuk transfer melalui jaringan dengan latensi tinggi dan kehilangan paket tinggi. UDT jauh lebih tangguh terhadap latensi dan hilangnya paket dibandingkan protokol berbasis TCP, terutama sekali Anda mengubah algoritma kontrol kemacetan agar sesuai dengan topografi jaringan Anda.
Thomas Owens
Bahkan ada versi rsync dengan UDT built in, itu disebut "UDR". github.com/LabAdvComp/UDR
Maks
5

Jawaban saya agak terlambat, tetapi saya baru saja menemukan pertanyaan ini, sambil mencari fasp. Selama pencarian itu saya juga menemukan ini: http://tsunami-udp.sourceforge.net/ , "Tsunami UDP Protocol".

Dari situs web mereka:

Protokol transfer file ruang-pengguna yang cepat yang menggunakan kontrol TCP dan data UDP untuk transfer melalui jaringan jarak jauh berkecepatan sangat tinggi (≥ 1 Gbps dan bahkan 10 GE), dirancang untuk menyediakan lebih banyak throughput daripada yang mungkin dengan TCP melalui jaringan yang sama. jaringan.

Sejauh kecepatan berjalan, halaman menyebutkan hasil ini (menggunakan tautan antara Helsinki, Finlandia ke Bonn, Jerman melalui tautan 1GBit:

Gambar 1 - transfer internasional melalui Internet, rata-rata 800 Mbit / detik

Jika Anda ingin menggunakan akselerator unduhan, lihatlah lftp, ini adalah satu-satunya akselerator unduhan yang dapat melakukan mirror rekursif, sejauh yang saya tahu.

Jan van Haarst
sumber
1
Dalam proyek yang saya komentari sebelumnya dalam jawaban Steve-o, kami membuat tolok ukur UDT, Tsunami UDP, dan UFTP. Kami menemukan bahwa latensi memiliki dampak besar pada kinerja, sementara kehilangan paket tidak (bertentangan dengan dokumentasi Tsunami). Menambahkan 100 ms latensi ke jaringan uji menurunkan kinerja Tsunami dari sekitar 250Mbits / detik menjadi sekitar 50Mbits / detik (saya percaya saya memiliki angka dan unit saya dengan benar - sudah lama, tapi itu adalah penurunan yang sangat besar). Menambahkan 10% paket loss no jaringan latensi minimal, di sisi lain, hanya menurunkan kinerja dari 250Mbits / detik menjadi sekitar 90Mbits / detik.
Thomas Owens