5 soalan temuduga Dubbo dengan kandungan emas yang tinggi!
Aug 17, 2023 pm 04:04 PMHari ini, saya membawakan anda artikel tentang interaksi Dubbo IO. .
Beberapa soalan menarik
Selepas kaedah perniagaan dilaksanakan, adakah paket data dihantar?
- Apakah perbezaan dalam model benang antara netty3 dan netty4?
- Paket data mencapai penimbal soket sistem pengendalian, apa yang berlaku?
- Log yang dijana oleh Penyedia mengambil masa yang sangat singkat, tetapi pihak Pengguna tamat masa. Bagaimana kita boleh menyelesaikan masalah?
- Bolehkah paket data dihantar terus melalui paip di lapisan fizikal?
- Urutan perniagaan pengguna yang menanti adalah dalam Keadaan, pada pukul berapa ia terjaga?
- ...
- Seterusnya, penulis akan menggunakan Dubbo2.5.3 sebagai Pengguna dan 2.7.3 sebagai Pembekal untuk menerangkan keseluruhan proses interaksi Pengarang berdiri dalam perspektif paket data dan memberitahunya dalam orang pertama. Kencangkan tali pinggang keledar anda. . melancong. Pada suatu hari, saya hampir dihantar keluar, dan dikatakan bahawa saya akan pergi ke tempat bernama Dubbo 2.7.3 Provider.
Pada hari ini, urutan perniagaan memulakan panggilan kaedah, dalam FailoverClusterInvoker#doInvoke code> Saya memilih Penyedia, kemudian melalui pelbagai Penapis Pengguna, kemudian melalui saluran paip Netty3, dan akhirnya lulus <code style="font-size: 14px;word-wrap: break-word;padding: 2px 4px;border-radius : 4px ;margin: 0 2px;warna latar belakang: rgba(27,31,35,.05);font-family: Operator Mono, Consolas, Monaco, Menlo, monospace;word-break: break-all;color: # ff6441; ">NioWorker#scheduleWriteIfNecessary
kaedah, saya datang ke baris gilir writeTaskQueue NioWorker. FailoverClusterInvoker#doInvoke
我選擇了一個(gè)Provider,然后經(jīng)過各種Consumer Filter,再經(jīng)過Netty3的pipeline,最后通過NioWorker#scheduleWriteIfNecessary
方法,我來到了NioWorker的writeTaskQueue隊(duì)列中。
當(dāng)我回頭看主線程時(shí),發(fā)現(xiàn)他在DefaultFuture中的Condition等待,我不知道他在等什么,也不知道他要等多久。
我在writeTaskQueue隊(duì)列排了一會隊(duì),看到netty3 IO worker線程在永不停歇的執(zhí)行run方法,大家都稱這個(gè)為死循環(huán)。
最后,我很幸運(yùn),NioWorker#processWriteTaskQueue

NioWorker#processWriteTaskQueue
memilih saya, saya telah ditulis kepada penampan Soket sistem operasi Saya menunggu di penampan Bagaimanapun, saya akan merenungkan perjalanan hari ini, saya melalui dua kumpulan pelancongan, yang dipanggil rangkaian utama dan netty3 IO benang pekerja Baik, kedua-duanya Perkhidmatan semua kumpulan pelancongan adalah baik dan sangat cekap. Saya hanya merakam apa yang saya lihat hari ini dan melukisnya ke dalam gambar Sudah tentu, saya mengabaikan bahagian yang tidak penting.
2. Sistem pengendalian menghantar paket dataSaya telah mengalami banyak perkara ajaib dalam penimbal soket sistem pengendalian.
Di tempat yang dipanggil lapisan pengangkutan, saya menambah nombor port sasaran dan nombor port sumber Di tempat yang dipanggil lapisan rangkaian, saya menambah IP sasaran dan IP sumber, dan pada masa yang sama masa, melalui IP sasaran ANDed dengan topeng untuk mencari IP "lompat seterusnya"???????? Di tempat yang dipanggil lapisan pautan data, saya menambah alamat MAC sasaran "hop seterusnya" melalui protokol ARP. Alamat MAC sumber??
Perkara yang paling menarik ialah kami mengambil bahagian kereta kabel setiap kali kami menukar kereta kabel, kami terpaksa mengubah suai alamat MAC sasaran dan alamat MAC sumber Saya kemudiannya, saya bertanya kepada rakan-rakan paket data saya industri yang sama dengan mod ini dipanggil "Lompat Seterusnya", lompat atas lompatan demi lompatan. Terdapat banyak paket data di sini Yang besar adalah dalam satu kereta kabel, dan yang lebih kecil diperah ke dalam satu kereta kabel Terdapat juga perkara yang mengerikan kereta (walaupun ini tidak penting kepada paket data kami), ini dipanggil membongkar dan melekat. Dalam tempoh ini, kami melepasi suis dan penghala, dan tempat ini sangat gembira untuk bermain.
Semestinya ada juga perkara yang tidak menyenangkan iaitu kesesakan kereta kabel di destinasi penuh, dan tiada masa untuk dibawa pergi, jadi tunggu sahaja. . dia boleh mengendalikan membongkar dan melekat.
NioEventLoop#processSelectedKeys
,再經(jīng)過pipeline中的各種入站handler,我來到了AllChannelHandler的線程池,當(dāng)然我有很多選擇,但是我隨便選了一個(gè)目的地,這里會經(jīng)歷解碼、一系列的Filter,才會來的目的地“業(yè)務(wù)方法”,NettyCodecAdapter#InternalDecoder

4. Satu paket data baru telah dijana di sebelah Penyedia

由業(yè)務(wù)線程經(jīng)過io.netty.channel.AbstractChannelHandlerContext#writeAndFlush
io.netty.channel.AbstractChannelHandlerContext#writeAndFlush
io.netty.channel.AbstractChannelHandlerContext#writeAndFlush
io.netty.channel.AbstractChannelHandlerContext#writeAndFlush
io.netty.util.concurrent.SingleThreadEventExecutor#execute
執(zhí)行addTaskio.netty.util.concurrent.SingleThreadEventExecutor#taskQueue
io.netty.channel.AbstractChannelHandlerContext$WriteTask
等待NioEventLoop發(fā)車,等待的過程中,我記錄了走過的腳步。
在這里,我看到NioEventLoop是一個(gè)死循環(huán),不停地從任務(wù)隊(duì)列取任務(wù),執(zhí)行任務(wù)AbstractChannelHandlerContext.WriteAndFlushTask
,然后指引我們到socket緩沖區(qū)等候,永不知疲倦,我似乎領(lǐng)略到他身上有一種倔強(qiáng)的、追求極致的匠人精神。
經(jīng)過io.netty.channel.AbstractChannel.AbstractUnsafe#write
io.netty.util. concurrent.SingleThreadEventExecutor#execute
執(zhí)行addTask????將任務(wù)放入隊(duì)列io.netty.util.concurrent.SingleThreadEventExecutor#taskQueue
????我便跟隨著io.netty.channel.AbstractChannelHandlerContext$WriteTask
等待NioEventLoop發(fā)車,等待的過程中,我記錄了語。 >
在這里,我看到NioEventLoop是一個(gè)死循環(huán),不停地從任務(wù)隊(duì)列取任務(wù),執(zhí)行任務(wù)AbstractChannelHandlerContext.WriteAndFlushTask
,然后指引我們到socket緩沖區(qū)等候,永不知疲倦,我似乎領(lǐng)們到socket緩沖區(qū)等候,永不知疲倦,我似乎領(lǐng)世略到乎領(lǐng)不強(qiáng)的、追求極致的匠人精神。??
經(jīng)過io.netty.channel.AbstractChannel.AbstractUnsafe#write
,我到達(dá)了操作系統(tǒng)socket緩沖醫(yī)統(tǒng)socket緩沖區(qū)。在沖區(qū)。在泱經(jīng)和大多數(shù)數(shù)據(jù)包一樣,也是做纜車達(dá)到目的地。??
5 Tiba di dubbo 2.5.3 Pengguna
Selepas tiba di dubbo 2.5.3 Pengguna, saya menunggu di buffer soket sistem operasi untuk seketika, dan kemudian mengambil "Zero Copy" di bot laju dan tiba Destinasi sebenar. Destinasi dubbo 2.5.3 Pengguna, di sini saya dapati, NioWorker#run ialah gelung tak terhingga, dan kemudian melaksanakan <code style="font-size: 14px;word-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin: 0 2px;background-color: rgba( 27,31,35,.05);font-family: Operator Mono, Consolas, Monaco, Menlo, monospace;word-break: break-all;color: #ff6441;">NioWorker#processSelectedKeys
, melalui NioWorker#read cara untuk membacanya, saya mencapai kumpulan benang daripada AllChannelHandler, Ini ialah kumpulan benang perniagaan. NioWorker#run
是一個(gè)死循環(huán),然后執(zhí)行NioWorker#processSelectedKeys
,通過NioWorker#read
方式讀出來,我就到達(dá)了AllChannelHandler的線程池,這是一個(gè)業(yè)務(wù)線程池。
我在這里等待一會,等任務(wù)被調(diào)度,我看見com.alibaba.dubbo.remoting.exchange.support.DefaultFuture#doReceived
com.alibaba .dubbo.remoting.exchange.support.DefaultFuture#doReceived
telah dilaksanakan dan isyarat Keadaan telah dilaksanakan pada masa yang sama. Saya melihat benang yang tersumbat sedang dikejutkan di kejauhan. Pada ketika ini, misi saya telah selesai dan perjalanan ini telah berakhir. Kami meringkaskan model threading netty3 dan netty4 berdasarkan penerangan kendiri kedua-dua paket data.


Rantaian Pengendali dalam ChannelPipeline dalam netty4 dijadualkan secara seragam secara bersiri oleh benang I/O Sama ada operasi baca atau tulis, operasi tulis dalam netty3 diproses oleh urutan perniagaan. Dalam netty4, penggunaan masa yang disebabkan oleh penukaran konteks antara utas boleh dikurangkan, tetapi dalam netty3, utas perniagaan boleh melaksanakan rantaian Pengendali secara serentak. Jika terdapat beberapa operasi Pengendali yang memakan masa yang akan membawa kepada kecekapan rendah netty4, anda boleh mempertimbangkan untuk melaksanakan operasi yang memakan masa ini terlebih dahulu pada urutan perniagaan dan bukannya memprosesnya dalam Pengendali. Memandangkan rangkaian perniagaan boleh dilaksanakan secara serentak, kecekapan juga boleh dipertingkatkan.
Some masalah masalah masalah yang sukar telah menemui beberapa masalah yang sukar, seperti ketika Didi.log yang dijanjikan oleh pembekal mengambil masa yang normal, tetapi masa pengguna keluar pada masa ini, ada yang berikut arahan penyelesaian masalah, didi.log Penapis sebenarnya berada pada tahap yang sangat dalam dan selalunya tidak dapat menggambarkan pelaksanaan sebenar kaedah perniagaan.
Pembekal Selain pelaksanaan hala tuju perniagaan, siri mungkin juga memakan masa, jadi anda boleh menggunakan arthas untuk memantau kaedah terluar org.apache.dubbo.remoting.transport.DecodeHandler#diterima untuk mengecualikan kaedah perniagaan yang Memakan masa. soket melalui netstat, seperti Recv-Q , Send-Q dan Recv-Q ialah data yang telah tiba dalam penimbal penerima tetapi belum lagi dibaca oleh kod aplikasi. Send-Q telah mencapai penimbal penghantaran, tetapi pihak yang satu lagi belum membalas dengan data Ack. Kedua-dua jenis data ini secara amnya tidak terkumpul Jika terkumpul, mungkin terdapat masalah.Lihat sama ada kaedah Consumer NioWorker#processSelectedKeys (dubbo2.5.3) memakan masa. Hingga ke semua butiran keseluruhan pautan... masalah pasti dapat diselesaikan.

- Epilog
Semasa keseluruhan proses interaksi, pengarang mengetepikan beberapa butiran panggilan tindanan benang dan butiran kod sumber, seperti bersiri dan penyahsirilan, cara dubbo membaca paket Penapis data yang lengkap, Bagaimana diisih dan diedarkan sebelum kaedah perniagaan dilaksanakan, dan bagaimanakah mod Reaktor Netty dilaksanakan? Ini adalah soalan yang sangat menarik...
Atas ialah kandungan terperinci 5 soalan temuduga Dubbo dengan kandungan emas yang tinggi!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Artikel ini akan menulis contoh terperinci untuk bercakap tentang perkembangan sebenar dubbo+nacos+Spring Boot. Artikel ini tidak akan merangkumi terlalu banyak pengetahuan teori, tetapi akan menulis contoh paling mudah untuk menggambarkan bagaimana dubbo boleh disepadukan dengan nacos untuk membina persekitaran pembangunan dengan cepat.

Prakata Sebelum memperkenalkan Dubbo, mari kita fahami konsep asas dahulu: Dubbo ialah rangka kerja RPC ialah Panggilan Prosedur Jauh (panggilan prosedur jauh Ia digunakan dalam seni bina aplikasi tunggal dan seni bina aplikasi menegak Semuanya adalah panggilan prosedur tempatan. Ia membenarkan program untuk memanggil prosedur atau fungsi dalam ruang alamat lain (biasanya mesin lain yang dikongsi pada rangkaian) tanpa pengaturcara perlu mengekodkan butiran panggilan jauh secara eksplisit. Panggilan jauh antara aplikasi seni bina yang diedarkan memerlukan rangka kerja RPC untuk membuat panggilan jauh semudah panggilan tempatan. Rangka kerja Dubbo mempunyai komponen Pengguna berikut, yang memanggil perkhidmatan jauh

[[443126]] Biar saya mulakan dengan beberapa perkataan Saya sering memikirkan banyak "soalan mengapa" teknikal apabila saya berjalan Kadang-kadang saya berfikir tentang soalan untuk masa yang lama, dan ia tidak selesai sehingga saya dapat meyakinkan diri saya setiap perkara dalam soalan. Jadi saya ingin merakam pemikiran ini dan membentuk artikel, yang boleh digunakan sebagai siri baru. Anda mungkin tidak dapat melihat kod dalam artikel ini, tetapi anda boleh melihat sekilas beberapa masalah yang mudah diabaikan, serta "mengapa" masalah yang lebih mendalam. Hari ini kami membawakan anda artikel pertama, mengapa Dubbo perlu ditulis semula dalam Go Dubbo, yang dilahirkan di Alibaba dan sumber terbuka pada 2011, telah melalui 10 tahun? Pada 2019, ia telah ditulis semula dalam Go dan sumber terbuka Kini dua tahun kemudian, ia telah berkembang daripada versi V1.0.0 asal kepada V3.0.0.

Jika anda sudah mahir menggunakan Dubbo, artikel ini tidak sesuai untuk anda, tetapi jika anda ingin memahami Dubbo dan belajar Dubbo, ia sangat sesuai untuk anda.

dockerpullzookeeperdockerrun --namezk01-p2181:2181--restartalways-d2e30cac00aca menunjukkan bahawa zookeeper telah berjaya memulakan Zookeeper dan Dubbo ? ZooKeeperZooKeeper ialah perkhidmatan penyelarasan aplikasi teragih sumber terbuka yang diedarkan. Ia adalah perisian yang menyediakan perkhidmatan yang konsisten untuk aplikasi yang diedarkan Fungsi yang disediakan termasuk: penyelenggaraan konfigurasi, perkhidmatan nama domain, penyegerakan teragih, perkhidmatan kumpulan, dsb. DubboDubbo ialah rangka kerja perkhidmatan teragih sumber terbuka Alibaba Ciri terbesarnya ialah ia berstruktur secara berlapis.

Pengenalan Dubbo ialah rangka kerja perkhidmatan berprestasi tinggi dan cemerlang sumber terbuka oleh Alibaba, yang membolehkan aplikasi merealisasikan output perkhidmatan dan fungsi input melalui RPC berprestasi tinggi, dan boleh disepadukan dengan lancar dengan rangka kerja Spring. Ia menyediakan tiga keupayaan teras: permohonan kaedah jauh berorientasikan antara muka, toleransi kesalahan pintar dan pengimbangan beban, dan pendaftaran dan penemuan perkhidmatan automatik. Gambaran Keseluruhan Pada 23 Jun 2020, ApacheDubbo secara rasmi mengeluarkan notis risiko tentang pelaksanaan kod jauh ApacheDubbo Nombor kerentanan ialah CVE-2020-1948, dan tahap kerentanan ialah: berisiko tinggi. ApacheDubbo ialah rangka kerja JavaRPC sumber terbuka berprestasi tinggi dan ringan Ia menyediakan tiga keupayaan teras: jarak jauh berorientasikan antara muka

Penjelasan prinsip dan mekanisme dubbo: 1. Komponen teras; 3. Toleransi kesalahan kluster; , Skalabiliti 9. Keselamatan; 10. Integrasi dengan Spring; Pengenalan terperinci: 1. Komponen teras, termasuk pusat pendaftaran, pusat pemantauan, pengguna perkhidmatan dan penyedia perkhidmatan 2. Prinsip komunikasi Dubbo menggunakan rangka kerja komunikasi rangkaian untuk membuat panggilan perkhidmatan dan sebagainya.

1. Perihalan perhubungan panggilan Dubbo 1.1 Komponen di sini terutamanya terdiri daripada empat bahagian: Pembekal: pembekal perkhidmatan yang mendedahkan perkhidmatan: bertanggungjawab untuk data interaksi protokol antara pembekal dan pengguna Perkhidmatan: maklumat perkhidmatan perniagaan sebenar boleh difahami. Antara muka dan melaksanakan Kontena: Persekitaran operasi Dubbo Pengguna: Pengguna perkhidmatan yang memanggil perkhidmatan jauh Protokol: Bertanggungjawab untuk data interaksi protokol antara pembekal dan pengguna Kluster: Memahami maklumat senarai di bahagian penyedia Proksi: Boleh difahami sebagai ejen panggilan Perkhidmatan pembekal, yang mengambil alih logik panggilan antara muka dalam Pengguna ●Daftar: Mendaftar
