Detail cfm yang tidak dapat dibatalkan. Sistem BBR: pengendalian kemacetan langsung pada kemacetan

    Lihat membual ... Kamus sinonim Rusia dan ekspresi serupa. dibawah. ed. N. Abramova, M .: Kamus Rusia, 1999. membanggakan, membanggakan Kamus sinonim Rusia ... Kamus sinonim

    Untuk menyombongkan diri, saya, saya; tidak diverifikasi. (sehari-hari). Banggakan, sombong. P. baju baru. Kamus Penjelasan Ozhegov. S.I. Ozhegov, N.Yu. Shvedova. 1949 1992 ... Kamus Penjelasan Ozhegov

    Nessov. bahasa sehari-hari 1. Bicaralah tentang diri Anda atau orang lain, dengan sesuatu atau milik Anda sendiri dengan pujian; membanggakan. 2. Janji sombong untuk melakukan sesuatu. Kamus penjelasan Efremova. T.F. Efremova. 2000 ... Kamus penjelasan modern bahasa Rusia oleh Efremova

    Boast, boast, boast, boast, boast, sombong, sombong, sombong, sombong, sombong, sombong, sombong, sombong, sombong, sombong, sombong, sombong, sombong, ...

    membanggakan - pujian, kataku, kataku ... Kamus ejaan bahasa Rusia

    membanggakan - (I), pujian / yus, la / eat, la / are ... Kamus ejaan bahasa Rusia

    Lihat Membual ... Kamus ensiklopedis

    membanggakan - lihat membanggakan; saya / yus, saya / makan; nsv; bahasa sehari-hari Saling memuji / memuji. Puji / puji kekuatanmu ... Kamus banyak ekspresi

    membanggakan - untuk / pujian / I / be / sya ... Kamus morfemik dan ejaan

    Berkembang biak (kerabat) untuk membanggakan asal-usul mereka yang mulia Cf. Trah kami melayani di bawah raja. Mengawinkan Dan kami tinggal bersamanya, hanya bertengkar. Ya, kami membanggakan kerabat kami. Koltsov. Setiap orang memiliki bakatnya masing-masing. Lihat orang Rusia tidak hidup tanpa kerabat. Lihat di moncongnya ... ... Kamus Fraseologis Penjelasan Besar Michelson

Buku

  • Buku Kedua tentang Kesalahpahaman Umum, John Lloyd, John Mitchinson. Buku Kesalahpahaman Umum pertama diterbitkan di Inggris pada tahun 2006. Dan sejak itu, sudah ada di 30 negara, buku ini menjadi buku referensi bagi mereka yang mendambakan kebenaran. Mungkin Anda pernah mempelajarinya ...
  • Puisi dari buku "Green Land", Evgeny Klyuev. Munculnya nama Yevgeny Klyuev dalam literatur hari ini mengingatkan saya pada dongeng tentang seorang tukang kebun. Seorang guru pekerja keras dan kesepian telah mengolah taman anehnya selama bertahun-tahun: bunga-bunga yang gelisah, rapuh ...

Perlengkapan berkemah ultralight menjadi semakin kompleks. Tren ini paling jelas terlihat dalam kategori hunian individu yang terus berkembang, lebih dikenal sebagai tas bivvy ("Bivi").

Jika Anda belum terbiasa dengan ragam opsi bivak yang ada, sekarang saatnya untuk memperbaikinya. Anda akan kagum dengan berbagai pilihan dan desain cerdas yang tersedia bagi pelancong independen yang ingin mengurangi bobot perlengkapan mereka.

Siapa yang menggunakan tas bivy? Orang yang:

  • Sering bepergian sendiri;
  • Lakukan pendakian tembok besar, yang membutuhkan lebih dari satu hari untuk menyelesaikannya;
  • Mereka sering melakukan pendakian jauh dengan sepeda;
  • Hitung setiap gram beban yang dibawa;
  • Jangan keberatan tidur di ruang sempit.

Dasar

Tas Bivak diciptakan untuk memenuhi kebutuhan pendaki yang membutuhkan perlindungan kantong tidur mereka dari cuaca panas selama pendakian yang berlangsung beberapa hari, terutama di tembok besar.

Kantong tidur awal tidak lebih dari penutup kantong tidur nilon tahan air yang berfungsi dengan baik menjaga kantong tidur dari hujan dan dengan ventilasi yang biasa-biasa saja.

Saat ini, konstruksi tas bivy mencakup dua lapis kain. Lapisan bawah biasanya terdiri dari turunan nilon yang kuat (biasanya taffeta, terkadang oxford), yang dilapisi dengan uretan agar tahan air. Bahan yang sama digunakan oleh sebagian besar produsen dalam produksi lantai tenda.

Tingkat atas biasanya terbuat dari nilon ripstop (kain yang lebih ringan) dan dilapisi dengan laminasi tahan air / bernapas seperti Gore-Tex®, Tegraltex atau REI Elements®.

Seiring waktu, bivak asli melahirkan produk terkait dengan karakteristik seperti tenda - bivy shelter ( bivy shelter). Meskipun sedikit lebih berat, jenis tempat berlindung ini memiliki dua fitur yang tidak ditemukan dalam bivis tradisional - area luas dari ruang kepala yang dilindungi dan perlindungan lengkap dari cuaca buruk dan serangga. Berkat fitur-fitur tersebut, popularitas hunian jenis ini semakin berkembang di kalangan konsumen yang gemar hiking, terutama mereka yang berpergian ringan (light walker).

Selain itu, ada tenda lapis ganda kategori bivy. Berat rata-rata tenda ini (sekitar 1,8 kg) lebih besar dari berat bivy standar (900 g dan lebih kecil), tetapi tenda ini menawarkan lebih banyak ruang interior bersama dengan massa yang sederhana - argumen yang menenangkan bagi penyanyi solo yang membutuhkan kemampuan untuk duduk di tempat penampungan mereka. tetapi kemampuan untuk melakukan perjalanan cahaya juga penting. Contoh: REI Sololite; Kelty Clark; Walrus Micro Swift; Sierra Designs Clip Flashlight.

Tas Bivak

Bahkan ketika dirancang dengan kain modern, tas bivvy tradisional terutama ditujukan untuk pendaki atau orang yang berpikiran minimalis - orang yang mengebor lubang di sendok mereka untuk menghemat beberapa gram ekstra.

Tas pantat biasa memiliki dua fungsi dasar.: melindungi kantong tidur dari kelembapan dan meningkatkan suhunya sekitar 5 ° C.

Bivi memiliki area kepala terbuka. Saat hujan, sedikit uap air bisa masuk melalui lubang kepala yang tidak terlindungi. Untuk meminimalkan masuknya kelembapan, kencangkan renda di sekitar lubang ini. Tentu saja, ini akan mengubah lubang kepala menjadi lubang hidung, yang tidak dapat diterima oleh sebagian orang. Tapi ini adalah kompromi kecil untuk backpacker ultralight yang menghargai tas bivvy karena berat minimumnya.

Pertimbangan lainnya

Beberapa model memungkinkan Anda membuat lubang lengan di sisi tas bivy, memungkinkan Anda untuk menyortir perlengkapan atau memasak selagi hangat dan terlindung dari cuaca buruk.
Ritsleting panjang penuh pada bivy akan membantu dengan menyediakan lebih banyak pilihan ventilasi.
Perhatikan jahitan pabrik, merek terkemuka biasanya menawarkan fitur berguna ini.
Beberapa model dilengkapi dengan tali pengikat untuk membantu menjaga permadani Anda tetap di tempatnya.
Dalam kondisi hangat, terkadang orang tidak menggunakan kantong tidur sama sekali, melainkan langsung tidur di dalam bivy bag.

Perwakilan khas tas bivak: Penampungan Pribadi Moonstone; Standard Bivy dari Penelitian Luar Ruang REI Cyclops.

Tempat penampungan seperti "bivi"

Evolusi tas bivy telah menghasilkan kategori baru tenda bertingkat rendah yang dikenal sebagai bivy shelter. Model ini memiliki sisipan jala yang terletak di area lubang kepala, serta sistem suspensi kecil (pasak, busur) yang menahan kain di atas wajah wisatawan. Dalam bivy shelter, isolasi lengkap dari serangga dan hujan dapat dicapai. Mungkin diperlukan sedikit kecerdikan untuk memberikan ventilasi selama hujan badai, tetapi itu sangat mungkin untuk dicapai.

Bagi banyak wisatawan yang bepergian jauh dan ringan, bivy shelter dengan tambahan penguatan berbentuk baji di area kepala dapat memberikan tingkat kenyamanan yang cukup. Di daerah dengan curah hujan konstan, bivy shelter kehilangan daya tariknya; akan sulit untuk menunggu badai di tempat penampungan yang tidak dapat menerima posisi duduk. Namun, menggunakan bivy shelter masuk akal dengan kondisi cuaca yang mendukung seperti Sierra Nevada. Contoh: Desain Integral Unishelter; Advanced Bivy Sack dari Penelitian Luar Ruang.

Pertimbangan lainnya

Apakah Bivi terlalu sempit untukmu? Awalnya, Anda mungkin berpikir demikian. Tapi jangan langsung membuang opsi sampul ini. Tentu saja, tenda menawarkan wisatawan tempat berlindung yang luas dan aman dengan atap di atas kepala mereka. Namun, bivi memungkinkan Anda untuk "menyatu" dengan alam secara lebih kuat. Ini hampir seperti mimpi di bawah bintang-bintang. Pada saat yang sama, Anda memiliki perlindungan yang cukup dari hujan dan serangga, yang juga ringan. Namun, jika ruang terbatas membuat Anda cemas, Anda kemungkinan besar akan merasa tidak nyaman di dalam bivy, terutama dalam cuaca buruk. Jika demikian, pertimbangkan untuk membeli tenda.

Bagaimana sirkulasi udara di dalam bivy? Laminasi bernapas / tahan air seperti Gore-Tex memungkinkan kelembapan menguap melalui kain. Sekaligus mencegah tetesan hujan merembes melalui kain. Tas bivy yang dapat bernapas / tahan air akan bekerja paling baik dalam situasi di mana tubuh turis yang hangat dan berkeringat sedang beristirahat dalam kondisi dingin dan kering. Dalam kondisi hujan, meskipun bivis modern dirancang dengan bahan dan ritsleting yang cukup tumpang tindih, Anda tidak perlu memasang ritsleting sepenuhnya. Penyiaran manual membantu menjaga tingkat kelembapan yang dapat diterima di dalam bivy bag.

Mungkinkah kondensasi terbentuk di dalam bivy? Secara potensial, ya. Pada dasarnya bivy adalah tenda satu lapis. Uap hangat dari tubuh dan paru-paru Anda naik dan bertabrakan dengan udara yang lebih dingin. Saat uap bersentuhan dengan laminasi bivy bag, udara tidak dapat lagi membawa semua kelembapan, sehingga sebagian mengumpul di bagian dalam kain yang bersangkutan. Dalam tenda lapisan ganda, kelembapan ini melewati tenda bagian dalam yang dapat bernapas dan mengendap di bagian luar. Dalam kasus bivy, ini dapat menyebabkan sedikit uap air terakumulasi di dalam. Dalam kondisi dingin, hal ini bisa memicu terbentuknya kerak es di dalam.

Akankah kantong tidur benar-benar kering di bivak? Pada kondisi cuaca hujan (basah), kain Gore-Tex terkadang bisa menghasilkan sensasi dingin dan lembab saat bersentuhan dengan kulit, namun ini hanya sensasi, bukan menjadi basah. Ventilasi yang baik membantu meminimalkan sensasi ini.

Ringkasan singkat

Tas Bivak: Akan menjadi pilihan yang baik untuk pendaki dan pendaki minimalis yang melakukan pendakian singkat (satu dan dua hari). Membutuhkan pola pikir yang beradaptasi dengan baik dengan kondisi Spartan.

Bivy Shelter: Populer di kalangan pengendara sepeda ultralight jarak jauh. Pilihan yang baik untuk wisatawan yang bepergian di daerah dengan curah hujan sedikit. Ruang ekstra dan perlindungan penuh menjadikannya pilihan yang dapat diterima bagi wisatawan yang mampu beradaptasi secara psikologis untuk bermalam di ruang terbatas. Sempit tapi ringan.

Tenda Kecil: Beberapa model dalam kisaran 2kg menawarkan kombinasi kelapangan dan bobot yang sederhana; dalam banyak kasus akan menjadi pilihan yang disukai untuk turis pada umumnya.

  • Transfer

Pengukuran bottleneck throughput dengan paket double pass time

Dengan semua akun, internet saat ini tidak dapat memindahkan data secepat yang seharusnya. Sebagian besar pengguna seluler di seluruh dunia mengalami penundaan dalam hitungan detik hingga menit: hotspot WiFi publik di bandara dan konferensi bahkan lebih buruk. Fisikawan dan ahli iklim perlu bertukar petabyte data dengan kolega di seluruh dunia, tetapi mereka menemukan bahwa infrastruktur multi-gigabit mereka yang rumit seringkali hanya menghasilkan beberapa megabit per detik pada tautan lintas benua.

Masalah ini muncul dari pilihan arsitektur yang dibuat selama pembuatan kontrol kemacetan TCP di tahun 80-an - kemudian hilangnya paket diputuskan untuk diartikan sebagai "kemacetan". Kesetaraan konsep-konsep ini benar untuk saat itu, tetapi hanya karena keterbatasan teknologi, dan bukan berdasarkan definisi. Ketika NIC (pengontrol antarmuka jaringan) ditingkatkan dari megabit ke gigabit dan chip memori dari kilobyte ke gigabyte, hubungan antara kehilangan paket dan kemacetan menjadi kurang jelas.

Dalam TCP modern, kontrol kemacetan kehilangan paket - bahkan dalam teknologi paling canggih dari jenisnya, CUBIC - adalah akar penyebab masalah ini. Jika buffer bottleneck terlalu besar, kontrol kemacetan kehilangan paket membuat mereka tetap penuh, menyebabkan buffering jaringan yang tidak perlu. Jika buffer terlalu kecil, sistem kontrol kemacetan kehilangan paket akan salah menafsirkan kehilangan paket sebagai sinyal kemacetan, yang menyebabkan berkurangnya throughput. Memecahkan masalah ini membutuhkan alternatif untuk kontrol kemacetan kehilangan paket. Untuk mencari alternatif ini, Anda perlu memahami di mana dan bagaimana kemacetan terjadi.

Kemacetan dan kemacetan

Hanya ada satu tautan paling lambat dalam koneksi TCP (dupleks penuh) pada waktu tertentu, atau kemacetan ke segala arah. Hambatan penting karena alasan berikut:
  • Ini menentukan kecepatan transfer data maksimum pada koneksi. Ini adalah properti utama dari aliran data yang tidak terkompresi (misalnya, bayangkan jalan raya enam jalur pada jam sibuk, jika kecelakaan membatasi satu bagian kecil dari jalan menjadi hanya satu jalur. Lalu lintas di depan lokasi kecelakaan tidak akan bergerak lebih cepat daripada lalu lintas yang melalui jalur tersebut.
  • Di sinilah antrian terus-menerus terbentuk. Mereka menurun hanya jika intensitas aliran keluar dari bottleneck melebihi intensitas aliran masuk. Untuk koneksi yang beroperasi pada bit rate tertinggi, semua aliran keluar ke bottleneck selalu memiliki outbound rate yang lebih tinggi, sehingga antrian berpindah ke bottleneck.
Terlepas dari berapa banyak tautan dalam koneksi dan apa kecepatan masing-masing, dari sudut pandang TCP, rute kompleks sewenang-wenang direpresentasikan sebagai koneksi tunggal dengan RTT yang sama (waktu lintasan ganda dari paket, yaitu waktu perjalanan pulang pergi) dan bandwidth dari bottleneck ... Dua keterbatasan fisik RTprop (waktu propagasi bolak-balik) dan BtlBw (bottleneck bandwidth) mempengaruhi kinerja transmisi. (Jika jalur jaringan adalah pipa material, RTprop adalah panjang pipa, dan BtlBw adalah diameternya).

Gambar 1 menunjukkan berbagai kombinasi RTT dan bit rate dengan volume data. dalam penerbangan, yaitu, dalam pesawat (data dikirim, tetapi tanpa konfirmasi pengiriman). Garis biru menunjukkan batas RTprop, garis hijau menunjukkan batas BtlBw, dan garis merah menunjukkan buffer bottleneck. Operasi di area abu-abu tidak mungkin karena bertentangan dengan setidaknya satu batasan. Transisi antara batasan menyebabkan pembentukan tiga wilayah (terbatas aplikasi, terbatas bandwidth, dan terbatas buffer) dengan perilaku yang berbeda secara kualitatif.

Gambar 1

Ketika tidak ada cukup data dalam penerbangan untuk mengisi pipa, RTprop menentukan perilakunya; jika tidak, BtlBw mendominasi. Garis pembatas berpotongan pada suatu titik, yang juga merupakan pipa BDP (produk penundaan-bandwidth, turunan dari bandwidth dan penundaan). Karena pipa penuh setelah titik ini, kelebihannya membuat antrean ke bottleneck, menghasilkan hubungan linier antara RTT dan data dalam penerbangan, yang ditunjukkan pada grafik atas. Paket akan dibuang ketika kelebihan melebihi kapasitas buffer. Kemacetan hanyalah lokasi yang berkelanjutan di sebelah kanan garis BDP, dan pengendalian kemacetan - semacam skema untuk menetapkan batas seberapa jauh di sebelah kanan garis BDP, rata-rata, terjadi transfer data.

Loss congestion control beroperasi di tepi kanan area terbatas bandwidth, menyediakan bandwidth bottleneck penuh dengan mengorbankan latensi tinggi dan seringnya kehilangan paket. Kembali pada hari-hari ketika memori mahal, ukuran buffer hanya sedikit lebih besar dari BDP, yang meminimalkan latensi berlebih dari kontrol kemacetan lossy. Pemotongan harga memori selanjutnya mengakibatkan peningkatan buffering jaringan berlebih dan peningkatan RTT ke detik, bukan milidetik.

Di tepi kiri area terbatas kapasitas, terdapat titik pengoperasian dengan kondisi yang lebih baik daripada di sebelah kanan. Pada tahun 1979, Leonard Kleinrock menunjukkan bahwa titik operasi ini optimal, ini memaksimalkan throughput yang sebenarnya sambil meminimalkan latensi dan kerugian, baik untuk koneksi individual maupun untuk jaringan secara keseluruhan. Sayangnya, sekitar waktu yang sama, Jeffrey Yaffe membuktikan bahwa tidak mungkin membuat algoritme terdistribusi yang menyatu pada titik operasi ini. Penemuan ini mengubah arah penelitian. Alih-alih mencari algoritme terdistribusi yang mencari titik operasi Kleinrock yang optimal, para peneliti mulai mengeksplorasi pendekatan alternatif untuk pengendalian kemacetan.

Grup kami di Google menghabiskan waktu berjam-jam setiap hari untuk memeriksa log penangkapan tajuk TCP dari seluruh dunia, memahami anomali dan patologi perilaku. Kami biasanya mencari karakteristik kunci dari rute, RTprop dan BtlBw terlebih dahulu. Fakta bahwa mereka dapat diturunkan dari jejak jaringan menunjukkan bahwa kesimpulan Jaffe mungkin tidak sesederhana kelihatannya. Kesimpulannya bergantung pada ketidakpastian pengukuran fundamental (misalnya, apakah peningkatan terukur dalam RTT disebabkan oleh perubahan panjang jalur, penurunan bandwidth bottleneck, atau peningkatan latensi antrian karena lalu lintas dari koneksi lain). Meskipun tidak mungkin untuk menghilangkan ketidakpastian dari setiap pengukuran tertentu, perilaku senyawa dari waktu ke waktu memberikan gambaran yang lebih jelas, menyarankan kemungkinan penerapan strategi pengukuran yang dirancang untuk menghilangkan ketidakpastian.

Dengan menggabungkan pengukuran ini dengan loop pelacakan yang andal, menerapkan kemajuan terbaru dalam sistem kontrol, harapannya adalah untuk mengembangkan protokol kontrol kemacetan terdistribusi yang merespons kemacetan aktual, daripada kehilangan paket atau penundaan antrian pendek. Dan itu akan bertemu dengan probabilitas tinggi pada titik operasi Kleinrock yang optimal. Maka dimulailah proyek tiga tahun kami untuk mengembangkan sistem manajemen kemacetan berdasarkan pengukuran dua parameter yang menjadi ciri sebuah rute: kapasitas kemacetan dan waktu akses ganda paket, atau BBR.

Karakteristik bottleneck

Koneksi bekerja dengan bandwidth maksimum dan latensi minimum ketika (keseimbangan kecepatan) tingkat kedatangan paket ke bottleneck adalah BtlBw dan (saluran penuh) jumlah total data dalam penerbangan sama dengan BDP ().

Kondisi pertama memastikan bahwa bottleneck digunakan 100%. Yang kedua memastikan bahwa kami memiliki cukup data untuk mencegah kemacetan sederhana, tetapi tidak meluap saluran. Kondisi keseimbangan kecepatan itu sendiri tidak menjamin bahwa tidak ada antrian, hanya ukurannya yang tidak berubah (misalnya, jika koneksi dimulai dengan mengirimkan Jendela Awal 10-paket ke BDP lima paket, kemudian beroperasi pada kecepatan kemacetan yang persis sama, lalu lima dari sepuluh paket awal akan mengisi saluran, dan kelebihannya akan membentuk antrean tetap di tempat sempit yang tidak bisa larut). Demikian pula, kondisi saluran penuh tidak menjamin bahwa tidak ada antrian (misalnya, koneksi mengirimkan BDP dalam semburan melalui BDP / 2 dan sepenuhnya mengeksploitasi kemacetan, tetapi antrian rata-rata adalah BDP / 4). Satu-satunya cara untuk meminimalkan antrian di bottleneck dan di seluruh saluran adalah dengan memenuhi kedua kondisi tersebut pada waktu yang bersamaan.

Nilai BtlBw dan RTprop berubah selama masa sambungan, jadi nilai tersebut harus terus dievaluasi. Saat ini, TCP memantau RTT (interval waktu antara pengiriman paket data ke pesan yang telah dikirimkan) karena diperlukan untuk menentukan kerugian. Pada waktu tertentu,


di mana "kebisingan" dari antrian di sepanjang rute, strategi penerima dengan penundaan ucapan terima kasih, akumulasi ucapan terima kasih, dll. RTprop adalah karakteristik fisik dari tautan dan hanya berubah jika saluran itu sendiri berubah. Karena perubahan saluran terjadi dalam skala waktu RTprop, maka penilaian waktu yang tidak memihak dan efektif akan dilakukan
yaitu, luncurkan dalam jendela waktu (yang biasanya puluhan detik hingga menit).

Tidak seperti RTT, tidak ada dalam spesifikasi TCP yang memerlukan implementasi untuk melacak throughput bottleneck, tetapi perkiraan yang baik untuk hal ini dapat diperoleh dari melacak tingkat pengiriman. Ketika konfirmasi pengiriman paket dikembalikan ke pengirim, itu menunjukkan RTT paket dan mengumumkan pengiriman data dalam penerbangan ketika paket pergi. Kecepatan pengiriman rata-rata antara mengirim paket dan menerima konfirmasi adalah rasio data yang dikirim dengan waktu yang telah berlalu :. Tingkat ini harus kurang dari atau sama dengan throughput dari kemacetan (kuantitas pada saat kedatangan diketahui dengan tepat, sehingga seluruh ketidakpastian terletak di mana harus lebih besar dari atau sama dengan interval kedatangan saat ini; oleh karena itu, rasio harus kurang dari atau sama dengan tingkat pengiriman sebenarnya, yang, dalam antrian, dibatasi dari atas oleh kapasitas bottleneck). Oleh karena itu, jendela kecepatan pengiriman maksimum adalah perkiraan BtlBw yang efisien dan non-partikuler:


di mana jendela waktu biasanya enam sampai sepuluh RTT.

TCP harus mencatat waktu di mana setiap paket dikirim untuk menghitung RTT. BBR menambah catatan ini dengan jumlah total data yang dikirim sehingga kedatangan setiap laporan pengakuan baik RTT dan pengukuran tingkat pengiriman, yang diubah filter ke perkiraan RTprop dan BtlBw.

Perhatikan bahwa nilai-nilai ini sepenuhnya independen: RTprop dapat berubah (misalnya, ketika rute diubah), tetapi memiliki hambatan yang sama, atau BtlBw dapat berubah (misalnya, ketika bandwidth nirkabel berubah) tanpa mengubah rute. (Independensi kedua batasan adalah alasan mengapa keduanya harus diketahui untuk menghubungkan perilaku pengiriman ke rute pengiriman.) Karena RTprop hanya terlihat di sisi kiri BDP, dan BtlBw hanya terlihat di sisi kanan pada Gambar 1, mereka mematuhi prinsip ketidakpastian: setiap kali salah satu dari keduanya dapat diukur, yang lain tidak dapat diukur. Secara intuitif, hal ini dapat dipahami sebagai berikut: untuk menentukan kapasitas saluran, itu harus dipenuhi, yang membuat antrian yang tidak memungkinkan untuk mengukur panjang saluran. Misalnya, aplikasi dengan protokol permintaan / tanggapan mungkin tidak pernah mengirim cukup data untuk mengisi saluran dan mengamati BtlBw. Banyak jam mentransfer data dalam jumlah besar dapat menghabiskan seluruh waktunya di area dengan bandwidth terbatas dan hanya menerima satu sampel RTprop dari RTT dari paket pertama. Prinsip ketidakpastian yang melekat berarti bahwa selain perkiraan untuk merekonstruksi dua parameter rute, harus ada status yang dilacak secara bersamaan dan apa yang dapat dipelajari pada titik operasi saat ini dan, karena informasi kehilangan kesegaran, bagaimana cara pindah ke titik operasi di mana data yang lebih baru.

Memetakan aliran paket ke jalur pengiriman

Algoritma BBR utama memiliki dua bagian:

Saat kami menerima konfirmasi (ack)

Setiap konfirmasi memberikan RTT baru dan pengukuran tingkat pengiriman rata-rata yang memperbarui perkiraan RTprop dan BtlBw:

Fungsi onAck (paket) rtt \u003d sekarang - paket.sendtime update_min_filter (RTpropFilter, rtt) terkirim + \u003d packet.size deliver_time \u003d sekarang deliveryRate \u003d (terkirim - packet.delivered) / (deliver_time - packet.delivered_time) if (deliveryRate\u003e BtlBwFilter. currentMax ||! packet.app_limited) update_max_filter (BtlBwFilter, deliveryRate) jika (app_limited_until\u003e 0) app_limited_until \u003d app_limited_until - paket.size
Pemeriksaan if diperlukan karena masalah ambiguitas yang dibahas di paragraf terakhir: pengirim dapat dibatasi oleh aplikasi, yaitu aplikasi dapat kehabisan data untuk mengisi jaringan. Ini adalah situasi yang cukup umum karena lalu lintas permintaan / tanggapan. Ketika ada kesempatan untuk mengirim, tetapi tidak ada data yang dikirim, BBR menandai sampel bandwidth yang sesuai sebagai "application limited", yaitu app_limited (lihat pseudocode send ()). Kode ini menentukan pola mana yang akan disertakan dalam model bandwidth, sehingga mencerminkan batas jaringan, bukan batas aplikasi. BtlBw adalah batas atas perusahaan pada tingkat pengiriman, jadi tingkat pengiriman yang diukur lebih besar dari perkiraan BtlBw saat ini berarti perkiraan BtlBw yang diremehkan, apakah sampel itu aplikasi dibatasi atau tidak. Jika tidak, pola yang dibatasi aplikasi akan dibuang. (Gambar 1 menunjukkan bahwa di wilayah dengan pembatasan aplikasi deliveryRate, parameter BtlBw diremehkan). Pemeriksaan ini mencegah filter BtlBw mengisi dengan nilai yang diremehkan, yang dapat memperlambat pengiriman data.

Saat data dikirim

Untuk menghubungkan tingkat kedatangan paket dengan tingkat keberangkatan dari bottleneck, BBR memantau setiap paket data. (BBR harus cocok menilai bottleneck: Ini berarti bahwa pelacakan merupakan bagian integral dari arsitektur dan bagian fundamental dari pekerjaan - oleh karena itu pacing_rate adalah parameter kontrol utama. Parameter bantu cwnd_gain menghubungkan dalam penerbangan dengan satu set kecil BDP untuk menangani patologi jaringan dan penerima yang khas (lihat bab tentang konfirmasi tertunda dan diperpanjang di bawah). Secara konseptual, prosedur pengiriman di TCP terlihat seperti kode berikut. (Di Linux, pengiriman data menggunakan antrian FQ / pacing yang efisien, yang memberi BBR kinerja linier dari satu koneksi pada tautan multi-gigabit dan menangani ribuan koneksi yang lebih lambat dengan overhead CPU yang dapat diabaikan.)

Fungsi send (packet) bdp \u003d BtlBwFilter.currentMax × RTpropFilter.currentMin if (inflight\u003e \u003d cwnd_gain × bdp) // tunggu ack atau retransmission timeout return if (now\u003e \u003d nextSendTime) packet \u003d nextPacketToSend () if (! Packet) app_limited_until \u003d inflight return packet.app_limited \u003d (app_limited_until\u003e 0) packet.sendtime \u003d sekarang packet.delivered \u003d paket terkirim.delivered_time \u003d terkirim_time kapal (paket) nextSendTime \u003d sekarang + packet.size / (pacing_gain × BtlBwFilter.currentMax) timerCallbackAt (kirim, nextSendTime)
Perilaku kondisi mapan

Kecepatan dan jumlah data yang dikirim melalui BBR hanya bergantung pada BtlBw dan RTprop, jadi filter mengontrol tidak hanya perkiraan kendala bottleneck, tetapi juga aplikasinya. Ini membuat loop kontrol kustom yang digambarkan pada Gambar 2, yang menunjukkan RTT (biru), dalam penerbangan (hijau), dan kecepatan pengiriman (merah) selama 700 milidetik untuk streaming 10 megabit 40 milidetik. Garis abu-abu tebal di atas rasio pengiriman adalah status filter BtlBw max. Bentuk segitiga diperoleh dengan menerapkan koefisien pacing_gain secara siklis dalam BBR untuk menentukan kenaikan BtlBw. Perolehan di setiap bagian siklus ditampilkan dalam waktu selaras dengan data yang terpengaruh. Faktor ini bekerja pada RTT lebih awal saat data dikirim. Hal ini ditunjukkan dengan ketidakteraturan horizontal dalam deskripsi urutan kejadian di sisi kiri.


Gambar 2

BBR meminimalkan latensi karena sebagian besar waktu berlalu dengan BDP yang sama beraksi. Karena ini, bottleneck berpindah ke pengirim, sehingga peningkatan BtlBw menjadi tidak terlihat. Oleh karena itu, BBR secara berkala menghabiskan interval RTprop pada pacing_gain\u003e 1, yang meningkatkan kecepatan pengiriman dan jumlah data yang dikirim tanpa konfirmasi pengiriman (dalam pesawat). Jika BtlBw tidak berubah, maka antrian dibuat sebelum bottleneck, meningkatkan RTT, yang membuat deliveryRate konstan. (Antrian dapat dihilangkan dengan mengirimkan data dengan nilai pacing_gain offset< 1 для следующего RTprop). Если BtlBw увеличивается, то скорость deliveryRate тоже увеличивается, а новое максимальное значение фильтра немедленно увеличивает базовую скорость отслеживания (pacing_rate). Untuk alasan ini, BBR menyesuaikan dengan ukuran bottleneck baru secara eksponensial dengan cepat. Gambar 3 menunjukkan efek ini pada streaming 10 Mbps 40 ms, yang BtlBw tiba-tiba naik hingga 20 Mbps setelah 20 detik operasi stabil (di sebelah kiri grafik), kemudian turun ke 10 Mbps setelah 20 detik lagi operasi berkelanjutan hingga 20 Mbps (sisi kanan grafik).


Gambar 3

(Pada dasarnya, BBR adalah contoh sederhana dari sistem kontrol "max-plus", pendekatan baru untuk sistem kontrol berdasarkan aljabar max-plus non-standar. Pendekatan ini memungkinkan adaptasi kecepatan [dikontrol oleh rasio roda gigi maks] terlepas dari pertumbuhan antrian [dikendalikan oleh rasio transmisi rata-rata]. Seperti yang diterapkan pada masalah kita, ini bermuara pada loop kontrol tanpa syarat yang sederhana, di mana adaptasi terhadap perubahan dalam batasan fisik secara otomatis dilakukan dengan mengubah filter yang mengekspresikan batasan ini. Sistem tradisional akan membutuhkan pembuatan banyak loop kontrol yang digabungkan menjadi mesin status yang kompleks untuk mencapai hasil ini.)

Perilaku saat memulai satu utas BBR

Implementasi modern menangani peristiwa seperti startup, shutdown, dan pemulihan kerugian dengan algoritme "responsif peristiwa" dengan banyak baris kode. BBR menggunakan kode di atas (di bab sebelumnya "Mencocokkan aliran paket ke jalur pengiriman") untuk semuanya. Peristiwa ditangani dengan melintasi urutan "status". "Status" itu sendiri ditentukan oleh tabel dengan satu atau lebih nilai koefisien dan kriteria keluar yang tetap. Sebagian besar waktu dihabiskan dalam status ProbeBW, yang dijelaskan di bab Perilaku Kondisi Mapan. Status Startup dan Drain digunakan saat memulai koneksi (Gambar 4). Untuk menangani koneksi di mana throughput meningkat sebesar 12 kali lipat, status Startup mengimplementasikan algoritma pencarian biner untuk BtlBw, yang menggunakan faktor transmisi untuk menggandakan kecepatan transmisi ketika kecepatan pengiriman meningkat. Ini mendefinisikan BtlBw di RTT, tetapi pada saat yang sama membuat antrian yang tidak perlu sebelumnya. Segera setelah Startup menemukan BtlBw, sistem BBR akan masuk ke status Tiriskan, yang menggunakan rasio roda gigi terbalik Startup untuk menghilangkan antrean yang berlebihan, dan kemudian ke status ProbeBW segera setelah penerbangan jatuh ke jalur BDP.


Gambar 4

Gambar 4 menunjukkan detik pertama dari streaming BBR 10 megabit 40 ms. Grafik atas menunjukkan waktu dan urutan kejadian, serta kemajuan pengirim (hijau) dan penerima (biru): jumlah data yang dikirim dan diterima. Garis merah menunjukkan kinerja pengirim yang menggunakan teknologi CUBIC dalam kondisi yang sama. Garis abu-abu vertikal menunjukkan waktu transisi antara status BBR. Grafik bawah menunjukkan perubahan waktu perjalanan pulang pergi (RTT) dari kedua sambungan. Harap dicatat bahwa jadwal untuk jadwal ini sesuai dengan waktu penerimaan konfirmasi kedatangan (ack). Oleh karena itu, grafiknya mungkin terlihat bergeser seiring waktu, tetapi sebenarnya peristiwa di bawah ini sesuai dengan momen ketika sistem BBR mempelajari peristiwa ini dan bereaksi.

Grafik bawah pada Gambar 4 membandingkan BBR dan CUBIC. Pada awalnya, perilakunya hampir sama, tetapi BBR benar-benar mengosongkan antrean yang terbentuk di awal koneksi, dan CUBIC tidak dapat melakukan ini. Itu tidak memiliki model jejak untuk memberi tahu Anda berapa banyak data yang dikirim yang berlebihan. Oleh karena itu, CUBIC kurang agresif meningkatkan transmisi data tanpa konfirmasi pengiriman, tetapi pertumbuhan ini berlanjut hingga buffer bottleneck meluap dan mulai menjatuhkan paket, atau hingga penerima mencapai batas untuk data yang dikirim tanpa konfirmasi (jendela terima TCP).

Gambar 5 menunjukkan perilaku RTT dalam delapan detik pertama koneksi yang digambarkan pada Gambar 4. Teknologi CUBIC (berwarna merah) mengisi seluruh buffer yang tersedia, kemudian berputar antara 70% dan 100% mengisi setiap beberapa detik. Setelah koneksi dimulai, BBR (hijau) beroperasi dengan sedikit atau tanpa antrian.


Gambar 5

Perilaku saat beberapa aliran BBR bertemu di kemacetan

Gambar 6 menunjukkan bagaimana throughput beberapa aliran BBR berkumpul pada bagian yang jujur \u200b\u200bdari kemacetan 100 megabit / 10 milidetik. Struktur segitiga yang menghadap ke bawah adalah status koneksi ProbeRTT di mana sinkronisasi mandiri mempercepat konvergensi akhir.


Gambar 6

Siklus perolehan ProbeBW (Gambar 2) merangsang aliran yang lebih besar untuk menghasilkan bandwidth ke aliran yang lebih kecil, sebagai akibatnya setiap aliran memahami keadaan jujurnya. Ini terjadi agak cepat (beberapa siklus ProbeBW), meskipun ketidakadilan dapat tetap ada jika utas terlambat ke awal redistribusi melebih-lebihkan RTprop karena fakta bahwa utas yang dimulai lebih awal (sementara) membuat antrean.

Untuk mengetahui RTProp yang sebenarnya, aliran bergerak ke kiri dari garis BDP menggunakan status ProbeRTT: jika perkiraan RTProp tidak diperbarui (yaitu, dengan mengukur RTT yang lebih kecil) selama beberapa detik, maka BBR memasuki status ProbeRTT, mengurangi jumlah data yang dikirim (dalam pesawat) menjadi empat paket untuk setidaknya satu lintasan ganda, dan kemudian kembali ke keadaan sebelumnya. Ketika utas besar memasuki status ProbeRTT, banyak paket dihapus dari antrian, sehingga beberapa utas sekaligus melihat nilai RTprop baru (RTT minimum baru). Karena itu, perkiraan RTprop mereka disetel ulang ke nol pada saat yang sama, sehingga mereka semua masuk ke status ProbeRTT secara bersamaan - dan antrean semakin berkurang, akibatnya semakin banyak utas yang melihat nilai RTprop baru, dan seterusnya. Koordinasi terdistribusi ini merupakan faktor kunci dalam keadilan dan stabilitas bandwidth.

BBR menyinkronkan utas di sekitar acara yang diinginkan, yang merupakan antrian kosong di kemacetan. Berbeda dengan pendekatan ini, pelambatan kemacetan packet loss menyinkronkan aliran di sekitar peristiwa yang tidak diinginkan, seperti pertumbuhan antrian berkala dan buffer overflows, yang meningkatkan latensi dan kehilangan paket.

Pengalaman menerapkan B4 WAN di Google

B4 Google adalah jaringan area luas (WAN) berkecepatan tinggi yang dibangun di atas sakelar konvensional berbiaya rendah. Kerugian pada buffer switch yang dangkal ini terutama disebabkan oleh lonjakan lalu lintas yang sesekali terjadi. Pada 2015, Google mulai memindahkan lalu lintas kerja dari CUBIC ke BBR. Tidak ada masalah atau regresi yang dilaporkan, dan sejak 2016 semua lalu lintas TCP B4 menggunakan BBR. Gambar 7 mengilustrasikan satu alasan untuk ini: Throughput BBR secara konsisten 2-25 kali lipat dari CUBIC. Kami melihat peningkatan yang lebih besar, tetapi menemukan bahwa 75% koneksi BBR dibatasi oleh buffer penerima TCP di kernel, yang sengaja ditetapkan oleh tim operasi jaringan ke nilai rendah (8 MB) untuk mencegah CUBIC membanjiri jaringan dengan megabyte lalu lintas berlebih tanpa konfirmasi pengiriman (jika bagi 8 MB dengan 200ms RTT antarbenua, Anda mendapatkan maksimum 335 Mbps). Meningkatkan buffer penerimaan secara manual pada satu rute AS-ke-Eropa secara instan meningkatkan kecepatan data BBR menjadi 2 Gbps, sementara CUBIC tetap pada 15 Mbps - peningkatan throughput relatif 133 kali lipat yang diprediksi oleh Matis et al. bekerja pada tahun 1997.


Gambar 7

Gambar 7 menunjukkan peningkatan relatif pada BBR dibandingkan CUBIC; Bilah sisi menampilkan fungsi distribusi kumulatif (CDF) untuk throughput. Pengukuran dilakukan dengan menggunakan layanan penginderaan aktif, yang membuka koneksi BBR dan CUBIC permanen ke pusat data jarak jauh, kemudian mentransfer data 8 MB setiap menit. Pesawat ini menjelajahi banyak rute B4 antara Amerika Utara, Eropa, dan Asia.

Peningkatan besar ini merupakan konsekuensi langsung dari BBR tidak menggunakan packet loss sebagai indikator kemacetan. Untuk mencapai throughput penuh, teknik kontrol kemacetan kehilangan paket yang ada mengharuskan tingkat kerugian kurang dari kuadrat terbalik dari BDP (misalnya, kurang dari satu kerugian per 30 juta paket untuk koneksi 10 Gbps / 100 ms). Gambar 8 membandingkan throughput yang dapat digunakan yang diukur pada berbagai tingkat kehilangan paket. Di CUBIC, toleransi kehilangan paket adalah properti struktural dari algoritme, dan di BBR ini adalah parameter konfigurasi. Ketika tingkat kerugian di BBR mendekati keuntungan maksimum ProbeBW, probabilitas untuk mengukur tingkat pengiriman BtlBw nyata turun tajam, yang mengarah ke underestimasi pada bagian dari filter maks.


Angka 8

Gambar 8 membandingkan bandwidth yang dapat digunakan dari BBR dan CUBIC dalam aliran 60 detik pada tautan 100 Mbps dan 100 ms dengan kerugian acak mulai dari 0,001% hingga 50%. Throughput CUBIC berkurang 10 kali dengan kerugian 0,1% dan sepenuhnya berhenti di lebih dari 1%. Bandwidth maksimum adalah bagian dari bandwidth dikurangi packet loss (). BBR menahan pada level ini hingga 5% kerugian dan mendekati 15%.

Pengalaman menerapkan YouTube Edge

BBR digunakan di server video YouTube dan Google.com. Google sedang melakukan eksperimen kecil di mana sebagian kecil pengguna secara tidak sengaja ditransfer ke BBR atau CUBIC. Pemutaran video BBR menunjukkan peningkatan yang signifikan pada semua peringkat kualitas layanan pengguna. Mungkin karena perilaku BBR lebih konsisten dan bisa diprediksi. BBR hanya sedikit meningkatkan bandwidth koneksi karena YouTube sudah menyesuaikan kecepatan streaming jauh di bawah BtlBw untuk meminimalkan buffering jaringan dan buffering ulang yang tidak perlu. Tetapi bahkan di sini, BBR mengurangi rata-rata RTT rata-rata sebesar 53% secara global dan lebih dari 80% di negara berkembang.

Gambar 9 menunjukkan peningkatan median di RTT versus BBR dan CUBIC lebih dari 200 juta penayangan video YouTube yang diukur di lima benua selama seminggu. Lebih dari setengah dari 7 miliar koneksi seluler dunia adalah 2,5G pada 8Kbps hingga 114Kbps, dengan masalah yang terdokumentasi dengan baik dengan teknik kontrol kemacetan kehilangan paket yang cenderung meluap buffer. Hambatan dalam sistem ini biasanya antara SGSN (Melayani Node Dukungan GPRS) dan perangkat seluler. Software SGSN berjalan pada platform PC standar dengan RAM yang cukup, seringkali dengan megabyte buffer antara internet dan perangkat mobile. Gambar 10 membandingkan latensi SGSN (yang diemulasi) antara internet dan seluler untuk BBR dan CUBIC. Garis horizontal menandai salah satu konsekuensi yang paling serius: TCP beradaptasi dengan penundaan RTT yang lama, dengan pengecualian paket SYN yang memulai koneksi, yang memiliki batas waktu tetap, tergantung pada sistem operasi. Ketika perangkat seluler menerima sejumlah besar data (misalnya, dari pembaruan perangkat lunak otomatis) melalui buffer SGSN yang besar, perangkat tidak dapat membuat koneksi apa pun di Internet hingga antriannya bebas (SYN ACK tertunda lebih dari batas waktu SYN tetap) ...


Gambar 9

Gambar 10 menunjukkan median perubahan RTT dalam kondisi stabil tautan dan ketergantungan ukuran buffer pada tautan 128Kbps dan 40ms dengan delapan aliran BBR (hijau) atau CUBIC (merah). BBR menjaga antrian pada nilai minimum, terlepas dari ukuran buffer bottleneck dan jumlah thread aktif. Aliran CUBIC selalu mengisi buffer, sehingga latensi meningkat secara linier dengan ukuran buffer.


Gambar 10

Pita adaptif di seluler

Sistem seluler menyesuaikan bandwidth untuk setiap pengguna sebagian berdasarkan ramalan permintaan, yang memperhitungkan antrian paket yang ditujukan untuk pengguna tersebut. BBR awal disetel untuk membuat antrean yang sangat kecil, menyebabkan koneksi terhenti pada kecepatan rendah. Meningkatkan kecepatan_peningkatan puncak untuk ProbeBW dan meningkatkan antrian mengakibatkan lebih sedikit koneksi yang terhenti. Ini menunjukkan kemampuan beradaptasi yang bagus untuk beberapa jaringan. Dengan nilai gain puncak saat ini, tidak ada degradasi di jaringan manapun dibandingkan dengan CUBIC.

Paket ACK yang tertunda dan diperpanjang

Jaringan seluler, WiFi, dan broadband sering kali menunda dan mengakumulasi paket ack. Ketika dalam penerbangan dibatasi pada satu BDP, ini menyebabkan macet, mengurangi bandwidth. Meningkatkan faktor cwnd_gain ProbeBW menjadi dua memungkinkan transmisi mulus berlanjut pada tingkat pengiriman yang diperkirakan, bahkan ketika paket ack tertunda oleh satu RTT. Ini sebagian besar mencegah kerusakan.

Pembatas Bucket Saat Ini

Peluncuran awal BBR ke YouTube menunjukkan bahwa sebagian besar ISP dunia membelokkan lalu lintas dengan pembatas kecepatan keranjang saat ini. Bucket biasanya penuh pada awal koneksi, jadi BBR mengetahui parameter BtlBw untuk jaringan yang mendasarinya. Tetapi segera setelah bucket kosong, semua paket yang dikirim lebih cepat dari laju pengisian bucket (jauh lebih rendah dari BtlBw) akan dibuang. BBR akhirnya mempelajari tingkat pengiriman baru ini, tetapi bersepeda ProbeBW mendapatkan hasil dalam kerugian moderat yang konstan. Untuk meminimalkan hilangnya bandwidth upstream dan peningkatan latensi aplikasi dari kerugian ini, kami telah menambahkan detektor clipper khusus dan model clipper eksplisit di BBR. Kami juga secara aktif mencari cara terbaik untuk menghilangkan bahaya dari pembatas kecepatan.

Bersaing dengan metode kontrol kemacetan kehilangan paket

BBR intinya adalah berbagi bandwidth bottleneck secara jujur, baik dalam persaingan dengan aliran BBR lain atau aliran yang dikendalikan oleh teknik kontrol kemacetan kehilangan paket. Bahkan ketika yang terakhir mengisi penyangga yang tersedia, ProbeBW masih dapat diandalkan untuk membuat bias perkiraan BtlBw ke arah pembagian yang adil, dan ProbeRTT menganggap perkiraan RTProp cukup tinggi untuk menyatukan tit untuk tat ke pembagian yang adil. Namun, buffer router yang tidak dikelola yang melebihi beberapa BDP memaksa pesaing kontrol kemacetan lama untuk meningkatkan antrian dan mengambil lebih dari bagian yang adil. Menghilangkan ini adalah bidang penelitian aktif lainnya.

Kesimpulan

Memikirkan kembali manajemen kemacetan adalah manfaat yang sangat besar. Daripada menggunakan kejadian seperti kehilangan penyangga atau kejang penyangga yang berkorelasi lemah dengan kemacetan, BBR dimulai dengan model kemacetan formal Kleinrock dan titik operasi optimal terkait. Kesimpulan yang mengganggu bahwa "tidak mungkin" untuk secara bersamaan menentukan latensi kritis dan bandwidth dilewati dengan mengamati bahwa keduanya dapat diprediksi secara bersamaan. Kemajuan terbaru dalam sistem kontrol dan teori estimasi kemudian diterapkan untuk membuat loop kontrol terdistribusi sederhana yang mendekati optimal dengan sepenuhnya memanfaatkan jaringan sambil mempertahankan antrian kecil. Implementasi BBR Google tersedia di kernel Linux open source dan dirinci dalam lampiran artikel ini.

Teknologi BBR digunakan pada tulang punggung Google B4, meningkatkan bandwidth dengan lipat lebih dari CUBIC. Ini juga diterapkan di server web Google dan YouTube, secara signifikan mengurangi latensi di lima benua yang diuji sejauh ini, dengan fokus yang kuat pada negara berkembang. Teknologi BBR bekerja secara eksklusif di sisi pengirim dan tidak memerlukan perubahan pada protokol, penerima, atau jaringan, yang memungkinkannya diterapkan secara bertahap. Ini hanya bergantung pada RTT dan pemberitahuan pengiriman paket, sehingga dapat digunakan di sebagian besar protokol transport Internet.

Ucapan Terima Kasih

Penulis berterima kasih kepada Len Kleinrock atas panduan tentang cara menangani kemacetan dengan benar. Kami berhutang budi kepada Larry Brakmo atas pekerjaan perintisnya pada sistem pengendalian kemacetan Vegas dan New Vegas yang mengantisipasi banyak elemen BBR, dan atas nasihat serta bimbingannya selama pengembangan awal BBR. Kami juga mengucapkan terima kasih kepada Eric Dumazet, Nandita Dukkipati, Jana Iyengar, Ian Swett, M. Fitz Nowlan, David Wetherall, Leonid Leonidas Kontothanassis, Amin Vahdat, dan Google BwE serta Tim Infrastruktur YouTube atas bantuan dan dukungan mereka yang tak ternilai.

Lampiran - deskripsi rinci

Mesin status untuk probing berurutan

Pacing_gain mengontrol seberapa cepat paket dikirim relatif terhadap BtlBw dan ini adalah kunci dari fitur BBR pintar. Ketika pacing_gain lebih besar dari satu, inflight meningkat dan jarak antar paket berkurang, yang memindahkan tautan ke sisi kanan pada Gambar 1. Ketika pacing_gain kurang dari satu, efek sebaliknya terjadi, tautan bergerak ke kiri.

BBR menggunakan pacing_gain untuk mengimplementasikan mesin penginderaan status sekuensial sederhana yang bergantian antara menguji bandwidth yang lebih besar dan menguji waktu akses ganda yang lebih pendek. (Tidak perlu menguji bandwidth yang lebih kecil, karena ditangani secara otomatis oleh filter BtlBw msx: pengukuran baru mencerminkan penurunan, jadi BtlBw akan mengoreksi dirinya sendiri segera setelah perubahan lama terakhir dihapus dari filter oleh waktu tunggu. Filter min RTprop menangani peningkatan jalur pengiriman dengan cara yang sama) ...

Jika bandwidth bottleneck meningkat, BBR harus mengirim data lebih cepat untuk mendeteksinya. Demikian juga, jika waktu akses ganda aktual dari paket berubah, ini mengubah BDP, dan oleh karena itu BDP harus mengirim data lebih lambat untuk menjaga penerbangan di bawah BDP untuk mengukur RTprop baru. Oleh karena itu, satu-satunya cara untuk mendeteksi perubahan ini adalah dengan bereksperimen, mengirim lebih cepat untuk memeriksa peningkatan BtlBw, atau mengirim lebih lambat untuk memeriksa penurunan RTprop. Frekuensi, cakupan, durasi, dan struktur eksperimen ini bervariasi bergantung pada apa yang sudah diketahui (koneksi mulai atau status stabil) dan perilaku aplikasi yang mengirimkan data (terputus-putus atau persisten).

Stabil

Stream BBR menghabiskan sebagian besar waktunya dalam status ProbeBW, menyelidiki streak menggunakan metode yang disebut naik sepedaIni membantu streaming BBR mencapai throughput tinggi, latensi antrean rendah, dan konvergensi pembagian yang adil. Menggunakan naik sepedaSiklus BBR melalui berbagai nilai untuk mendapatkan pacing_gain... Delapan fase siklus digunakan dengan nilai sebagai berikut: 5/4, 3/4, 1, 1, 1, 1, 1, 1. Setiap fase biasanya berlangsung untuk RTprop yang diprediksi. Desain ini memungkinkan loop koefisien untuk menyelidiki saluran terlebih dahulu untuk bandwidth yang lebih tinggi dengan nilai pacing_gain lebih besar dari 1.0, lalu sebarkan semua antrean yang dihasilkan dengan pacing_gain dengan jumlah yang sama kurang dari 1,0, dan kemudian bergerak dengan kecepatan jelajah dengan ledakan koefisien yang singkat persis 1,0. Gain rata-rata untuk semua fase adalah 1,0 karena ProbeBW cenderung rata-rata menyamakan bandwidth yang tersedia dan oleh karena itu mempertahankan pemanfaatan bandwidth tinggi tanpa menambah antrian. Perhatikan bahwa meskipun siklus rasio berubah pacing_gaintapi nilainya cwnd_gain selalu tetap sama dengan dua, karena paket ack tertunda dan diperpanjang dapat muncul kapan saja (lihat bab tentang paket ack tertunda dan diperpanjang).

Selain itu, untuk meningkatkan pencampuran aliran dan berbagi bandwidth yang adil, dan untuk mengurangi antrian ketika beberapa BBR berbagi kemacetan, BBR secara acak mengubah fase siklus ProbeBW dengan secara acak memilih fase pertama dari semua kecuali 3/4. Mengapa siklusnya tidak dimulai pada 3/4? Tujuan utama dari nilai rasio ini adalah untuk membubarkan antrian apapun yang mungkin terbentuk selama penerapan rasio 5/4, ketika saluran sudah penuh. Saat proses meninggalkan status Tiriskan atau ProbeRTT dan masuk ke ProbeBW, tidak ada antrean, sehingga faktor 3/4 tidak memenuhi tugasnya. Penggunaan 3/4 dalam konteks seperti itu hanya memiliki efek negatif: pengisian saluran pada fase ini akan menjadi 3/4, dan bukan 1. Jadi, awal siklus dari 3/4 hanya memiliki efek negatif, tetapi tidak memiliki efek positif, dan sejak memasuki keadaan ProbeBW membutuhkan waktu yang cukup lama untuk memulai koneksi apa pun, kemudian BBR menggunakan pengoptimalan kecil ini.

Thread BBR bekerja sama untuk mengosongkan antrean bottleneck secara berkala menggunakan status yang disebut ProbeRTT. Di negara bagian selain ProbeRTT itu sendiri, jika perkiraan RTProp belum diperbarui (misalnya, dengan mengukur RTT yang lebih kecil) selama lebih dari 10 detik, maka BBR memasuki status ProbeRTT dan menurunkan cwnd ke nilai yang sangat kecil (empat paket). Menjaga jumlah minimum paket dalam penerbangan setidaknya 200 md dan untuk satu waktu lintasan ganda burst, BBR keluar dari status ProbeRTT dan masuk ke Startup atau ProbeBW, tergantung pada apakah saluran sudah penuh.

BBR dirancang untuk berjalan hampir sepanjang waktu (sekitar 98%) di ProbeBW dan sisanya di ProbeRTT, berdasarkan satu set pengorbanan. Status ProbeRTT berlangsung cukup lama (setidaknya 200 md) untuk memungkinkan utas dengan RTT berbeda memiliki status ProbeRTT bersamaan, tetapi pada saat yang sama berlangsung cukup singkat untuk membatasi penurunan kinerja hingga sekitar dua persen (200 md / 10 detik ). Jendela filter RTprop (10 detik) cukup kecil untuk mengakomodasi perubahan tingkat lalu lintas atau perutean dengan cepat, tetapi cukup besar untuk aplikasi interaktif. Aplikasi semacam itu (misalnya, halaman web, panggilan prosedur jarak jauh, klip video) sering kali menunjukkan periode alami hening atau aktivitas rendah di jendela jendela ini, di mana laju aliran cukup lambat atau cukup lama untuk menyebarkan antrean dalam kemacetan. Filter RTprop kemudian menyesuaikan pengukuran RTprop ini secara oportunistik, dan RTProp diperbarui tanpa harus menggunakan ProbeRTT. Jadi, aliran biasanya hanya perlu mengorbankan 2% dari bandwidth jika beberapa aliran mengisi saluran secara melimpah di seluruh jendela RTProp.

Perilaku startup

Ketika thread BBR dimulai, ia melakukan proses probing / pengosongan antrian berurutan pertama (dan tercepat). Bandwidth jaringan bervariasi dalam kisaran 10 12 - dari beberapa bit hingga 100 gigabit per detik. Untuk mengetahui nilai BtlBw untuk perubahan jarak yang sangat besar, BBR melakukan pencarian biner dalam ruang kecepatan. Ia menemukan BtlBw (lintasan ganda paket) dengan sangat cepat, tetapi dengan mengorbankan membuat antrian di 2BDP pada tahap terakhir pencarian. Pencarian dilakukan dalam status Startup di BBR, dan pengosongan antrian yang dibuat dilakukan dalam status Drain.

Pada awalnya, Startup secara eksponensial meningkatkan kecepatan pengiriman data, menggandakannya setiap putaran. Untuk mencapai penginderaan cepat seperti itu dengan cara yang paling santai, saat memulai nilai perolehan pacing_gain dan cwnd_gain disetel ke, ke nilai minimum yang memungkinkan Anda menggandakan kecepatan unggah untuk setiap putaran. Begitu salurannya penuh, koefisiennya cwnd_gain membatasi ukuran antrian menjadi sebuah nilai.

Dalam keadaan awal koneksi, BBR menilai apakah saluran sudah penuh dengan mencari dataran tinggi dalam perkiraan BtlBw. Jika ditemukan bahwa beberapa (tiga) putaran telah berlalu, di mana upaya untuk menggandakan kecepatan pengiriman tidak benar-benar memberikan peningkatan kecepatan yang besar (kurang dari 25%), maka dia menganggap bahwa dia telah mencapai BtlBw, jadi dia keluar dari status Startup dan masuk ke status Drain. BBR menunggu tiga putaran untuk mendapatkan bukti yang meyakinkan bahwa penurunan tingkat pengiriman yang diamati pengirim bukanlah efek sementara dari jendela. Menunggu tiga putaran memberikan waktu yang cukup untuk penyetelan otomatis di sisi penerima untuk membuka jendela penerima dan bagi pengirim BBR untuk mendeteksi kebutuhan untuk meningkatkan BtlBw: pada putaran pertama, algoritme untuk menyesuaikan jendela penerima secara otomatis meningkatkan jendela penerimaan; di babak kedua, pengirim mengisi jendela penerimaan yang diperbesar; pada ronde ketiga, pengirim menerima sampel dengan kecepatan pengiriman yang ditingkatkan. Batas tiga putaran ini telah membuktikan dirinya dalam penerapan YouTube.

Dalam keadaan Drain, algoritma BBR berusaha untuk dengan cepat mengosongkan antrian yang terbentuk di kondisi awal koneksi dengan beralih ke pacing_gain dengan nilai yang berlawanan dari yang digunakan dalam status Startup. Ketika jumlah in-flight packet sesuai dengan perkiraan BDP, berarti BBR menganggap antrian benar-benar kosong, namun saluran masih penuh. Kemudian BBR meninggalkan kondisi Tiriskan dan memasuki ProbeBW.

Perhatikan bahwa memulai koneksi BBR dan CUBIC yang lambat akan mempelajari throughput bottleneck secara eksponensial, menggandakan kecepatan pengiriman setiap putaran. Namun, mereka berbeda secara fundamental. Pertama, BBR lebih dapat diandalkan dalam menentukan bandwidth yang tersedia, karena BBR tidak berhenti mencari jika terjadi kehilangan paket atau (seperti CUBIC's Hystart) peningkatan latensi. Kedua, BBR dengan mulus meningkatkan kecepatan pengiriman, sedangkan CUBIC memiliki ledakan paket di setiap putaran (bahkan dengan mondar-mandir), dan kemudian periode diam. Gambar 4 menunjukkan jumlah paket dalam penerbangan dan RTT yang diamati untuk setiap pesan pengakuan dari BBR dan CUBIC.

Menanggapi situasi sementara

Jalur jaringan dan arus lalu lintas di sepanjang itu dapat mengalami perubahan dramatis yang tiba-tiba. Untuk beradaptasi dengan lancar dan andal, dan juga untuk mengurangi kehilangan paket dalam situasi ini, BBR menggunakan sejumlah strategi untuk mengimplementasikan model dasarnya. Pertama, BBR menganggapnya sebagai target ke arah mana saat ini cwnd hati-hati mendekati dari bawah, meningkat cwnd setiap kali tidak lebih dari jumlah data yang dikirimkan konfirmasi pengiriman. Kedua, dengan batas waktu transmisi ulang, yang berarti bahwa pengirim menganggap semua paket dalam penerbangan hilang, BBR secara konservatif mengurangi cwnd hingga satu paket dan mengirimkan satu paket (seperti algoritme kontrol kemacetan kehilangan paket seperti CUBIC). Bagaimanapun, ketika pengirim mengetahui bahwa sebuah paket telah hilang, tetapi masih ada paket dalam penerbangan, pada langkah pertama dari proses pemulihan kerugian, BBR untuk sementara mengurangi kecepatan pengiriman ke tingkat pengiriman saat ini; pada pemulihan kerugian putaran kedua dan berikutnya, ini memverifikasi bahwa tingkat pengiriman tidak pernah melebihi tingkat pengiriman saat ini lebih dari dua kali lipat. Ini secara signifikan mengurangi kerugian sementara ketika BBR menemui pembatas laju atau bersaing dengan aliran lain dalam buffer seukuran BDP.

Tautan

1. Abrahamsson, M. 2015. Penindasan TCP ACK. Milis IETF AQM;

Perangkat lunak sumber terbuka telah menjadi bahan pokok untuk beberapa situs web terbesar. Dengan pertumbuhan situs web ini, praktik dan pedoman terbaik untuk arsitektur mereka telah muncul. Bab ini bertujuan untuk membahas beberapa masalah utama yang perlu dipertimbangkan saat merancang situs web besar, serta beberapa komponen dasar yang digunakan untuk mencapai tujuan ini.

Fokus dari bab ini adalah pada analisis sistem web, meskipun beberapa materi dapat diekstrapolasi ke sistem terdistribusi lainnya.

1.1 Prinsip membangun sistem web terdistribusi

Apa sebenarnya yang dimaksud dengan membuat dan mengelola situs web atau aplikasi yang dapat diskalakan? Pada tingkat primitif, ini hanya menghubungkan pengguna ke sumber daya jarak jauh melalui Internet. Dan sumber daya, atau akses ke sumber daya tersebut, yang tersebar di beberapa server, adalah tautan yang membuat situs web dapat diskalakan.

Seperti kebanyakan hal dalam hidup, meluangkan waktu untuk membuat rencana ke depan untuk membangun layanan web Anda dapat membantu lebih jauh; memahami beberapa pertimbangan dan kompromi di balik situs web besar dapat terbayar dalam keputusan yang lebih cerdas saat membuat situs web yang lebih kecil. Di bawah ini adalah beberapa prinsip utama yang mempengaruhi desain sistem web skala besar:

  • Ketersediaan: Waktu aktif situs web sangat penting untuk reputasi dan fungsionalitas banyak perusahaan. Untuk beberapa toko ritel online yang lebih besar, tidak tersedia bahkan untuk beberapa menit dapat mengakibatkan hilangnya pendapatan ribuan atau jutaan dolar. Dengan demikian, mengembangkan sistem mereka yang selalu tersedia dan tahan terhadap kegagalan merupakan persyaratan bisnis dan teknologi yang mendasar. Ketersediaan tinggi dalam sistem terdistribusi memerlukan pertimbangan yang cermat tentang redundansi untuk komponen utama, pemulihan cepat dari kegagalan sistem parsial, dan redundansi yang mulus saat masalah muncul.
  • Performa: Kinerja situs web telah menjadi metrik penting untuk sebagian besar situs. Kecepatan situs web memengaruhi pengalaman dan kepuasan pengguna, serta peringkat mesin pencari - faktor yang secara langsung memengaruhi retensi dan pendapatan audiens. Hasilnya, kuncinya adalah membuat sistem yang dioptimalkan untuk respons cepat dan latensi rendah.
  • Keandalan: sistem harus kuat sehingga permintaan data tertentu mengembalikan data tertentu secara konsisten. Jika terjadi perubahan atau pembaruan data, kueri yang sama harus mengembalikan data baru. Pengguna perlu mengetahui jika ada sesuatu yang tercatat di sistem atau disimpan di dalamnya, maka mereka bisa yakin akan tetap di tempatnya untuk kemungkinan pengambilan datanya nanti.
  • Skalabilitas: Dalam hal sistem terdistribusi besar, ukuran hanyalah salah satu item dalam daftar untuk dipertimbangkan. Yang tidak kalah penting adalah upaya untuk meningkatkan throughput untuk menangani beban kerja dalam jumlah besar, yang biasa disebut sebagai skalabilitas sistem. Skalabilitas dapat mengacu pada berbagai parameter sistem: jumlah lalu lintas tambahan yang dapat ditangani, betapa mudahnya meningkatkan kapasitas penyimpanan, atau seberapa banyak lagi transaksi lain yang dapat diproses.
  • Pengendalian: Merancang sistem yang mudah dioperasikan merupakan faktor penting lainnya. Pengelolaan sistem disamakan dengan skalabilitas operasi "pemeliharaan" dan "pembaruan." Untuk memastikan pengelolaan, perlu mempertimbangkan masalah kemudahan diagnosis dan pemahaman masalah yang muncul, kemudahan memperbarui atau modifikasi, sistem aneh dalam operasi. (Artinya, apakah itu bekerja seperti yang diharapkan tanpa kegagalan atau pengecualian?)
  • Biaya: Biaya merupakan faktor penting. Ini jelas dapat mencakup biaya perangkat keras dan perangkat lunak, tetapi penting juga untuk mempertimbangkan aspek lain yang diperlukan untuk menerapkan dan memelihara sistem. Jumlah waktu pengembang yang diperlukan untuk membangun sistem, jumlah upaya operasional yang diperlukan untuk mengaktifkan dan menjalankan sistem, dan bahkan tingkat pelatihan yang memadai harus diramalkan. Biaya adalah total biaya kepemilikan.

Masing-masing prinsip tersebut menjadi dasar pengambilan keputusan dalam desain arsitektur web terdistribusi. Namun, mereka juga bisa saling bertentangan, karena mencapai tujuan seseorang datang dengan mengabaikan orang lain. Contoh sederhana: memilih untuk menambahkan beberapa server sebagai solusi kinerja (skalabilitas) dapat meningkatkan biaya pengelolaan (Anda harus mengoperasikan server tambahan) dan pembelian server.

Saat mengembangkan segala jenis aplikasi web, penting untuk mempertimbangkan prinsip-prinsip utama ini, meskipun untuk memastikan bahwa proyek dapat menyumbangkan satu atau lebih dari mereka.

1.2 Dasar-dasar

Saat mempertimbangkan arsitektur suatu sistem, ada beberapa masalah yang perlu disoroti, seperti komponen mana yang layak digunakan, bagaimana mereka cocok, dan trade-off apa yang dapat dibuat. Menginvestasikan uang dalam penskalaan tanpa kebutuhan yang jelas untuk itu tidak dapat dianggap sebagai keputusan bisnis yang cerdas. Namun, beberapa pandangan ke depan dalam perencanaan dapat menghemat waktu dan sumber daya secara signifikan di masa depan.

Bagian ini berfokus pada beberapa faktor dasar yang penting untuk hampir semua aplikasi web besar: jasa,
redundansi, segmentasidan penanganan penolakan... Masing-masing faktor ini melibatkan pilihan dan pertukaran, terutama dalam konteks prinsip yang dijelaskan di bagian sebelumnya. Mari beri contoh klarifikasi.

Contoh: Aplikasi Image Hosting

Anda mungkin pernah memposting gambar di web sebelumnya. Untuk situs besar yang menyimpan dan mengirimkan banyak gambar, terdapat tantangan dalam membuat arsitektur yang hemat biaya dan sangat andal yang memiliki latensi respons rendah (pengambilan cepat).

Bayangkan sebuah sistem di mana pengguna dapat mengunggah gambar mereka ke server pusat dan gambar dapat diminta melalui tautan situs atau API, mirip dengan Flickr atau Picasa. Untuk menyederhanakan deskripsinya, anggaplah aplikasi ini memiliki dua tugas utama: kemampuan untuk mengunggah (menulis) gambar ke server dan meminta gambar. Tentu saja, pemuatan yang efisien itu penting, tetapi pengiriman cepat akan menjadi prioritas ketika pengguna memintanya (misalnya, gambar mungkin diminta untuk ditampilkan di halaman web atau aplikasi lain). Fungsionalitas ini serupa dengan yang dapat disediakan oleh server web atau server tepi Jaringan Pengiriman Konten (CDN). Server CDN biasanya menyimpan objek data di banyak lokasi, sehingga lokasi geografis / fisiknya lebih dekat dengan pengguna, yang mengarah ke kinerja yang lebih baik.

Aspek penting lainnya dari sistem:

  • Jumlah gambar yang disimpan tidak terbatas, sehingga skalabilitas penyimpanan harus dipertimbangkan dari sudut pandang ini.
  • Harus ada latensi rendah untuk unduhan / permintaan gambar.
  • Jika seorang pengguna mengunggah gambar ke server, maka datanya harus selalu lengkap dan dapat diakses.
  • Sistem harus mudah dipelihara (mudah dikelola).
  • Karena hosting gambar tidak terlalu menguntungkan, sistemnya harus hemat biaya.

Masalah potensial lainnya dengan desain ini adalah bahwa server web seperti Apache atau lighttpd biasanya memiliki batas atas jumlah koneksi bersamaan yang dapat ditangani (defaultnya sekitar 500, tetapi bisa jauh lebih tinggi). dan dengan lalu lintas tinggi, penulisan dapat dengan cepat menggunakan batas ini. Karena pembacaan dapat dilakukan secara asinkron, atau memanfaatkan pengoptimalan kinerja lain seperti gzip atau chunking, server web dapat mengalihkan pembacaan umpan lebih cepat dan beralih antar klien, melayani lebih banyak permintaan daripada jumlah koneksi maksimum (dengan Apache dan dengan jumlah koneksi maksimum yang ditetapkan pada 500, sangat mungkin untuk melayani beberapa ribu permintaan baca per detik). Entri, di sisi lain, cenderung mempertahankan koneksi terbuka selama waktu pengunduhan. Misalnya, mentransfer file 1MB ke server dapat memakan waktu lebih dari 1 detik di sebagian besar jaringan rumah, sehingga server web hanya dapat memproses 500 penulisan bersamaan ini.


Gambar 1.2: Memisahkan Baca dan Tulis

Mengantisipasi masalah potensial seperti itu menunjukkan kebutuhan untuk memisahkan pembacaan dan penulisan gambar ke layanan independen yang ditampilkan di. Ini akan memungkinkan tidak hanya untuk menskalakan masing-masing satu per satu (karena kemungkinan kami akan selalu melakukan lebih banyak membaca daripada menulis), tetapi juga untuk tetap mengikuti apa yang terjadi di setiap layanan. Terakhir, ini akan menggambarkan masalah masa depan, membuatnya lebih mudah untuk mendiagnosis dan menilai masalah akses baca yang lambat.

Keuntungan dari pendekatan ini adalah kami dapat menyelesaikan masalah secara independen satu sama lain - tanpa harus memikirkan kebutuhan untuk merekam dan memperoleh gambar baru dalam konteks yang sama. Kedua layanan ini masih menggunakan korpus gambar global, tetapi saat menggunakan metode khusus untuk layanan tertentu, mereka dapat mengoptimalkan kinerjanya sendiri (misalnya, dengan mengantre permintaan atau menyimpan cache gambar populer - lebih lanjut nanti). Dalam hal pemeliharaan dan biaya, setiap layanan dapat diskalakan secara independen sesuai kebutuhan. Dan ini adalah faktor positif, karena menggabungkan dan mencampurkannya dapat secara tidak sengaja memengaruhi kinerja mereka, seperti dalam skenario yang dijelaskan di atas.

Tentunya, model di atas akan bekerja secara maksimal jika terdapat dua endpoint yang berbeda (faktanya, ini sangat mirip dengan beberapa implementasi penyedia penyimpanan cloud dan Content Delivery Networks). Ada banyak cara untuk menyelesaikan masalah ini, dan dalam setiap kasus dapat ditemukan kompromi.

Misalnya, Flickr memecahkan masalah baca-tulis ini dengan mendistribusikan pengguna di antara modul yang berbeda sehingga setiap modul hanya dapat melayani sejumlah pengguna tertentu yang terbatas, dan dengan bertambahnya jumlah pengguna, lebih banyak modul ditambahkan ke kluster (lihat presentasi penskalaan Flickr.
http://mysqldba.blogspot.com/2008/04/mysql-uc-2007-presentation-file.html). Dalam contoh pertama, lebih mudah untuk menskalakan perangkat keras berdasarkan beban penggunaan aktual (jumlah baca dan tulis di seluruh sistem), sementara penskalaan Flickr dilakukan berdasarkan basis pengguna (namun, ini mengasumsikan penggunaan yang sama di seluruh pengguna yang berbeda, jadi kapasitas perlu direncanakan dengan Memesan). Di masa lalu, ketidaktersediaan atau masalah dengan salah satu layanan yang membuat fungsionalitas seluruh sistem tidak dapat dioperasikan (misalnya, tidak ada yang dapat menulis file), maka tidak dapat diaksesnya salah satu modul Flickr hanya akan mempengaruhi pengguna yang terkait dengannya. Dalam contoh pertama, lebih mudah untuk melakukan operasi pada seluruh dataset - misalnya, memperbarui layanan penulis untuk memasukkan metadata baru, atau mencari melalui semua metadata gambar - sedangkan dengan arsitektur Flickr, setiap modul harus diperbarui atau dicari (atau layanan pencarian harus dibuat untuk mengurutkan metadata yang sebenarnya ditujukan untuk ini).

Untuk sistem ini, tidak ada obat mujarab, tetapi Anda harus selalu melanjutkan dari prinsip yang dijelaskan di awal bab ini: tentukan kebutuhan sistem (muat dengan operasi "baca" atau "tulis" atau sekaligus, tingkat paralelisme, kueri pada kumpulan data, rentang, uji coba, dll.), melakukan pembandingan komparatif dari berbagai alternatif, memahami kondisi potensi kegagalan sistem, dan mengembangkan rencana kegagalan yang komprehensif.

Redundansi

Untuk mengatasi kegagalan secara elegan, arsitektur web harus memiliki redundansi dalam layanan dan datanya. Misalnya, jika hanya ada satu salinan file yang disimpan di satu server, hilangnya server itu berarti hilangnya file tersebut. Situasi ini hampir tidak dapat dikarakterisasi secara positif, dan biasanya dapat dihindari dengan membuat banyak salinan atau cadangan.

Prinsip yang sama berlaku untuk layanan. Anda dapat melindungi dari kegagalan node tunggal dengan menyediakan bagian integral dari fungsionalitas untuk aplikasi guna memastikan bahwa beberapa salinan atau versi aplikasi berjalan secara bersamaan.

Dengan membuat redundansi dalam sistem, Anda dapat menghilangkan titik lemah dan menyediakan fungsionalitas redundan atau redundansi jika terjadi bencana. Misalnya, jika ada dua contoh layanan yang sama yang berjalan di "produksi" dan salah satunya gagal secara keseluruhan atau sebagian, sistem dapat mengatasi kegagalan dengan beralih ke copy pekerjaan.
Peralihan dapat terjadi secara otomatis atau memerlukan intervensi manual.

Peran kunci lain dari redundansi layanan adalah membuat arsitektur non-bersama... Dengan arsitektur ini, setiap node dapat bekerja secara independen dan, terlebih lagi, tanpa adanya "otak" pusat yang mengontrol keadaan atau mengkoordinasikan tindakan node lain. Ini mempromosikan skalabilitas, karena menambahkan node baru tidak memerlukan kondisi atau pengetahuan khusus. Yang terpenting, tidak ada titik kritis dari kegagalan dalam sistem ini, yang membuatnya lebih tahan terhadap kegagalan.

Misalnya, dalam aplikasi server gambar kami, semua gambar akan memiliki salinan yang berlebihan di tempat lain di perangkat keras (idealnya dengan lokasi geografis yang berbeda jika terjadi bencana seperti gempa bumi atau kebakaran pusat data), dan layanan akses gambar akan menjadi redundan, dengan semuanya berpotensi melayani permintaan. (Cm.)
Ke depan, penyeimbang beban adalah cara yang bagus untuk mewujudkannya, tetapi lebih dari itu di bawah.


Gambar 1.3: Aplikasi Hosting Gambar Redundan

Segmentasi

Set data bisa sangat besar sehingga tidak dapat diakomodasi di satu server. Mungkin juga terjadi bahwa operasi komputasi memerlukan terlalu banyak sumber daya komputer, mengurangi kinerja dan memerlukan peningkatan daya. Apa pun itu, Anda memiliki dua opsi: penskalaan vertikal atau horizontal.

Peningkatan skala berarti menambahkan lebih banyak sumber daya ke satu server. Jadi, untuk kumpulan data yang sangat besar, ini berarti menambahkan lebih banyak (atau lebih) hard drive, dan dengan demikian seluruh kumpulan data dapat muat di satu server. Dalam kasus operasi komputasi, ini berarti memindahkan komputasi ke server yang lebih besar dengan CPU yang lebih cepat atau lebih banyak memori. Bagaimanapun, penskalaan vertikal dilakukan untuk membuat sumber daya terpisah dari sistem komputasi yang mampu memproses data tambahan.

Penskalaan secara horizontal, di sisi lain, melibatkan penambahan lebih banyak node. Dalam kasus kumpulan data besar, ini berarti menambahkan server kedua untuk menyimpan sebagian dari seluruh volume data, dan untuk sumber daya komputasi, ini berarti memisahkan pekerjaan atau memuat melalui beberapa node tambahan. Untuk memanfaatkan potensi scale-out sepenuhnya, itu harus diimplementasikan sebagai prinsip desain internal untuk arsitektur sistem. Jika tidak, mengubah dan menyoroti konteks yang diperlukan untuk penskalaan horizontal dapat menjadi masalah.

Metode paling umum untuk melakukan penskalaan adalah dengan membagi layanan menjadi pecahan atau modul. Mereka dapat didistribusikan sedemikian rupa sehingga setiap rangkaian fungsionalitas logis bekerja secara terpisah. Ini dapat dilakukan berdasarkan batas geografis, atau kriteria lain seperti pengguna yang membayar dan tidak membayar. Keuntungan dari skema ini adalah bahwa mereka menyediakan layanan atau penyimpanan data dengan fungsionalitas yang ditingkatkan.

Dalam contoh server gambar kami, ada kemungkinan bahwa server file tunggal yang digunakan untuk menyimpan gambar dapat diganti dengan beberapa server file, masing-masing berisi kumpulan gambar uniknya sendiri. (Lihat) Arsitektur ini akan memungkinkan sistem untuk mengisi setiap file server dengan gambar, menambahkan server tambahan saat ruang disk terisi. Desain akan membutuhkan skema penamaan yang mengaitkan nama file gambar dengan server yang memuatnya. Nama gambar dapat dibuat dari skema hashing yang konsisten yang terkait dengan server. Atau sebagai alternatif, setiap gambar dapat memiliki ID tambahan, yang akan memungkinkan layanan pengiriman memproses hanya kisaran ID yang terkait dengan setiap server (sebagai indeks) saat meminta gambar.


Gambar 1.4: Aplikasi hosting gambar dengan redundansi dan sharding

Tentu saja, ada kesulitan dalam mendistribusikan data atau fungsionalitas ke banyak server. Salah satu pertanyaan kunci - lokasi data; dalam sistem terdistribusi, semakin dekat datanya ke lokasi operasi atau titik komputasi, semakin baik kinerja sistem. Akibatnya, pendistribusian data ke beberapa server berpotensi menimbulkan masalah, karena setiap kali data dibutuhkan, terdapat risiko bahwa data mungkin tidak tersedia di tempat permintaan, server harus melakukan pengambilan sampel yang mahal dari informasi yang diperlukan melalui jaringan.

Masalah potensial lainnya muncul dalam formulir
inkonsistensi (inkonsistensi)Ketika berbagai layanan membaca dan menulis pada sumber daya bersama, kemungkinan layanan lain atau penyimpanan data, ada kemungkinan kondisi balapan - di mana beberapa data dianggap diperbarui ke keadaan saat ini, tetapi pada kenyataannya itu dibaca sebelum diperbarui - dalam hal ini datanya tidak konsisten. Misalnya, dalam skenario hosting gambar, kondisi balapan mungkin terjadi jika satu klien mengirim permintaan untuk memperbarui gambar anjing, mengubah judul "Anjing" menjadi "Gizmo," saat klien lain membaca gambar. Dalam situasi seperti ini, tidak jelas judul mana, "Dog" atau "Gizmo", yang akan diterima oleh klien kedua.

Tentu saja ada beberapa kendala yang terkait dengan sharding data, tetapi sharding memungkinkan Anda membedakan setiap masalah dari yang lain: berdasarkan data, menurut pemuatan, pola penggunaan, dll. menjadi blok yang terkontrol. Ini dapat membantu dengan skalabilitas dan pengelolaan, tetapi risikonya masih ada. Ada banyak cara untuk mengurangi risiko dan menangani kegagalan; namun, agar ringkasnya, mereka tidak tercakup dalam bab ini. Jika Anda ingin informasi lebih lanjut tentang topik ini, Anda harus melihat toleransi kesalahan dan memantau posting blog.

1.3. Komponen struktural dari akses data yang cepat dan dapat diskalakan

Setelah membahas beberapa prinsip dasar dalam pengembangan sistem terdistribusi, sekarang mari beralih ke akses data penskalaan titik yang lebih sulit.

Aplikasi web paling sederhana, seperti LAMP stack, mirip dengan gambar di.


Gambar 1.5: Aplikasi Web Sederhana

Seiring pertumbuhan aplikasi, ada dua tantangan utama: penskalaan akses ke server aplikasi dan database. Dalam desain aplikasi yang sangat skalabel, server web atau server aplikasi biasanya diminimalkan dan sering kali menerapkan arsitektur yang tidak berbagi sumber daya. Hal ini membuat lapisan server aplikasi dari sistem berskala. Desain ini akan menggeser kerja keras ke bawah tumpukan ke server database dan layanan pendukung; Di sinilah masalah penskalaan dan kinerja yang sebenarnya berperan.

Bagian selanjutnya dari bab ini berfokus pada beberapa strategi dan teknik yang paling umum untuk meningkatkan kinerja dan skalabilitas untuk jenis layanan ini dengan menyediakan akses cepat ke data.


Gambar 1.6: Aplikasi Web Sederhana

Kebanyakan sistem dapat disederhanakan menjadi diagram,
yang merupakan titik awal yang baik untuk mulai mempertimbangkan. Jika Anda memiliki banyak data, Anda dapat berasumsi bahwa Anda menginginkannya semudah dan secepat kotak permen di laci atas meja Anda. Meskipun perbandingan ini terlalu disederhanakan, perbandingan ini menunjuk pada dua masalah yang menantang: skalabilitas gudang data dan akses data yang cepat.

Untuk bagian ini, anggaplah Anda memiliki banyak terabyte (TB) data, dan Anda mengizinkan pengguna untuk mengakses sebagian kecil dari data itu tanpa urutan tertentu. (Cm.)
Tugas serupa adalah menemukan file gambar di suatu tempat di server file di aplikasi hosting gambar contoh.


Gambar 1.7: Mengakses data tertentu

Hal ini sangat sulit karena memuat terabyte data ke dalam memori bisa sangat mahal dan secara langsung mempengaruhi jumlah operasi I / O disk. Kecepatan membaca dari disk beberapa kali lebih rendah daripada kecepatan membaca dari RAM - kita dapat mengatakan bahwa akses ke memori secepat Chuck Norris, sementara akses ke disk lebih lambat daripada antrian di klinik. Perbedaan kecepatan ini terutama terlihat untuk kumpulan data besar; dalam angka kering, akses memori 6 kali lebih cepat daripada pembacaan disk untuk pembacaan berurutan, dan 100.000 kali lebih cepat untuk pembacaan acak (lihat Patologi Data Besar, http://queue.acm.org/detail. cfm? id \u003d 1563874).). Selain itu, bahkan dengan pengenal unik, memecahkan masalah menemukan sebagian kecil data bisa sama sulitnya dengan mengeluarkan permen terakhir berisi cokelat dari sekotak ratusan permen lain tanpa melihat.

Untungnya, ada banyak pendekatan yang dapat Anda lakukan untuk menyederhanakan berbagai hal, di antaranya empat yang terpenting adalah cache, proxy, indeks, dan penyeimbang beban. Sisa dari bagian ini membahas bagaimana masing-masing konsep ini dapat digunakan untuk mempercepat akses data.

Cache

Manfaat caching dari prinsip inti bahwa data yang baru-baru ini diminta kemungkinan besar akan dibutuhkan lagi. Cache digunakan di hampir setiap lapisan komputasi: perangkat keras, sistem operasi, browser web, aplikasi web, dan lainnya. Cache itu seperti memori jangka pendek: ukurannya terbatas, tetapi lebih cepat dari sumber data asli, dan berisi item yang baru diakses. Cache bisa ada di semua level dalam arsitektur, tetapi sering kali berada di level yang paling dekat dengan front-end, di mana cache diimplementasikan untuk mengembalikan data dengan cepat tanpa beban back-end yang signifikan.

Jadi bagaimana cache dapat digunakan untuk mempercepat akses data dalam API sampel kami? Dalam kasus ini, ada beberapa lokasi cache yang sesuai. Sebagai salah satu opsi penempatan yang memungkinkan, Anda dapat memilih node di tingkat kueri, seperti yang ditunjukkan di
.


Gambar 1.8: Menempatkan cache pada node tingkat kueri

Menempatkan cache secara langsung pada node tingkat permintaan memungkinkan penyimpanan lokal data respons. Setiap kali permintaan layanan dibuat, host akan segera mengembalikan data lokal yang di-cache, jika ada. Jika tidak ada di cache, maka node permintaan akan meminta data dari disk. Cache pada satu node di tingkat permintaan juga dapat ditempatkan di memori (yang sangat cepat) dan di disk lokal node (lebih cepat daripada mencoba mengakses NAS).


Gambar 1.9: Sistem cache

Apa yang terjadi ketika Anda menyebarkan cache ke beberapa node? Seperti yang Anda lihat, jika lapisan kueri akan menyertakan banyak node, kemungkinan setiap node akan memiliki cache sendiri. Namun, jika load balancer Anda secara acak mendistribusikan permintaan antar node, permintaan yang sama akan dikirim ke node yang berbeda, sehingga meningkatkan kegagalan cache. Dua cara untuk mengatasi kendala ini adalah cache global dan terdistribusi.

Cache global

Arti cache global jelas dari namanya: semua node menggunakan satu ruang cache. Dalam kasus ini, server atau penyimpanan file dari beberapa jenis ditambahkan yang lebih cepat dari penyimpanan asli Anda dan yang akan tersedia untuk semua node pada tingkat kueri. Setiap node permintaan meminta cache dengan cara yang sama seolah-olah itu lokal. Skema caching semacam ini dapat menyebabkan kebingungan, karena sangat mudah untuk membebani satu cache dengan bertambahnya jumlah klien dan permintaan. Pada saat yang sama, skema seperti itu sangat efektif untuk arsitektur tertentu (terutama jika menyangkut perangkat keras khusus yang membuat cache global ini sangat cepat, atau yang memiliki sekumpulan data tetap untuk di-cache).

Ada dua bentuk standar cache global, yang ditunjukkan pada diagram. Situasi ini digambarkan ketika respons yang di-cache tidak ditemukan di cache, cache itu sendiri bertanggung jawab untuk menerima bagian data yang hilang dari penyimpanan yang mendasarinya. Ini menggambarkan tanggung jawab node permintaan untuk mengambil data apa pun yang tidak ditemukan di cache.


Gambar 1.10: Cache global, tempat cache bertanggung jawab untuk mengambil


Gambar 1.11: Cache global tempat node permintaan bertanggung jawab untuk mengambil

Sebagian besar aplikasi yang memperkuat cache global cenderung menggunakan tipe pertama, di mana cache itu sendiri mengelola penggantian dan mengambil data untuk mencegah klien membanjiri permintaan untuk data yang sama. Namun, ada beberapa kasus di mana penerapan kedua lebih masuk akal. Misalnya, jika cache digunakan untuk file yang sangat besar, tingkat cache hit yang rendah akan membebani cache buffer dengan kegagalan cache; dalam situasi ini, sangat membantu jika memiliki persentase besar dari total kumpulan data (atau kumpulan data panas) di cache. Contoh lainnya adalah arsitektur di mana file yang disimpan dalam cache bersifat statis dan tidak boleh dihapus. (Ini mungkin karena karakteristik kinerja yang mendasari latensi semacam itu - mungkin bagian data tertentu harus sangat cepat untuk kumpulan data besar - saat logika aplikasi memahami strategi penggantian atau hotspot lebih baik daripada cache.)

Cache terdistribusi

Indeks ini sering disimpan dalam memori atau di suatu tempat yang sangat lokal untuk permintaan klien yang masuk. Berkeley DB (BDB) dan struktur data pohon, yang biasanya digunakan untuk menyimpan data dalam daftar terurut, ideal untuk akses yang diindeks.

Seringkali ada banyak tingkat indeks yang berfungsi sebagai peta, memindahkan Anda dari satu lokasi ke lokasi lain, dan seterusnya, sampai Anda mendapatkan bagian data yang Anda inginkan. (Cm.)


Gambar 1.17: Indeks bertingkat

Indeks juga dapat digunakan untuk membuat beberapa tampilan lain dari data yang sama. Untuk kumpulan data besar, ini adalah cara yang bagus untuk menentukan filter dan tampilan yang berbeda tanpa harus membuat banyak salinan tambahan dari data tersebut.

Misalnya, sistem penginangan gambar yang disebutkan di atas sebenarnya menghosting gambar halaman buku, dan layanan tersebut mengaktifkan kueri klien pada teks dalam gambar tersebut, mencari semua konten teks pada topik tertentu, seperti mesin telusur yang memungkinkan Anda menelusuri HTML. kandungan. Dalam kasus ini, semua gambar buku ini menggunakan banyak server untuk menyimpan file, dan menemukan satu halaman untuk disajikan kepada pengguna bisa sangat sulit. Awalnya, indeks terbalik untuk menanyakan kata-kata dan kumpulan kata yang sewenang-wenang harus tersedia; lalu ada tugas menavigasi ke halaman dan lokasi yang tepat di buku itu dan mengekstrak gambar yang benar untuk hasil pencarian. Jadi, dalam hal ini, indeks terbalik akan memetakan ke suatu lokasi (seperti buku B), dan kemudian B dapat berisi indeks dengan semua kata, lokasi, dan jumlah kemunculan di setiap bagian.

Indeks terbalik yang dapat ditampilkan Index1 pada diagram di atas akan terlihat seperti ini: Setiap kata atau kumpulan kata berfungsi sebagai indeks untuk buku yang memuatnya.

Indeks perantara akan terlihat serupa, tetapi hanya berisi kata-kata, lokasi, dan informasi untuk Buku B. Arsitektur berlapis-lapis ini memungkinkan setiap indeks mengambil lebih sedikit ruang daripada jika semua informasi ini disimpan dalam satu indeks terbalik yang besar.

Dan ini adalah kunci dalam sistem skala besar, karena meskipun dikompresi, indeks ini bisa jadi cukup besar dan mahal untuk disimpan. Misalkan kita memiliki banyak buku dari seluruh dunia dengan sistem ini - 100.000.000 (lihat entri blog "Di Dalam Google Buku") - dan setiap buku hanya 10 halaman (untuk menyederhanakan perhitungan) dengan 250 kata per halaman : Ini memberi kita total 250 miliar kata. Jika kita mengambil jumlah rata-rata karakter dalam satu kata sebagai 5, dan menyandikan setiap karakter dalam 8 bit (atau 1 byte, meskipun beberapa karakter sebenarnya menempati 2 byte), sehingga menghabiskan 5 byte per kata, maka indeks berisi setiap kata hanya sekali akan membutuhkan lebih dari 1 terabyte penyimpanan. Jadi Anda dapat melihat bahwa indeks yang berisi informasi lain, seperti kumpulan kata, lokasi data, dan jumlah penggunaan, dapat bertambah volumenya dengan sangat cepat.

Membuat indeks perantara ini dan menyajikan data dalam potongan yang lebih kecil membuat masalah big data lebih mudah dipecahkan. Data dapat didistribusikan ke beberapa server dan pada saat yang sama tersedia dengan cepat. Indeks adalah landasan pengambilan informasi dan fondasi untuk mesin pencari modern saat ini. Tentu saja, bagian ini hanya bersifat umum tentang topik pengindeksan, dan banyak penelitian telah dilakukan tentang cara membuat indeks lebih kecil, lebih cepat, berisi lebih banyak informasi (seperti relevansi), dan diperbarui secara mulus. (Ada beberapa masalah dengan pengelolaan istilah yang bersaing, dan jumlah pembaruan yang diperlukan untuk menambahkan data baru atau mengubah data yang ada, terutama ketika relevansi atau peringkat terlibat.)

Mampu menemukan data Anda dengan cepat dan mudah adalah hal yang penting, dan indeks adalah alat yang paling sederhana dan efektif untuk mencapai tujuan ini.

Load balancer

Terakhir, bagian penting lainnya dari sistem terdistribusi adalah penyeimbang beban. Load balancer adalah bagian penting dari arsitektur apa pun, karena peran mereka adalah mendistribusikan beban di antara node yang bertanggung jawab untuk melayani permintaan. Hal ini memungkinkan beberapa node untuk secara transparan melayani fungsi yang sama dalam sistem. (Lihat) Tujuan utamanya adalah untuk menangani banyak koneksi simultan dan merutekan koneksi tersebut ke salah satu node yang diminta, memungkinkan sistem untuk memperluas dengan hanya menambahkan node untuk melayani lebih banyak permintaan.


Gambar 1.18: Load Balancer

Ada banyak algoritme berbeda untuk melayani permintaan, termasuk pemilihan node acak, round robin, atau bahkan pemilihan node berdasarkan kriteria tertentu seperti penggunaan CPU atau RAM. Penyeimbang beban dapat diimplementasikan sebagai perangkat keras atau perangkat lunak. HAProxy adalah load balancer open source yang paling banyak digunakan.

Dalam sistem terdistribusi, penyeimbang beban sering kali berada di ujung depan sistem sehingga semua permintaan masuk langsung melaluinya. Sangat mungkin bahwa dalam sistem terdistribusi yang kompleks, permintaan harus melalui beberapa penyeimbang beban, seperti yang ditunjukkan di
.


Gambar 1.19: Beberapa Load Balancer

Seperti proxy, beberapa penyeimbang beban juga dapat merutekan permintaan secara berbeda, bergantung pada jenis permintaan. Mereka juga dikenal sebagai proxy terbalik.

Mengelola data khusus untuk sesi pengguna tertentu adalah salah satu tantangan saat menggunakan penyeimbang beban. Di situs e-niaga, ketika Anda hanya memiliki satu pelanggan, sangat mudah untuk memungkinkan pengguna memasukkan barang ke keranjang mereka dan menyimpan isinya di antara kunjungan (ini penting, karena kemungkinan produk dijual meningkat secara signifikan jika, setelah pengguna kembali ke situs, produk masih ada di keranjangnya). Namun, jika pengguna diarahkan ke satu situs untuk sesi pertama, lalu ke situs lain pada kunjungan berikutnya, maka ketidakkonsistenan dapat terjadi karena situs baru mungkin tidak memiliki data terkait konten keranjang belanja pengguna tersebut. (Tidakkah Anda akan kecewa jika Anda meletakkan paket Mountain Dew di keranjang Anda dan ketika Anda mengembalikannya tidak akan ada di sana?) Salah satu solusi mungkin membuat sesi "lengket" sehingga pengguna selalu diarahkan node yang sama. Namun, memanfaatkan beberapa fitur keandalan, seperti failover otomatis, akan sangat sulit. Dalam kasus ini, keranjang pengguna akan selalu memiliki konten, tetapi jika node lengket mereka tidak tersedia, maka diperlukan pendekatan khusus dan asumsi tentang konten keranjang tidak berlaku lagi (meskipun, semoga, asumsi ini tidak akan dimasukkan ke dalam aplikasi). Tentu saja, masalah ini dapat diselesaikan dengan strategi dan alat lain seperti yang dijelaskan dalam bab ini, seperti layanan, dan banyak lainnya (seperti cache browser, cookie, dan penulisan ulang URL).

Jika sistem hanya memiliki beberapa node, maka teknik seperti DNS carousel lebih cenderung lebih praktis daripada load balancer, yang bisa mahal dan menambahkan lapisan yang tidak perlu ke kompleksitas sistem. Tentu saja, sistem besar memiliki semua jenis algoritma penjadwalan dan load balancing yang berbeda, termasuk yang sederhana seperti pemilihan acak atau algoritma carousel, serta mekanisme yang lebih kompleks yang memperhitungkan fitur kinerja dari pola penggunaan sistem. Semua algoritme ini mendistribusikan lalu lintas dan permintaan, dan dapat memberikan alat keandalan yang berguna seperti failover otomatis atau penghapusan otomatis dari node yang rusak (misalnya, saat node menjadi tidak responsif). Namun, fitur lanjutan ini dapat membuat masalah diagnosis menjadi rumit. Misalnya, dalam situasi beban tinggi, penyeimbang beban akan menghapus node yang mungkin lambat atau waktu habis (karena rentetan permintaan), yang hanya akan memperburuk situasi untuk node lain. Dalam kasus ini, kontrol ekstensif penting karena meskipun lalu lintas dan beban sistem secara keseluruhan tampak menurun (karena node melayani lebih sedikit permintaan), node individu mungkin kelebihan beban.

Penyeimbang beban adalah cara mudah untuk meningkatkan kapasitas sistem. Seperti teknik lain yang dijelaskan dalam artikel ini, ini memainkan peran penting dalam arsitektur sistem terdistribusi. Penyeimbang beban juga menyediakan fungsi penting untuk memverifikasi kesehatan node. Jika, sebagai hasil dari pemeriksaan semacam itu, sebuah node tidak merespons atau kelebihan beban, maka node tersebut dapat dihapus dari kumpulan pemrosesan permintaan, dan, karena redundansi sistem Anda, beban akan didistribusikan ulang di antara node kerja yang tersisa.

Antrian

Sejauh ini, kami telah melihat banyak cara untuk membaca data dengan cepat. Pada saat yang sama, manajemen catatan yang efisien adalah bagian penting lain dari penskalaan tingkat data. Ketika sistem sederhana dengan beban pemrosesan minimal dan basis data kecil, penulisan dapat diprediksi dengan cepat. Namun, dalam sistem yang lebih kompleks, proses ini bisa memakan waktu lama tanpa batas. Jadi, misalnya, data mungkin harus ditulis ke beberapa lokasi di server atau indeks yang berbeda, atau sistem mungkin sedang dalam beban berat. Dalam kasus di mana penulisan, atau bahkan tugas apa pun membutuhkan waktu lama, untuk mencapai kinerja dan ketersediaan memerlukan pengembangan asinkron ke dalam sistem. Cara umum untuk melakukannya adalah dengan mengantrekan permintaan.


Gambar 1.20: Permintaan sinkron

Bayangkan sebuah sistem di mana setiap klien meminta tugas layanan jarak jauh. Masing-masing klien ini mengirimkan permintaan mereka ke server, yang menyelesaikan tugas secepat mungkin dan mengembalikan hasilnya ke klien yang sesuai. Dalam sistem kecil, di mana satu server (atau layanan logis) dapat melayani klien yang masuk secepat mereka tiba, situasi seperti ini akan bekerja dengan baik. Namun, ketika server menerima lebih banyak permintaan daripada yang dapat ditangani, maka setiap klien dipaksa untuk menunggu klien lain menyelesaikan pemrosesan sebelum tanggapan atas permintaannya sendiri dibuat. Ini adalah contoh permintaan sinkron yang digambarkan dalam.

Perilaku sinkron semacam ini dapat secara signifikan menurunkan kinerja klien; pada kenyataannya, menganggur, klien terpaksa menunggu sampai dia menerima tanggapan atas permintaan tersebut. Menambahkan server tambahan untuk mengatasi beban sistem tidak benar-benar menyelesaikan masalah; bahkan dengan penyeimbangan beban yang efektif, sangat sulit untuk memastikan distribusi beban yang merata dan merata yang diperlukan untuk memaksimalkan produktivitas pelanggan. Selain itu, jika server tidak tersedia untuk memproses permintaan ini (atau gagal), maka klien yang terhubung dengannya juga akan berhenti bekerja. Solusi efektif untuk masalah ini memerlukan abstraksi antara permintaan klien dan pekerjaan aktual yang sedang dilakukan untuk menyervisnya.


Gambar 1.21: Menggunakan Antrean untuk Mengelola Permintaan

Antrian masuk. Mekanisme antrian sangat sederhana: sebuah tugas tiba, memasuki antrian, dan kemudian pekerja menerima tugas berikutnya segera setelah mereka memiliki kesempatan untuk memprosesnya. (Lihat.) Tugas ini bisa berupa entri database sederhana, atau sesuatu yang serumit menghasilkan gambar pratinjau untuk dokumen. Ketika klien mengirim permintaan ke tugas antrian, itu tidak perlu lagi menunggu hasil eksekusi; sebaliknya, permintaan hanya perlu diakui sebagaimana mestinya. Konfirmasi ini nantinya dapat berfungsi sebagai link ke hasil kerja saat klien memintanya.

Antrian memungkinkan klien untuk bekerja secara asinkron dengan menyediakan abstraksi strategis dari permintaan dan respons klien. Di sisi lain, dalam sistem sinkron, tidak ada perbedaan antara permintaan dan respons sehingga tidak dapat dikontrol secara terpisah. Dalam sistem asinkron, klien menyiapkan tugas, layanan merespons dengan pesan yang mengonfirmasi bahwa tugas telah diterima, dan kemudian klien secara berkala dapat memeriksa status tugas, hanya menanyakan hasilnya segera setelah selesai. Saat klien membuat permintaan asinkron, ia bebas melakukan pekerjaan lain, dan bahkan membuat permintaan asinkron ke layanan lain. Yang terakhir adalah contoh bagaimana antrian dan pesan bekerja dalam sistem terdistribusi.

Antrian juga memberikan perlindungan terhadap gangguan dan penolakan layanan. Misalnya, cukup mudah membuat antrean yang sangat persisten yang dapat mengulangi permintaan layanan yang berhenti berfungsi karena pemadaman server sementara. Lebih disukai menggunakan antrean untuk menerapkan jaminan QoS daripada mengekspos klien ke pemadaman layanan sementara, yang membutuhkan penanganan error sisi klien yang kompleks dan seringkali tidak konsisten.

1.4. Kesimpulan

Mengembangkan sistem yang efisien dengan akses cepat ke sejumlah besar data adalah topik yang sangat menarik, dan masih ada sejumlah besar alat bagus yang memungkinkan adaptasi semua jenis aplikasi baru. Bab ini hanya menyentuh beberapa contoh saja, namun kenyataannya masih banyak lagi - dan kreasi inovasi baru di bidang ini akan terus berlanjut.

Karya ini didistribusikan di bawah lisensi Creative Commons Attribution 3.0 yang tidak diubah. Lihat detailnya di