6 Sistem Antrian Teratas untuk Pengembang Backend

Apakah Anda mencari sistem antrian? Atau mungkin Anda mencari yang lebih baik? Inilah semua informasi yang Anda butuhkan!


Sistem antrian adalah rahasia terbaik dari pengembangan backend.

Tanpa mencoba menulis puisi untuk memuji sistem antrian, saya akan mengatakan bahwa pengembang backend junior menjadi pengembang backend tingkat menengah setelah ia belajar untuk mengintegrasikan antrian ke dalam sistem. Antrian meningkatkan pengalaman pelanggan (kami akan lihat caranya), mengurangi kompleksitas, dan meningkatkan keandalan dalam suatu sistem.

Tentu, untuk aplikasi web yang sangat sederhana dengan lalu lintas hampir nol dan situs web brosur, antrian bisa menjadi keseluruhan (atau bahkan tidak mungkin untuk menginstal jika Anda berada di lingkungan shared hosting yang umum), tetapi aplikasi non-sepele semua akan mendapat manfaat dari antrian sistem, dan aplikasi besar tidak mungkin tanpa melibatkan antrian.

Sebelum kita mulai, penafian: jika Anda sudah nyaman dengan sistem antrian dan ingin membandingkan berbagai opsi, beberapa bagian pengantar berikutnya akan menyebabkan tidur nyenyak. �� Jadi jangan ragu untuk melompat ke depan. Bagian pengantar dimaksudkan untuk mereka yang hanya memiliki ide kabur tentang sistem antrian atau hanya mendengar nama secara sepintas.

Apa itu sistem antrian?

Mari kita mulai dengan memahami apa itu antrian.

Antrian adalah struktur data dalam ilmu komputer yang meniru, baik, antrian dunia nyata yang kita lihat di sekitar kita. Jika Anda pergi ke loket tiket, misalnya, Anda akan melihat bahwa Anda harus berdiri di ujung antrian, sementara orang di awal antrian akan mendapatkan tiket terlebih dahulu. Ini adalah apa yang kita sebut fenomena “pertama datang, pertama dilayani”. Dalam ilmu komputer, dimungkinkan untuk menulis program yang menyimpan tugas mereka seperti ini dalam antrian, memprosesnya satu per satu dengan dasar yang sama dengan siapa cepat dia dapat.

Perhatikan bahwa antrian tidak melakukan pemrosesan aktual apa pun. Ini hanya semacam penyimpanan sementara tempat tugas menunggu sampai mereka dijemput oleh sesuatu. Jika semua ini terdengar terlalu abstrak, jangan khawatir. Ini adalah konsep abstrak, tetapi kita akan melihat contoh yang jelas di bagian selanjutnya. ��

Mengapa Anda perlu sistem antrian?

Tanpa masuk ke deskripsi yang sangat panjang, saya akan mengatakan kebutuhan utama untuk sistem antrian adalah karena pemrosesan latar belakang, eksekusi paralel, dan pemulihan dari kegagalan. Mari kita lihat ini dengan bantuan contoh:

Pemrosesan latar belakang

Misalkan Anda menjalankan kampanye pemasaran e-niaga di mana waktu adalah yang terpenting, dan bahwa aplikasi Anda dibuat sehingga ia melepaskan email konfirmasi tepat sebelum pelanggan menyelesaikan pembayaran dan ditampilkan halaman “terima kasih”. Jika server email yang Anda hubungkan sedang down, halaman web akan mati, menghancurkan pengalaman pengguna.

Bayangkan banyaknya permintaan dukungan yang akan Anda dapatkan! Dalam hal ini, lebih baik untuk mendorong tugas pengiriman email ini ke antrian pekerjaan dan menunjukkan halaman keberhasilan kepada pelanggan.

Eksekusi paralel

Banyak pengembang, terutama mereka yang kebanyakan kode lebih sederhana, aplikasi lalu lintas rendah, terbiasa menggunakan pekerjaan cron untuk pemrosesan latar belakang. Ini bagus sampai ukuran input tumbuh begitu besar sehingga tidak dapat dihapus. Misalnya, misalkan Anda memiliki tugas cron yang menyusun laporan analitik dan mengirimkannya kepada pengguna dan sistem Anda dapat memproses 100 laporan per menit.

Begitu aplikasi Anda tumbuh dan mulai mendapatkan rata-rata lebih dari 100 permintaan per menit, aplikasi akan mulai tertinggal lebih banyak dan lebih banyak lagi dan tidak akan pernah dapat menyelesaikan semua pekerjaan..

Dalam sistem antrian, situasi ini dapat dihindari dengan mengatur beberapa pekerja, yang masing-masing dapat memilih pekerjaan (masing-masing berisi 100 laporan) dan bekerja secara paralel untuk menyelesaikan tugas lebih cepat, lebih cepat.

Pemulihan dari kegagalan

Kami biasanya tidak menganggap kegagalan sebagai pengembang web. Kami menerima begitu saja bahwa server kami dan API yang kami gunakan akan selalu online. Tetapi kenyataannya berbeda – pemadaman jaringan terlalu umum, dan API yang Anda andalkan mungkin turun karena masalah infrastruktur (sebelum Anda mengatakan “bukan aku!”, Jangan lupakan pemadaman Amazon S3 besar-besaran). Jadi, kembali ke contoh pelaporan, jika bagian dari pembuatan laporan Anda mengharuskan Anda terhubung ke API pembayaran dan koneksi itu turun selama 2 menit, apa yang terjadi pada 200 laporan yang gagal?

Sistem antrian memang melibatkan overhead yang cukup besar. Kurva pembelajaran cukup curam karena Anda memasuki domain yang sama sekali baru, kompleksitas aplikasi dan penyebaran Anda meningkat dan pekerjaan yang antri tidak selalu dapat dikontrol dengan presisi 100%. Yang mengatakan, ada situasi ketika membangun aplikasi tanpa antrian tidak mungkin.

Dengan itu, mari kita lihat beberapa opsi umum di antara antrian backends / sistem hari ini.

Redis

Redis dikenal sebagai penyimpan nilai kunci yang hanya menyimpan, memperbarui, dan mengambil string data tanpa pengetahuan tentang struktur data. Walaupun itu mungkin benar sebelumnya, hari ini Redis memiliki struktur data yang efisien dan sangat berguna seperti daftar, set diurutkan, dan bahkan sistem Pub-Sub, membuatnya sangat diinginkan untuk implementasi antrian.

Keuntungan dari Redis adalah:

  • Basis data sepenuhnya dalam memori, menghasilkan baca / tulis lebih cepat.
  • Sangat efisien: Dapat dengan mudah mendukung lebih dari 100.000 operasi baca / tulis per detik.
  • Skema persistensi yang sangat fleksibel. Anda dapat menggunakan kinerja maksimal dengan mengorbankan kemungkinan hilangnya data jika terjadi kegagalan atau mengatur dalam mode yang sepenuhnya konservatif untuk mengorbankan kinerja demi konsistensi..
  • Cluster didukung di luar kotak

Harap dicatat bahwa Redis tidak memiliki abstraksi perpesanan / antrian / pemulihan, jadi Anda harus menggunakan paket atau membuat sistem yang ringan sendiri. Contohnya adalah bahwa Redis adalah backend antrian default untuk kerangka PHP Laravel, di mana penjadwal telah dilaksanakan oleh penulis kerangka kerja.

Belajar Redis gampang.

RabbitMQ

Ada beberapa perbedaan halus antara Redis dan RabbitMQ, jadi mari kita singkirkan mereka terlebih dahulu.

Pertama-tama, RabbitMQ memiliki peran yang lebih terspesialisasi dan terdefinisi dengan baik, sehingga ia dibangun untuk mencerminkan hal itu – pengiriman pesan. Dengan kata lain, sweet spotnya bertindak sebagai perantara antara dua sistem, yang tidak berlaku untuk Redis, yang bertindak sebagai basis data. Akibatnya, RabbitMQ menyediakan beberapa fasilitas lagi yang tidak ada di Redis: perutean pesan, coba lagi, distribusi muatan, dll..

Jika Anda memikirkannya, antrian tugas juga dapat dianggap sebagai sistem pengiriman pesan, di mana penjadwal, pekerja, dan “pengirim” pekerjaan dapat dianggap sebagai entitas yang berpartisipasi dalam pengiriman pesan.

RabbitMQ memiliki keunggulan sebagai berikut:

  • Abstraksi yang lebih baik untuk pengiriman pesan, mengurangi pekerjaan tingkat aplikasi jika pengiriman pesan adalah yang Anda butuhkan.
  • Lebih tangguh terhadap gangguan daya dan pemadaman listrik (dari Redis, setidaknya secara default).
  • Dukungan cluster dan federasi untuk penyebaran yang didistribusikan.
  • Alat yang berguna untuk mengelola dan memantau penyebaran Anda.
  • Dukungan untuk hampir semua bahasa pemrograman non-sepele di luar sana.
  • Penempatan dengan alat pilihan Anda (Docker, Koki, Boneka, dll.).

Kapan harus menggunakan RabbitMQ? Saya akan mengatakan itu adalah pilihan yang bagus ketika Anda tahu Anda perlu menggunakan pengiriman pesan yang tidak sinkron tetapi tidak siap untuk mengatasi kompleksitas yang menjulang dari beberapa opsi antrian lainnya dalam daftar ini (lihat di bawah).

ActiveMQ

Jika Anda ke ruang perusahaan (atau membangun aplikasi berskala besar dan terdistribusi), dan Anda tidak ingin harus menemukan kembali roda sepanjang waktu (dan membuat kesalahan di sepanjang jalan), ActiveMQ patut dilihat.

Di sinilah ActiveMQ unggul:

  • Ini diimplementasikan di Jawa dan integrasi Java sangat rapi (mengikuti standar JMS).
  • Beberapa protokol didukung: AMQP, MQTT, STOMP, OpenWire, dll.
  • Menangani keamanan, perutean, kedaluwarsa pesan, analitik, dll., Di luar kotak.
  • Dukungan baked-in untuk pola pesan populer yang didistribusikan, menghemat waktu Anda dan kesalahan mahal.

Itu bukan untuk mengatakan bahwa ActiveMQ hanya tersedia untuk Java. Ini memiliki klien untuk Python, C / C ++, Node, .Net, dan ekosistem lainnya, jadi seharusnya tidak ada masalah untuk kemungkinan keruntuhan di masa depan. Selain itu, ActiveMQ dibangun di atas standar yang sepenuhnya terbuka dan membangun klien ringan Anda sendiri seharusnya mudah.

Semua yang dikatakan dan dilakukan, perlu diketahui bahwa ActiveMQ hanyalah pialang dan tidak menyertakan backend. Anda masih perlu menggunakan salah satu backend yang didukung untuk menyimpan pesan. Saya memasukkannya di sini karena tidak terkait dengan bahasa pemrograman tertentu (seperti solusi populer lainnya seperti Seledri, Sidekiq, dll.)

Amazon MQ

Amazon MQ layak disebutkan secara cepat namun penting di sini. Jika Anda berpikir bahwa ActiveMQ adalah solusi ideal untuk kebutuhan Anda tetapi tidak ingin berurusan dengan pembangunan dan pemeliharaan infrastruktur sendiri, Amazon MQ menawarkan layanan terkelola untuk melakukan itu. Ini mendukung semua protokol yang dilakukan ActiveMQ – tidak ada perbedaan fitur sama sekali – karena menggunakan ActiveMQ sendiri di bawah permukaan.

Keuntungannya adalah itu adalah layanan terkelola, jadi Anda tidak perlu khawatir tentang apa pun selain menggunakannya. Itu lebih masuk akal untuk penyebaran yang ada di AWS, karena Anda dapat memanfaatkan layanan dan penawaran lainnya langsung dari dalam penyebaran Anda (misalnya, transfer data yang lebih cepat).

Amazon SQS

Kita tidak bisa berharap Amazon duduk diam ketika sampai pada bagian infrastruktur yang kritis, bukan? ��

Dan begitulah yang kita miliki Amazon SQS, yang sepenuhnya di-host, layanan antrian sederhana (secara harfiah) oleh AWS raksasa terkenal. Sekali lagi, perbedaan halus adalah penting, jadi harap dicatat bahwa SQS tidak memiliki konsep lewat pesan. Seperti Redis, ini adalah backend sederhana untuk menerima dan mendistribusikan pekerjaan dalam antrian.

Jadi, kapan Anda ingin menggunakan Amazon SQS? Berikut beberapa alasannya:

  • Anda adalah penggemar AWS dan tidak akan menyentuh apa pun (jujur, ada banyak orang di sana seperti itu, dan saya pikir tidak ada yang salah dengan itu).
  • Anda memerlukan solusi yang di-host sehingga memastikan bahwa tingkat kegagalan adalah nol dan tidak ada pekerjaan yang hilang.
  • Anda tidak ingin membangun sebuah cluster dan harus memantaunya sendiri. Atau lebih buruk, harus membangun alat pemantauan ketika Anda bisa menggunakan waktu itu untuk melakukan pengembangan produktif.
  • Anda sudah memiliki investasi besar di platform AWS dan tetap terkunci di dalamnya masuk akal secara bisnis.
  • Anda menginginkan sistem antrian yang terfokus dan sederhana tanpa gangguan yang terkait dengan pengiriman pesan, protokol, dan yang lainnya.

Secara keseluruhan, Amazon SQS adalah pilihan yang kuat bagi siapa pun yang ingin memasukkan antrian pekerjaan ke dalam sistem mereka dan tidak perlu khawatir tentang menginstal / memantau hal-hal sendiri.

Beanstalkd

Beanstalkd telah ada untuk waktu yang lama dan merupakan backend yang teruji dalam pertempuran, cepat, mudah untuk pekerjaan antrian. Ada beberapa karakteristik Beanstalkd yang membuatnya sangat berbeda dari Redis:

  • Ini hanyalah sistem antrian pekerjaan dan tidak ada yang lain. Anda mendorong pekerjaan ke sana, yang kemudian ditarik oleh pekerja. Jadi jika aplikasi Anda bahkan memiliki kebutuhan kecil untuk menyampaikan pesan, Anda ingin menghindari Beanstalkd.
  • Tidak ada struktur data lanjutan seperti set, antrian prioritas, dll.
  • Beanstalkd adalah apa yang disebut antrian First In, First Out (FIFO). Tidak ada cara untuk mengatur pekerjaan berdasarkan prioritas.
  • Tidak ada opsi untuk pengelompokan.

Semua ini mengatakan Beanstalkd membuat sistem antrian yang cepat dan apik untuk proyek sederhana yang hidup di satu server. Bagi banyak orang, ini lebih cepat dan lebih stabil daripada Redis. Jadi, jika Anda memiliki masalah dengan Redis yang sepertinya tidak bisa Anda pecahkan, dan kebutuhan Anda sederhana, Beanstalkd patut dicoba.

Kesimpulan

Jika Anda sudah membaca sejauh ini (atau membaca skim di sini ��), ada kemungkinan Anda cukup tertarik pada sistem antrian atau membutuhkannya. Jika demikian, daftar pada halaman ini akan membantu Anda dengan baik, kecuali jika Anda mencari sistem antrian khusus bahasa / kerangka kerja.

Saya berharap saya bisa memberi tahu Anda bahwa antrian itu sederhana dan 100% dapat diandalkan, tetapi tidak. Itu berantakan, dan karena semuanya ada di latar belakang dan terjadi sangat cepat (kesalahan bisa tanpa disadari dan menjadi sangat mahal). Namun, antrian sangat diperlukan di luar batas tertentu, dan Anda akan menemukan bahwa mereka adalah senjata yang kuat (bahkan mungkin yang paling kuat) di gudang senjata Anda. Semoga berhasil! ��

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map