Memahami broker pesan. Mempelajari mekanisme perpesanan dengan ActiveMQ dan Kafka. Bab 1

Hello!

Mulai menerjemahkan buku kecil:
Β«Memahami Pesan BrokerΒ«
penulis: Jakub Korab, penerbit: O'Reilly Media, Inc., tanggal terbit: Juni 2017, ISBN: 9781492049296.

Dari pengantar buku:
" ... Buku ini akan mengajari Anda cara berpikir tentang sistem perpesanan perantara dengan membandingkan dan mengontraskan dua teknologi perantara populer: Apache ActiveMQ dan Apache Kafka. Ini akan menguraikan kasus penggunaan dan insentif pengembangan yang telah mengarahkan pengembang mereka untuk mengambil pendekatan yang sangat berbeda ke area pengiriman pesan perantara yang sama antar sistem. Kami akan melihat teknologi ini dari bawah ke atas dan menyoroti dampak dari pilihan desain yang berbeda di sepanjang jalan. Anda akan mendapatkan pemahaman yang mendalam tentang kedua produk, pemahaman tentang bagaimana seharusnya dan tidak boleh digunakan, dan pemahaman tentang apa yang harus diwaspadai saat mempertimbangkan teknologi perpesanan lain di masa mendatang. … Β»

Bagian yang diterjemahkan sejauh ini:
Bab 1 PENDAHULUAN
Bab 3. Kafka

Saya akan memposting bab yang sudah selesai saat diterjemahkan.

BAB 1

pengenalan

Perpesanan antarsistem adalah salah satu bidang TI yang paling tidak dipahami. Sebagai pengembang atau arsitek, Anda mungkin sudah sangat familiar dengan berbagai framework dan database. Namun, kemungkinan Anda hanya melihat sekilas tentang cara kerja teknologi perpesanan berbasis broker. Jika itu yang Anda rasakan, jangan khawatir, Anda berada di perusahaan yang baik.

Orang biasanya memiliki kontak yang sangat terbatas dengan infrastruktur perpesanan. Seringkali mereka terhubung ke sistem yang dibuat sejak lama, atau mengunduh kit distribusi dari Internet, menginstalnya di PROM dan mulai menulis kode untuknya. Setelah infrastruktur aktif dan berjalan di PROM, hasilnya dapat beragam: pesan hilang saat macet, pengiriman tidak berfungsi seperti yang Anda harapkan, atau broker menggantung produsen Anda atau tidak mengirim pesan ke konsumen Anda.

Kedengarannya akrab?

Skenario umum di mana kode perpesanan 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 yang salah tentang perilaku mendasar dari teknologi. Ketika ada yang salah, Anda dihadapkan pada kebenaran yang tidak nyaman: bahwa Anda benar-benar tidak memahami perilaku yang mendasari produk, atau pertukaran yang dipilih oleh penulis, seperti kinerja vs. ketahanan, atau transaksional vs. skalabilitas horizontal.

Tanpa pemahaman mendalam tentang cara kerja broker, orang membuat klaim yang tampaknya masuk akal tentang sistem perpesanan mereka, seperti:

  • Sistem tidak akan pernah kehilangan pesan
  • Pesan akan diproses secara berurutan
  • Menambah konsumen akan membuat sistem lebih cepat
  • Pesan hanya akan dikirim satu kali

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

Buku ini akan mengajari Anda cara bernalar tentang sistem perpesanan perantara dengan membandingkan dan mengontraskan dua teknologi broker populer: Apache ActiveMQ dan Apache Kafka. Ini akan menguraikan kasus penggunaan dan insentif pengembangan yang telah mengarahkan pengembang mereka untuk mengambil pendekatan yang sangat berbeda ke area pengiriman pesan perantara yang sama antar sistem. Kami akan melihat teknologi ini dari bawah ke atas dan menyoroti dampak dari pilihan desain yang berbeda di sepanjang jalan. Anda akan mendapatkan pemahaman yang mendalam tentang kedua produk, pemahaman tentang bagaimana seharusnya dan tidak boleh digunakan, dan pemahaman tentang apa yang harus diwaspadai saat mempertimbangkan teknologi perpesanan lain di masa mendatang.

Sebelum kita mulai, mari kita membahas dasar-dasarnya.

Apa itu sistem perpesanan dan mengapa itu diperlukan

Agar dua aplikasi dapat berkomunikasi satu sama lain, mereka harus terlebih dahulu menentukan antarmuka. Definisi antarmuka ini mencakup pilihan transportasi atau protokol seperti HTTP, MQTT, atau SMTP, dan negosiasi format pesan yang akan dipertukarkan oleh sistem. Ini bisa menjadi proses yang ketat, seperti mendefinisikan skema XML dengan persyaratan biaya payload untuk sebuah pesan, atau bisa jauh lebih formal, seperti perjanjian antara dua pengembang bahwa beberapa bagian dari permintaan HTTP akan berisi pengidentifikasi klien. .

Selama format pesan dan urutan pengirimannya konsisten antar sistem, mereka akan dapat berkomunikasi satu sama lain tanpa mengkhawatirkan implementasi sistem lain. Bagian dalam sistem ini, seperti bahasa pemrograman atau kerangka kerja yang digunakan, dapat berubah seiring waktu. Selama kontrak itu sendiri dipertahankan, interaksi dapat berlanjut tidak berubah di pihak lain. Kedua sistem secara efektif dipisahkan (dipisahkan) oleh antarmuka ini.

Sistem perpesanan biasanya melibatkan perantara antara dua sistem yang berinteraksi untuk memisahkan lebih lanjut (memisahkan) pengirim dari penerima atau penerima. Dalam hal ini, sistem perpesanan memungkinkan pengirim untuk mengirim pesan tanpa mengetahui di mana penerima berada, apakah dia aktif atau berapa banyak instance mereka.

Mari kita lihat beberapa analogi untuk jenis masalah yang dipecahkan oleh sistem perpesanan dan perkenalkan beberapa istilah dasar.

Poin ke poin

Alexandra pergi ke kantor pos untuk mengirim paket ke Adam. Dia pergi ke jendela dan menyerahkan bungkusan itu kepada karyawan. Karyawan tersebut mengambil paket tersebut dan memberikan tanda terima kepada Alexandra. Adam tidak perlu berada di rumah saat paket dikirim. Alexandra yakin bahwa paket tersebut akan dikirimkan ke Adam di beberapa titik di masa mendatang dan dapat terus menjalankan bisnisnya. Belakangan, pada suatu saat, Adam menerima sebuah paket.

Ini adalah contoh model perpesanan poin ke poin. Kantor pos di sini bertindak sebagai mekanisme distribusi paket, memastikan bahwa setiap paket dikirimkan satu kali. Penggunaan kantor pos memisahkan tindakan pengiriman parsel dari pengiriman parsel.
Dalam sistem perpesanan klasik, model point-to-point diimplementasikan melalui antrian. Antrean bertindak sebagai penyangga FIFO (masuk pertama, keluar pertama) yang dapat dilanggan oleh satu atau lebih konsumen. Setiap pesan hanya dikirimkan salah satu konsumen langganan. Antrean biasanya mencoba mendistribusikan pesan secara adil di antara konsumen. Hanya satu konsumen yang akan menerima pesan ini.

Istilah "tahan lama" diterapkan pada antrian. Keandalan adalah properti layanan yang menjamin bahwa sistem pesan akan menyimpan pesan tanpa adanya pelanggan aktif sampai konsumen berlangganan antrian pengiriman pesan.

Keandalan sering dikacaukan dengan kegigihan dan, meskipun kedua istilah tersebut dapat dipertukarkan, keduanya menjalankan fungsi yang berbeda. Ketekunan menentukan apakah suatu pesan ditulis oleh sistem pesan ke semacam penyimpanan antara penerimaan dan pengirimannya ke konsumen. Pesan yang dikirim ke antrean mungkin ada atau tidak ada.
Perpesanan point-to-point digunakan ketika use case memerlukan satu tindakan pada pesan. Contohnya termasuk menyetorkan dana ke rekening atau memenuhi pesanan pengiriman. Kami akan membahas nanti mengapa sistem pengiriman pesan itu sendiri tidak mampu menyediakan pengiriman satu kali dan mengapa antrian paling baik dapat memberikan jaminan pengiriman. setidaknya sekali.

Penerbit-Pelanggan

Gabriella memutar nomor konferensi. Saat dia terhubung ke konferensi, dia mendengar semua yang dikatakan pembicara, bersama dengan peserta panggilan lainnya. Saat dia pingsan, dia merindukan apa yang dikatakan. Saat menyambung kembali, dia terus mendengar apa yang dikatakan.

Ini adalah contoh model perpesanan terbitkan-berlangganan. Panggilan konferensi bertindak sebagai mekanisme siaran. Orang yang berbicara tidak peduli berapa banyak orang yang sedang menelepon - sistem memastikan bahwa siapa pun yang saat ini terhubung akan mendengar apa yang dikatakan.
Dalam sistem perpesanan klasik, model perpesanan terbitkan-berlangganan diimplementasikan melalui atasan. Topik menyediakan metode penyiaran yang sama dengan mekanisme konferensi. Ketika sebuah pesan diposting ke suatu topik, itu didistribusikan untuk semua pengguna yang berlangganan.

Topik biasanya tidak dapat diandalkan (tidak tahan lama). Seperti pendengar yang tidak dapat mendengar apa yang dikatakan pada panggilan konferensi, saat pendengar offline, pelanggan topik melewatkan pesan apa pun yang dikirim saat sedang offline. Untuk alasan ini, kami dapat mengatakan bahwa atasan memberikan jaminan pengiriman. tidak lebih dari sekali untuk setiap konsumen.

Perpesanan Publikasikan-Berlangganan biasanya digunakan ketika pesan bersifat informasional dan hilangnya satu pesan tidak terlalu signifikan. Misalnya, suatu topik dapat mengirimkan pembacaan suhu dari sekelompok sensor satu kali per detik. Sistem yang tertarik dengan suhu saat ini dan yang berlangganan suatu topik tidak akan khawatir jika melewatkan pesan - yang lain akan segera tiba.

model hibrida

Situs web toko memasukkan pesan pesanan ke 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, meskipun sistem itu sendiri tidak tersedia untuk beberapa waktu. Situs web tidak boleh mengetahui sistem lain.

Kasus penggunaan sering kali memerlukan campuran model perpesanan terbitkan-berlangganan dan titik-ke-titik, seperti saat beberapa sistem memerlukan salinan pesan dan keandalan serta kegigihan diperlukan untuk mencegah kehilangan pesan.

Dalam kasus ini, tujuan (istilah umum untuk antrian dan topik) diperlukan, yang mendistribusikan pesan pada dasarnya seperti topik, sehingga setiap pesan dikirim ke sistem terpisah yang tertarik dengan 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 pemangku kepentingan. Tujuan hibrid ini seringkali memerlukan daya tahan sehingga jika konsumen terputus, pesan yang dikirim pada saat itu akan diterima saat konsumen terhubung kembali.

Model hybrid bukanlah hal baru dan dapat diterapkan ke sebagian besar sistem perpesanan, termasuk ActiveMQ (melalui tujuan virtual atau komposit yang menggabungkan topik dan antrean) dan Kafka (secara implisit, sebagai properti fundamental dari desain tujuannya).

Sekarang kita memiliki beberapa terminologi dasar dan pemahaman tentang kegunaan sistem perpesanan, mari kita masuk ke detailnya.

Terjemahan selesai: tele.gg/middle_java

Bagian terjemahan berikutnya: Bab 3. Kafka

Untuk dilanjutkan ...

Sumber: www.habr.com

Tambah komentar