Tekanan Balik
Kendalikan pengeluar pantas dengan selamat.
Tekanan Balik ialah pelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian merangkumi sejumlah 4 pelajaran.
Apakah Tekanan Belakang?
Tekanan belakang ialah mekanisme kawalan aliran yang menghalang penghasil pantas daripada membebankan pengguna perlahan. Daripada menimbal tanpa had atau membuang data, pengguna memberi isyarat tentang jumlah yang boleh dikendalikannya.
Akka Streams melaksanakan piawaian Reactive Streams, yang membolehkan permintaan mengalir ke hulu dan elemen mengalir ke hilir.
Aliran Dipacu Permintaan
Setiap peringkat hanya menghasilkan output apabila peringkat seterusnya telah memberi isyarat permintaan. Sink meminta N elemen; permintaan itu merambat ke hulu sehingga Sumber menghasilkan tepat seperti yang diminta.
Protokol berasaskan tarikan ini bermakna penghasil tidak pernah menghantar lebih banyak daripada yang boleh diproses oleh pengguna.
Mengapa Ini Penting untuk Saluran Paip
Tanpa tekanan belakang, pengguna Kafka yang pantas dan membekalkan pangkalan data yang perlahan akan mengumpulkan berjuta-juta rekod yang sedang diproses, menghabiskan memori dan menyebabkan proses terhenti.
Tekanan belakang mengehadkan hulu secara semula jadi mengikut peringkat paling perlahan, lalu mengekalkan penggunaan memori yang stabil semasa beban tinggi.
// Fast source, slow sink: backpressure slows the source
val g =
Source(1 to 1000000)
.map(_ * 2)
.to(slowDatabaseSink)Penimbalan Dalaman
Di antara sempadan tak segerak, Akka Streams mengekalkan penimbal dalaman yang kecil (lalai 16 elemen). Ia menyerap lonjakan singkat supaya peringkat tidak perlu bergerak serentak bagi setiap elemen.
Apabila penimbal penuh, tekanan belakang bermula dan hulu berhenti menghasilkan sehingga ruang tersedia semula.
import akka.stream.Attributes
val buffered =
Flow[Int]
.map(identity)
.addAttributes(Attributes.inputBuffer(initial = 32, max = 32))buffer Eksplisit dengan Strategi Limpahan
Operator buffer menyisipkan penimbal eksplisit dengan saiz yang dipilih serta OverflowStrategy yang menentukan perkara yang berlaku apabila penimbal penuh.
Ini membolehkan Anda menukar penggunaan memori dengan keupayaan untuk memisahkan kelajuan penghasil dan pengguna.
import akka.stream.OverflowStrategy
val withBuffer =
Source(1 to 1000)
.buffer(size = 100, OverflowStrategy.backpressure)Strategi Limpahan
Strategi termasuk backpressure (memperlahankan hulu), dropHead/dropTail (membuang yang paling lama atau paling baharu), dropBuffer, dropNew, dan fail (menamatkan dengan ralat).
Strategi pembuangan sesuai untuk data langsung seperti bacaan penderia, yang membolehkan nilai lapuk dibuang dengan selamat.
import akka.stream.OverflowStrategy
val latestWins =
liveTicks.buffer(1, OverflowStrategy.dropHead)
val strict =
liveTicks.buffer(50, OverflowStrategy.fail)Conflate untuk Membuat Ringkasan
Apabila pengguna perlahan, conflate menggabungkan elemen yang menunggu menjadi satu menggunakan fungsi gabungan, bukannya menimbal semuanya.
Contohnya, gabungkan banyak kemas kini berangka menjadi jumlahnya supaya pengguna sentiasa melihat agregat perkara yang terlepas.
val summarized =
fastMetrics
.conflate((acc, next) => acc + next)
// Slow downstream receives summed batchesExpand untuk Memenuhi Permintaan
expand ialah pasangan dwi kepada conflate: apabila hiliran meminta lebih pantas daripada penghasilan hulu, ia mensintesis elemen tambahan daripada nilai terakhir yang dilihat.
Ini berguna untuk terus menghasilkan bacaan terkini pada kadar yang tetap.
val repeated =
sensor.expand(last => Iterator.continually(last))
// Downstream always gets the latest sensor valueSempadan Tak Segerak
Secara lalai, peringkat yang digabungkan berjalan pada satu aktor tanpa penimbalan antara satu sama lain. Menyisipkan async meletakkan satu peringkat pada aktornya sendiri, menambah penimbal dan membolehkan keselarian berpaip.
Sempadan tak segerak ialah tempat penimbal tekanan belakang sebenarnya berada.
val pipelined =
Source(1 to 1000)
.map(slowStep).async
.map(anotherSlowStep).async
.to(Sink.ignore)Throttle sebagai Kawalan Kadar Eksplisit
throttle mengenakan kadar maksimum yang disengajakan, lalu menghasilkan tekanan belakang ke hulu untuk mematuhinya. Ini melindungi perkhidmatan luaran yang mengehadkan kadar walaupun pengguna boleh berjalan lebih pantas.
Parameter letusan membenarkan lonjakan singkat melebihi kadar tetap.
import scala.concurrent.duration._
val limited =
requests
.throttle(
elements = 100, per = 1.second, maximumBurst = 20,
akka.stream.ThrottleMode.Shaping)Memerhati Tekanan Belakang
Anda boleh mengesan tekanan belakang dengan memerhatikan kelembapan hulu atau mengukur penggunaan penimbal. Operator log dan atribut aliran Akka membantu menjejak tempat saluran paip tersekat.
Penimbal yang sentiasa penuh menunjukkan peringkat paling perlahan yang mengehadkan daya pemprosesan.
val traced =
Source(1 to 100)
.log("after-source")
.map(_ * 2)
.log("after-map")
.to(Sink.ignore)Semakan Pantas
Fikirkan cara Akka Streams menghalang penghasil pantas daripada membanjiri pengguna perlahan.
Imbas Kembali
Tekanan belakang ialah tunjang Akka Streams yang dipacu permintaan: pengguna memberi isyarat permintaan ke hulu supaya penghasil tidak dapat membebankan mereka, sekali gus mengehadkan penggunaan memori.
Anda telah melihat penimbal dalaman, operator buffer eksplisit dengan strategi limpahan, pembuatan ringkasan menggunakan conflate, pemenuhan permintaan dengan expand, sempadan tak segerak, dan kawalan kadar yang disengajakan melalui throttle. Seterusnya, Anda akan menjalankan saluran paip lengkap.
Pelajari Scala dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 39
- Pelajaran
- 143
Soalan Lazim
Adakah pelajaran “Tekanan Balik” percuma?
Ya — teks penuh “Tekanan Balik” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian, tingkat taraf kepada CoddyKit PRO. Kursus Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Tekanan Balik”?
Kendalikan pengeluar pantas dengan selamat. Anda berlatih Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Tekanan Balik” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian ini?
Ya. Setiap pelajaran Scala untuk Kejuruteraan Bahagian Belakang dan Pengaturcaraan Fungsian menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.