Lupakan SQS, RabbitMQ, dan Kafka. Cukup pakai Postgres.

BBetter Stack
컴퓨터/소프트웨어AI/미래기술

스크립트

00:00:00SQS, Kafka, dan RabbitMQ bisa disingkirkan karena sekarang Anda bisa mengelola antrean secara langsung
00:00:05di dalam Postgres dengan PGMQ. Dan saya sudah bisa menebak orang-orang akan bilang, tapi itu tidak berskala besar.
00:00:11Padahal sebenarnya bisa, karena Postgres mampu menangani jutaan baris dan
00:00:15ribuan permintaan per detik dengan mudah. Jadi, jika Anda ingin menjaga infrastruktur tetap sederhana,
00:00:20hari ini kita akan menjelajahi pembuatan aplikasi terdistribusi bVolume tinggi dengan PGMQ.
00:00:30Baiklah, tanpa buang-buang waktu, kita langsung saja ke demo. Saya telah menyiapkan sebuah proyek
00:00:34dengan Docker dan menginstal PGMQ. Anda bisa menggunakannya dalam dua variasi, yaitu khusus SQL atau menggunakan salah satu
00:00:41pustaka klien resmi seperti Rust atau Python, ditambah sejumlah pustaka komunitas seperti Ruby atau berbagai
00:00:47varian TypeScript. Karena kita tidak akan pernah sepakat soal bahasa, saya akan menjalankan demo ini dengan
00:00:52opsi khusus SQL saja. Mari kita mulai dengan membuat antrean baru. Kita jalankan select pgmq.create lalu masukkan
00:00:58nama antreannya. Setiap antrean di sini adalah tabelnya sendiri. Jika kita melihat langsung ke dalam database,
00:01:04kita dapat melihat bahwa tabel baru tersebut kini sudah ada. Kita kemudian dapat mengirim pesan ke antrean dengan menentukan nama antrean,
00:01:09lalu pesannya sebagai JSON. Anda juga bisa menyertakan jeda waktu jika diinginkan. Jadi pesan akan dimasukkan ke dalam
00:01:15antrean, tetapi tidak dapat diproses selama, katakanlah, lima detik. Oke, sekarang kita sudah memiliki pesan di dalam antrean.
00:01:20Mari kita proses pesan tersebut. Kita bisa melakukannya dengan perintah read. VT adalah timeout visibilitas. Di sini hal itu berarti
00:01:26pesan yang Anda baca akan disembunyikan selama 30 detik agar tidak ada proses lain yang dapat mengambilnya.
00:01:31Beginilah cara PGMQ menjamin pengiriman tepat satu kali (exactly-once delivery). Quantity adalah jumlah pesan yang ingin kita
00:01:38baca. Dan jika pesan tersebut tidak dihapus atau diarsipkan dalam kurun waktu tersebut, pesan akan menjadi terlihat kembali. Dan untuk melakukan
00:01:44hal itu, Anda dapat menjalankan archive, yang menghapus dari antrean dan menambahkannya ke tabel arsip, atau cukup
00:01:49dengan menjalankan delete. Sebagai contoh, di sini saya menghapus pesan dengan ID dua. Sebagai catatan samping, jika Anda merasa video ini
00:01:54bermanfaat, Anda bisa membantu kami secara besar-besaran dengan berlangganan saluran ini. Hal itu membantu kami terus membuat konten gratis
00:01:59untuk membantu sebanyak mungkin pengembang. Baiklah, mari kita lakukan uji stres pada PGMQ. Pertama, saya akan menambahkan 100.000 baris
00:02:06ke dalam antrean. Dan ini membutuhkan waktu sekitar 0,4 detik. Sekarang saya akan meluncurkan 100 pekerja (worker) untuk masing-masing memproses pekerjaan dalam
00:02:13kelompok berisi 10 dan melihat berapa lama waktu yang dibutuhkan untuk membaca semuanya. Di sini, yang dilakukan oleh setiap pekerja hanyalah membaca
00:02:18pesan, mencatat apa yang dibaca, lalu menghapusnya. Tentu saja, Anda mungkin ingin melakukan hal lain dengan data tersebut.
00:02:23Namun saya hanya ingin menguji performa PGMQ secara langsung di sini. Dan proses itu memakan waktu sembilan detik.
00:02:29Setiap pekerja memproses rata-rata 111 pesan per detik. Jadi jika digabungkan, sekitar 11.100 pesan per detik.
00:02:37Saya sengaja membatasi wadah Docker ke dua CPU dan memori sebesar dua gigabita, yang lumrah untuk layanan langsung
00:02:44(live service). Sekarang, seperti yang saya sebutkan sebelumnya, Anda juga dapat menggunakan pustaka klien untuk berinteraksi dengan PGMQ.
00:02:49Menggunakan TypeScript dengan Prisma, kita dapat membuat antrean, mengirim pesan, membaca sekumpulan pesan, dan Anda juga
00:02:55dapat melakukan hal yang sama dengan Python. Jadi, jika Anda tidak ingin ketergantungan tambahan, Anda benar-benar dapat menjalankan
00:03:01antrean dalam skala besar di dalam Postgres dengan PGMQ. Dan kita bisa melangkah lebih jauh dengan mengganti sebanyak mungkin
00:03:08bagian dari tumpukan teknologi (stack) dengan Postgres, yang saya bahas di video ini.

핵심 요약

Infrastruktur sistem terdistribusi skala tinggi dapat disederhanakan dengan mengelola antrean pesan langsung di dalam Postgres menggunakan ekstensi PGMQ.

하이라이트

  • Postgres menangani antrean pesan melalui PGMQ tanpa memerlukan sistem eksternal seperti Kafka, SQS, atau RabbitMQ.

  • Postgres memproses 100.000 baris antrean dalam waktu 0,4 detik pada lingkungan uji coba.

  • Sebanyak 100 pekerja memproses 11.100 pesan per detik dengan batas kontainer Docker dua CPU dan memori dua gigabita.

  • Fitur timeout visibilitas menyembunyikan pesan yang sedang dibaca selama 30 detik untuk menjamin pengiriman tepat satu kali.

  • Pustaka klien resmi untuk PGMQ tersedia dalam bahasa Rust, Python, serta berbagai pustaka komunitas seperti Ruby dan TypeScript.

타임라인

Pengenalan PGMQ dan Pengelolaan Antrean di Postgres

  • Antrean pesan dikelola secara langsung di dalam Postgres menggunakan ekstensi PGMQ.
  • Postgres mampu menangani jutaan baris dan ribuan permintaan per detik.

Sistem antrean pesan seperti SQS, Kafka, dan RabbitMQ dapat digantikan oleh Postgres. Infrastruktur tetap sederhana tanpa mengorbankan skalabilitas untuk aplikasi terdistribusi volume tinggi.

Operasi Dasar Antrean Menggunakan SQL

  • Setiap antrean baru di dalam database dibuat sebagai tabel terpisah menggunakan perintah sql.
  • Pesan dikirim dalam format JSON dengan opsi penundaan waktu eksekusi.
  • Timeout visibilitas menyembunyikan pesan selama 30 detik untuk memastikan pengiriman tepat satu kali.
  • Pesan dihapus atau dipindahkan ke tabel arsip setelah selesai diproses.

Demo dijalankan menggunakan opsi khusus SQL. Antrean dibuat melalui perintah pgmq.create, lalu pesan dikirimkan beserta opsi jeda waktu jika diperlukan. Perintah read membaca pesan sekaligus mengatur timeout visibilitas agar pesan tidak diambil oleh proses lain sebelum dihapus atau diarsipkan.

Uji Performa dan Integrasi Pustaka Klien

  • Sebanyak 100.000 baris ditambahkan ke dalam antrean dalam waktu 0,4 detik.
  • Sebanyak 100 pekerja memproses total 11.100 pesan per detik pada batasan sumber daya dua CPU dan dua gigabita.
  • Pustaka klien resmi dan komunitas tersedia untuk bahasa seperti TypeScript, Python, dan Rust.

Uji stres dilakukan pada kontainer Docker dengan sumber daya terbatas. Sebanyak 100 pekerja membaca dan menghapus pesan dalam kelompok berisi 10, menghasilkan rata-rata 111 pesan per detik per pekerja. Interaksi dengan PGMQ juga didukung melalui berbagai bahasa pemrograman menggunakan pustaka klien.

커뮤니티 글

아직 글이 없습니다. 이 영상에 대한 첫 번째 글을 작성해 보세요!

이 영상에 대해 글쓰기