Memahami broker pesan. Mempelajari mekanisme pengiriman pesan melalui ActiveMQ dan Kafka. Bab 1

Halo semuanya!

Mulai menerjemahkan buku kecil:
" Memahami Pialang Pesan ",
penulis: Jakub Korab, penerbit: O'Reilly Media, Inc., tanggal publikasi: Juni 2017, ISBN: 9781492049296.

Dari pengantar buku:
"... Buku ini akan mengajarkan Anda untuk berbicara tentang sistem pesan pada pialang dengan membandingkan dan membedakan dua teknologi pialang populer: Apache ActiveMQ dan Apache Kafka. Di sini Anda akan menemukan contoh penggunaan dan insentif pengembangan yang mengarahkan pengembang mereka untuk menggunakan pendekatan yang sangat berbeda untuk di bidang yang sama - perpesanan antara sistem dengan perantara perantara. Kami akan melihat teknologi ini dari awal dan menyoroti pengaruh berbagai opsi desain di sepanjang jalan. Anda akan mendapatkan pemahaman yang mendalam tentang kedua produk, pemahaman tentang bagaimana mereka harus dan tidak boleh digunakan, dan pemahaman tentang apa yang harus dicari ketika mempertimbangkan teknologi pesan lain di masa depan ... "

Bagian yang diterjemahkan hingga saat ini:
Bab 1. Pendahuluan
Bab 2. ActiveMQ
Bab 3. Kafka

Terjemahan selesai: tele.gg/middle_java

Saya akan memposting bab yang sudah selesai saat diterjemahkan.

BAB 1


Pendahuluan


Pesan antar sistem adalah salah satu bidang TI yang paling sedikit dipahami. Sebagai pengembang atau arsitek, Anda mungkin berkenalan dengan berbagai kerangka kerja dan basis data. Namun, kemungkinan Anda hanya memiliki kenalan yang lewat tentang cara kerja teknologi pesan berbasis broker. Jika Anda merasa seperti itu, jangan khawatir, Anda berada di perusahaan yang baik.

Orang biasanya memiliki kontak yang sangat terbatas dengan infrastruktur pengiriman pesan. Seringkali mereka terhubung ke sistem yang dibuat sejak lama, atau mengunduh kit distribusi dari Internet, menginstalnya di PROM dan mulai menulis kode untuk itu. Setelah meluncurkan infrastruktur di PROM, hasilnya mungkin beragam: hilangnya pesan selama kegagalan, pengiriman tidak berfungsi seperti yang Anda harapkan, atau pialang "menangguhkan" produsen Anda atau tidak mengirim pesan ke konsumen Anda.

Terdengar akrab?

Skenario umum adalah saat kode olahpesan Anda berfungsi dengan baik, untuk saat ini. Sampai berhenti bekerja. Periode ini menidurkan kewaspadaan dan memberikan rasa aman yang salah, yang mengarah pada lebih banyak kode berdasarkan ide-ide palsu tentang perilaku mendasar teknologi. Ketika sesuatu mulai salah, Anda dihadapkan dengan kebenaran yang tidak nyaman: bahwa Anda benar-benar tidak memahami perilaku dasar produk atau kompromi yang dipilih oleh penulis, seperti kinerja versus keandalan, atau transaksionalitas versus skalabilitas horizontal.

Tanpa pemahaman mendalam tentang cara kerja broker, orang membuat pernyataan yang tampaknya masuk akal tentang sistem pengiriman pesan mereka, seperti:

  • Sistem tidak akan pernah kehilangan pesan
  • Pesan akan diproses secara berurutan
  • Menambahkan konsumen akan membuat sistem lebih cepat
  • Pesan akan dikirimkan hanya sekali.

Sayangnya, beberapa pernyataan ini didasarkan pada asumsi yang hanya berlaku dalam keadaan tertentu, sementara yang lain hanya salah.

Buku ini akan mengajarkan Anda cara berbicara tentang sistem pesan berbasis broker dengan membandingkan dan membedakan dua teknologi broker populer: Apache ActiveMQ dan Apache Kafka. Di sini kita akan menjelaskan contoh-contoh penggunaan dan insentif pengembangan yang mengarahkan pengembang mereka untuk menggunakan pendekatan yang sangat berbeda ke bidang yang sama - pesan antara sistem dengan broker perantara. Kami akan melihat teknologi ini dari awal dan menyoroti dampak berbagai opsi desain di sepanjang jalan. Anda akan mendapatkan pemahaman yang mendalam tentang kedua produk, pemahaman tentang bagaimana mereka harus dan tidak boleh digunakan, dan pemahaman tentang apa yang harus dicari ketika mempertimbangkan teknologi pesan lainnya di masa depan.

Sebelum kita mulai, mari kita pelajari dasar-dasarnya.

Apa itu sistem olahpesan dan mengapa dibutuhkan


Agar dua aplikasi saling berkomunikasi, mereka harus terlebih dahulu mendefinisikan antarmuka. Definisi antarmuka ini mencakup pemilihan transport atau protokol, seperti HTTP, MQTT, atau SMTP, dan menegosiasikan format pesan yang akan dipertukarkan oleh sistem. Ini bisa menjadi proses yang ketat, seperti mendefinisikan skema XML dengan persyaratan payload untuk pesan, atau bisa jadi kurang formal, misalnya, perjanjian antara dua pengembang bahwa beberapa bagian dari permintaan HTTP akan berisi pengidentifikasi klien .

Selama format pesan dan urutan pengiriman antara sistem konsisten, mereka akan dapat berinteraksi satu sama lain tanpa khawatir tentang implementasi sistem lain. Internal dari sistem ini, seperti bahasa pemrograman atau kerangka kerja yang digunakan, dapat berubah seiring waktu. Selama kontrak itu sendiri didukung, interaksi dapat terus tidak berubah dari sisi lain. Kedua sistem secara efektif terputus (dipisahkan) oleh antarmuka ini.

Sistem perpesanan, sebagai suatu peraturan, menyediakan partisipasi perantara antara dua sistem yang berinteraksi untuk melepaskan lebih jauh (memisahkan) pengirim dari penerima atau penerima. Pada saat yang sama, sistem pesan memungkinkan pengirim untuk mengirim pesan tanpa mengetahui di mana penerima berada, apakah dia aktif atau berapa banyak dari mereka.

Mari kita lihat beberapa analogi dari berbagai masalah yang dipecahkan oleh sistem pengiriman pesan, dan memperkenalkan beberapa istilah dasar.

Poin-ke-poin


Alexandra pergi ke kantor pos untuk mengirimi Adam paket. Dia berjalan ke jendela dan memberikan satu paket kepada karyawan itu. Karyawan itu mengambil bungkusan itu dan memberi tanda terima kepada Alexandra. Adam tidak perlu berada di rumah pada saat mengirim parsel. Alexandra yakin bahwa paket tersebut akan dikirimkan kepada Adam di beberapa titik di masa depan dan dapat terus melakukan hal mereka sendiri. Kemudian, di beberapa titik, Adam menerima paket.
Ini adalah contoh dari model pesan point-to-point . Kantor pos di sini bertindak sebagai mekanisme distribusi paket, memastikan bahwa setiap paket dikirim satu kali. Penggunaan kantor pos memisahkan tindakan pengiriman paket dari pengiriman paket.
Dalam sistem pesan klasik, model point-to-point diimplementasikan melalui antrian . Antrian bertindak sebagai buffer FIFO (masuk pertama, keluar pertama) yang dapat berlangganan satu atau lebih konsumen. Setiap pesan dikirimkan hanya ke salah satu konsumen yang berlangganan . Antrian biasanya mencoba mendistribusikan pesan secara adil antar konsumen. Hanya satu konsumen yang akan menerima pesan ini.

Istilah "tahan lama" diterapkan pada antrian. Keandalan adalah fitur dari layanan yang memastikan bahwa sistem pesan akan menyimpan pesan ketika tidak ada pelanggan yang aktif sampai pelanggan berlangganan antrian untuk pengiriman pesan.

Keandalan sering dikacaukan dengan kegigihan dan, meskipun kedua istilah tersebut digunakan secara bergantian, mereka melakukan fungsi yang berbeda. Kegigihan menentukan apakah pesan dipertukarkan oleh sistem pesan dalam segala jenis penyimpanan antara menerima dan mengirimnya ke konsumen. Pesan yang dikirim ke antrian mungkin atau mungkin tidak persisten.
Olahpesan titik-ke-titik digunakan ketika use case membutuhkan tindakan satu kali dengan pesan. Contohnya adalah menyetorkan dana ke akun atau menyelesaikan pesanan pengiriman. Kami akan membahas nanti mengapa sistem pengiriman pesan itu sendiri tidak dapat menyediakan pengiriman satu kali dan mengapa antrian dapat memberikan jaminan pengiriman paling tidak satu kali .

Pelanggan Penerbit


Gabriella menekan nomor konferensi. Sementara dia terhubung ke konferensi, dia mendengar semua yang dikatakan pembicara, bersama dengan peserta lain dalam panggilan itu. Ketika dia mati, dia melewatkan apa yang dikatakan. Ketika terhubung kembali, dia terus mendengar apa yang mereka katakan.
Ini adalah contoh dari model pesan publish-subscribe . Konferensi bertindak sebagai mekanisme siaran. Orang yang berbicara tidak peduli tentang berapa banyak orang yang saat ini bergabung dengan panggilan - sistem memastikan bahwa siapa pun yang terhubung saat ini mendengar apa yang dikatakan.
Dalam sistem perpesanan klasik, model perpesanan berlangganan-langganan diimplementasikan melalui topik . Topiknya menyediakan metode siaran yang sama dengan mekanisme konferensi. Ketika pesan dikirim ke topik, pesan itu didistribusikan ke semua pengguna yang berlangganan .

Topik biasanya tidak dapat diandalkan (tidak dapat disembuhkan) . Seperti pendengar yang tidak mendengar apa yang dikatakan pada panggilan konferensi, ketika pendengar memutus, pelanggan topik melewatkan pesan apa pun yang dikirim ketika mereka sedang offline. Untuk alasan ini, dapat dikatakan bahwa topik memberikan jaminan pengiriman tidak lebih dari sekali untuk setiap konsumen.

Pesan publikasi-berlangganan biasanya digunakan ketika pesan bersifat informatif, dan hilangnya satu pesan tidak terlalu signifikan. Misalnya, suatu topik dapat mengirimkan pembacaan suhu dari sekelompok sensor sekali per detik. Sebuah sistem yang tertarik pada suhu saat ini dan yang berlangganan ke topik tidak akan khawatir jika itu merindukan pesan - yang lain akan tiba dalam waktu dekat.

Model hibrida


Situs web toko menempatkan pesan dalam antrian pesan. Konsumen utama dari pesan-pesan ini adalah sistem eksekutif. Selain itu, sistem audit harus memiliki salinan pesan pesanan ini untuk pelacakan selanjutnya. Kedua sistem tidak dapat melewatkan pesan, bahkan jika sistem itu sendiri tidak tersedia untuk beberapa waktu. Situs web tidak boleh mengetahui sistem lain.
Skenario penggunaan sering memerlukan kombinasi model penerbitan-berlangganan dan pesan-ke-titik, misalnya, ketika beberapa sistem memerlukan salinan pesan, dan baik keandalan dan ketekunan diperlukan untuk mencegah hilangnya pesan.

Dalam kasus ini, tujuan diperlukan (istilah umum untuk antrian dan topik), yang mendistribusikan pesan terutama sebagai topik, sehingga setiap pesan dikirim ke sistem terpisah yang tertarik pada pesan-pesan ini, tetapi juga di mana setiap sistem dapat menentukan beberapa konsumen yang menerima pesan masuk, yang lebih mirip antrian. Jenis bacaan dalam hal ini adalah satu kali untuk setiap pihak yang berkepentingan . Penerima hibrida ini sering kali memerlukan daya tahan, jadi jika konsumen memutuskan, pesan yang dikirim saat ini diterima setelah menghubungkan kembali konsumen.

Model hybrid bukanlah hal baru dan dapat digunakan di sebagian besar sistem pengiriman pesan, termasuk ActiveMQ (melalui tujuan virtual atau gabungan yang menggabungkan topik dan antrian), dan Kafka (secara implisit, sebagai properti mendasar dari desain penerima yang dituju).

Sekarang kita memiliki beberapa terminologi dasar dan pemahaman tentang apa yang mungkin berguna bagi sistem pengiriman pesan, mari kita lanjutkan ke detailnya.

Terjemahan selesai: tele.gg/middle_java

Bagian selanjutnya: Bab 2. ActiveMQ

Dilanjutkan ...

Source: https://habr.com/ru/post/id466385/


All Articles