Berbagi teknologi

Hari ke 17 dari 100 Hari Pembangunan Fondasi - Memulai Antrian Pesan

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Hari ke 17 dari 100 Hari Pembangunan Fondasi - Memulai Antrian Pesan

konsep dasar

Apa itu antrian pesan?

MQ:Antrian Pesan

Antrian yang menyimpan pesan. Saat menggunakan pesan, pesan dikonsumsi secara berurutan (antrian masuk pertama, keluar pertama).

Kedua pihak yang terlibat dalam pengiriman pesan disebut produsen Dankonsumen , produsen bertanggung jawab mengirimkan pesan, dan konsumen bertanggung jawab memproses pesan.

Apa gunanya antrian pesan?

Tiga manfaat yang familiar

  • Pemrosesan asinkron: Pemrosesan asinkron diimplementasikan melalui antrian pesan. Setelah mengirim pesan yang sesuai ke antrian pesan, hasilnya segera dikembalikan, mengurangi waktu respons dan meningkatkan pengalaman pengguna. Selanjutnya, sistem mengkonsumsi pesan tersebut.
  • Kliping puncak/pembatasan arus: Pertama-tama simpan pesan transaksi yang dihasilkan oleh konkurensi tinggi dalam waktu singkat dalam antrian pesan, dan kemudian layanan back-end akan secara perlahan menggunakan pesan-pesan ini sesuai dengan kemampuannya sendiri, sehingga menghindari kekalahan langsung dari belakang. -layanan akhir.
  • Kurangi penggandengan sistem: Tidak ada panggilan langsung antar modul, jadi penambahan atau modifikasi modul akan berdampak kecil pada modul lainnya.

Skenario aplikasi perusahaan

  • Menerapkan transaksi terdistribusi: Salah satu solusi untuk transaksi terdistribusi adalah transaksi MQ, yang didukung oleh sebagian besar MQ.Transaksi memungkinkan aplikasi streaming acara untukmengkonsumsi, mengolah, memproduksiSeluruh proses pesan didefinisikan sebagai operasi atom.
  • Jaminan urutan: cocok untuk skenario yang memiliki persyaratan ketat pada urutan data, didukung oleh sebagian besar MQ.
  • Penundaan/waktu pemrosesan: Pesan tidak akan langsung dikonsumsi setelah dikirim, tetapi akan dikonsumsi setelah waktu yang ditentukan.
  • Pemrosesan aliran data: Untuk aliran data besar yang dihasilkan oleh sistem terdistribusi, seperti log bisnis, data pemantauan, perilaku pengguna, dll., antrian pesan dapat mengumpulkan data ini secara real time atau dalam batch dan mengimpornya ke mesin pemrosesan data besar ke mencapai pemrosesan data yang efisien Manajemen dan pemrosesan aliran.

Masalah apa yang ditimbulkan oleh penggunaan antrian pesan?

Mengurangi ketersediaan sistem: Ketersediaan sistem berkurang sampai batas tertentu. Mengapa Anda mengatakan ini? Sebelum bergabung dengan MQ, Anda tidak perlu memikirkan kehilangan pesan atau MQ hang, dll. Namun, setelah memperkenalkan MQ, Anda perlu memikirkannya!

Peningkatan kompleksitas sistem: Setelah bergabung dengan MQ, Anda perlu memastikan bahwa pesan tidak dikonsumsi berulang kali, menangani kehilangan pesan, memastikan urutan pengiriman pesan, dan masalah lainnya!

Masalah konsistensi: Saya sebutkan di atas bahwa antrian pesan dapat mencapai implementasi asinkron, dan asinkron yang dibawa oleh antrian pesan memang dapat meningkatkan kecepatan respon sistem. Namun bagaimana jika konsumen sebenarnya dari pesan tersebut tidak memahami pesan tersebut dengan benar? Hal ini akan menyebabkan inkonsistensi data!

Antrean pesan umum

Kafka

Kafka adalah versi sumber terbuka dari LinkedInPlatform streaming terdistribusi, telah menjadi proyek tingkat atas Apache. Proyek ini digunakan untuk memproses log besar-besaran di masa-masa awal, dan kemudian secara bertahap berkembang menjadi antrean pesan berperforma tinggi dengan fitur lengkap.

Platform streaming memiliki tiga fungsi utama:

  1. antrian pesan: Publikasikan dan berlangganan aliran pesan. Fungsi ini mirip dengan antrean pesan, itulah sebabnya Kafka juga diklasifikasikan sebagai antrean pesan.
  2. Penyimpanan aliran pesan rekaman yang persisten dan toleran terhadap kesalahan: Kafka akan menyimpan pesan ke disk, secara efektif menghindari risiko kehilangan pesan.
  3. Platform pemrosesan streaming: Untuk memproses pesan saat dipublikasikan, Kafka menyediakan pustaka pemrosesan aliran yang lengkap.

RoketMQ

RocketMQ adalah platform pemrosesan data real-time "pesan, acara, streaming" cloud-native yang bersumber terbuka dari Alibaba. RocketMQ memanfaatkan Kafka dan telah menjadi proyek Apache tingkat atas.

Fitur inti RocketMQ (dikutip dari situs resmi RocketMQ):

  • Cloud native: lahir dengan cloud, tumbuh bersama cloud, penskalaan elastis tanpa batas, ramah K8
  • Throughput tinggi: jaminan throughput tingkat triliun, memenuhi skenario layanan mikro dan data besar.
  • Pemrosesan aliran: Menyediakan mesin komputasi aliran yang ringan, sangat skalabel, berkinerja tinggi, dan kaya fitur.
  • Tingkat keuangan: Stabilitas tingkat keuangan, banyak digunakan dalam tautan transaksi inti.
  • Arsitektur minimalis: tidak ada ketergantungan eksternal, arsitektur tidak berbagi apa pun.
  • Ramah lingkungan: Terhubung secara lancar dengan ekosistem sekitar seperti layanan mikro, komputasi real-time, dan data lake.

KelinciMQ

RocketMQ adalah platform pemrosesan data real-time "pesan, acara, streaming" cloud-native yang bersumber terbuka dari Alibaba. RocketMQ memanfaatkan Kafka dan telah menjadi proyek Apache tingkat atas.

Fitur inti RocketMQ (dikutip dari situs resmi RocketMQ):

  • Cloud native: lahir dengan cloud, tumbuh bersama cloud, penskalaan elastis tanpa batas, ramah K8
  • Throughput tinggi: jaminan throughput tingkat triliun, memenuhi skenario layanan mikro dan data besar.
  • Pemrosesan aliran: Menyediakan mesin komputasi aliran yang ringan, sangat skalabel, berkinerja tinggi, dan kaya fitur.
  • Tingkat keuangan: Stabilitas tingkat keuangan, banyak digunakan dalam tautan transaksi inti.
  • Arsitektur minimalis: tidak ada ketergantungan eksternal, arsitektur tidak berbagi apa pun.
  • Ramah lingkungan: Terhubung secara lancar dengan ekosistem sekitar seperti layanan mikro, komputasi real-time, dan data lake.

Pulsar

Pulsar adalah platform aliran pesan terdistribusi cloud-native generasi berikutnya. Awalnya dikembangkan oleh Yahoo dan telah menjadi proyek Apache tingkat atas.

Pulsar mengintegrasikan perpesanan, penyimpanan, dan komputasi fungsional ringan. Pulsar mengadopsi desain arsitektur pemisahan komputasi dan penyimpanan untuk mendukung multi-penyewa, penyimpanan persisten, dan replikasi data lintas wilayah ruang multi-mesin. Pulsar memiliki konsistensi yang kuat, throughput tinggi, latensi rendah , dan kinerja tinggi. Fitur penyimpanan data streaming seperti skalabilitas dianggap sebagai solusi terbaik untuk transmisi, penyimpanan, dan komputasi streaming pesan real-time di era cloud native.

Fitur-fitur utama Pulsar adalah sebagai berikut (disarikan dari situs resminya):

  • Ini adalah platform aliran pesan terdistribusi cloud-native generasi berikutnya.
  • Satu instance Pulsar secara native mendukung banyak cluster dan dapat menyelesaikan replikasi pesan antar cluster di ruang komputer dengan lancar.
  • Latensi rilis yang sangat rendah dan latensi ujung ke ujung.
  • Berkembang dengan mulus ke lebih dari 1 juta topik.
  • API klien sederhana yang mendukung Java, Go, Python dan C++.
  • Berbagai mode berlangganan untuk topik (eksklusif, bersama, dan failover).
  • Pengiriman pesan dijamin melalui mekanisme penyimpanan pesan persisten yang disediakan oleh Apache BookKeeper.
  • Kerangka kerja komputasi ringan tanpa server Pulsar Functions mengimplementasikan pemrosesan data asli aliran.
  • Pulsar IO, kerangka konektor tanpa server berdasarkan Fungsi Pulsar, memudahkan pemindahan data masuk dan keluar dari Apache Pulsar.
  • Penyimpanan berjenjang dapat memindahkan data dari penyimpanan panas ke penyimpanan dingin/jangka panjang (seperti S3, GCS) ketika data menjadi usang.

Perbandingan MQ diatas:

Arah kontrasringkasan
HasilThroughput ActiveMQ dan RabbitMQ tingkat 10.000 (ActiveMQ memiliki kinerja terburuk) adalah urutan besarnya lebih rendah dari RocketMQ dan Kafka tingkat 100.000 atau bahkan jutaan tingkat.
Ketersediaan Semua dapat mencapai ketersediaan tinggi. ActiveMQ dan RabbitMQ keduanya didasarkan pada arsitektur master-slave untuk mencapai ketersediaan tinggi. RocketMQ didasarkan pada arsitektur terdistribusi. Kafka juga didistribusikan, dengan banyak salinan dari satu data. Jika beberapa mesin mati, tidak akan ada kehilangan atau ketidaktersediaan data.
Ketepatan waktuRabbitMQ dikembangkan berdasarkan Erlang, sehingga memiliki kemampuan konkurensi yang kuat, kinerja yang sangat baik, latensi sangat rendah, mencapai level mikrodetik, dan lain-lain pada level ms.
Dukungan fungsiPulsar memiliki fungsi yang lebih komprehensif dan mendukung multi-tenancy, berbagai model konsumsi, dan mode persistensi. Ini adalah platform aliran pesan terdistribusi cloud-native generasi berikutnya.
Pesan hilangActiveMQ dan RabbitMQ memiliki kemungkinan kerugian yang sangat rendah, dan Kafka, RocketMQ, dan Pulsar secara teoritis dapat mencapai 0 kerugian.

Meringkaskan:

  • Meskipun RabbitMQ sedikit lebih rendah dari Kafka, RocketMQ dan Pulsar dalam hal throughput, karena dikembangkan berdasarkan Erlang, ia memiliki kemampuan konkurensi yang kuat, kinerja yang sangat baik, dan latensi yang sangat rendah, mencapai tingkat mikrodetik. Namun, karena RabbitMQ dikembangkan berdasarkan Erlang, hanya sedikit perusahaan dalam negeri yang memiliki kekuatan untuk melakukan penelitian dan penyesuaian pada tingkat kode sumber Erlang. Jika skenario bisnis tidak memiliki persyaratan konkurensi yang terlalu tinggi (tingkat 100.000 atau satu juta), maka RabbitMQ mungkin menjadi pilihan pertama Anda di antara antrean pesan ini.
  • RocketMQ dan Pulsar mendukung konsistensi yang kuat dan dapat digunakan dalam skenario dengan persyaratan konsistensi pesan yang tinggi.
  • RocketMQ diproduksi oleh Alibaba dan merupakan proyek open source Java. Kita dapat membaca kode sumber secara langsung dan kemudian menyesuaikan MQ perusahaan kita sendiri. RocketMQ telah diuji dalam skenario bisnis aktual Alibaba.
  • Karakteristik Kafka sebenarnya sangat jelas, yaitu hanya menyediakan fungsi inti yang lebih sedikit, tetapi memberikan throughput yang sangat tinggi, latensi tingkat ms, ketersediaan dan keandalan yang sangat tinggi, dan distribusi dapat diperluas secara sewenang-wenang. Pada saat yang sama, Kafka sebaiknya mendukung sejumlah kecil topik untuk memastikan throughputnya yang sangat tinggi. Satu-satunya kelemahan Kafka adalah pesan dapat dikonsumsi berulang kali, yang akan berdampak sangat kecil pada keakuratan data. Di bidang data besar dan pengumpulan log, dampak kecil ini dapat diabaikan -komputasi waktu dan pengumpulan log. Kalau itu komputasi real-time, pengumpulan log, dan skenario lain di bidang big data, menggunakan Kafka adalah standar industrinya, dan sama sekali tidak ada masalah. Komunitasnya sangat aktif dan pasti tidak akan bersifat pornografi, apalagi ini hampir menjadi standar de facto dalam bidang ini di seluruh dunia.

Sebuah survei sederhana tentang MQ yang dikembangkan sendiri di tingkat perusahaan

Alibaba mengembangkan sendiri: RocketMQ, RabbitMQ

Tencent mengembangkan sendiri: TDMQ, CMQ

Penelitian mandiri Baidu: untuk diselidiki

Penelitian mandiri byte: BMQ

Dikembangkan sendiri oleh Meituan: Mafma

Dikembangkan sendiri oleh Qunar.com: QMQ

JD.com dikembangkan sendiri: JMQ

Yang lainnya harus diselidiki. .