Warung Pintar Internal Training mengenai Streaming Processing (NATS Foundation) — Part 1

YurioWindiatmoko
Grow at Warung Pintar
5 min readFeb 17, 2021

Banyak orang mengatakan bahwa penanda keberhasilan karir seorang karyawan dilihat dari seberapa banyak keterampilan yang telah dipelajari dan dikembangkannya. Belum lagi sebagai seorang Data Engineer, di mana orang-orang berasal dari berbagai macam latar belakang, sehingga pelatihan menjadi hal yang teramat sangat penting, baik bagi diri sendiri maupun perusahaan.

Data Platform Squad, Warung Pintar, sendiri baru mengadakan internal training yang dihadiri oleh Syarif Hidayatullah, Data Consultant di Deloitte, yang juga merupakan ex-Gojek. Berbagai hal tentang streaming process dibagikan oleh Mas Syarif, mulai dari modul hingga open source tools yang banyak digunakan belakangan ini.

Kali ini, saya akan membahas salah satu hal yang turut kami bahas di internal training lalu, yaitu NATS sebagai stack technology tools yang digunakan oleh Warung Pintar.

Membahas mengenai NATS, diambil dari https://nats.io/,

NATS.io adalah sistem messaging open source yang sederhana, aman, dan berperforma tinggi untuk aplikasi Cloud Native, IoT Messaging, dan microservices architectures. NATS.io merupakan Cloud Native Computing Foundation Project yang di-support berbagai access klien yang ditulis dalam bahasa Go, Java, JavaScript / TypeScript, Python, Ruby, C #, C, NGINX, Arduino, Rust, Lua, PHP, Perl, dan banyak lagi. Sistem messaging NATS.io pun telah digunakan oleh beberapa perusahaan, seperti MasterCard, Ericsson, HTC, Siemens, VMware, Pivotal, GE, Alibaba, dan Baidu, untuk performa yang berkinerja tinggi, aman, dan tangguh.

Tentang NATS.

NATS messaging dapat melakukan pertukaran data yang tersegmentasi menjadi pesan di antara aplikasi dan services. Pesan-pesan ini dialamatkan oleh subjek dan tidak bergantung pada lokasi jaringan. NATS menyediakan lapisan abstraksi antara aplikasi atau service dan jaringan fisik yang mendasarinya. Data di-encode dan dibingkai sebagai pesan, lalu dikirim oleh publisher. Selanjutnya, pesan diterima, diterjemahkan atau decode, dan diproses oleh satu atau lebih subscriber.

NATS sebagai Multi Environment Messaging.

NATS dapat memudahkan program untuk berkomunikasi di berbagai environment, bahasa pemrograman, penyedia cloud, dan sistem on-premise. Klien terhubung ke sistem NATS, biasanya melalui satu URL, dan kemudian berlangganan (subscribe) atau menerbitkan (publish) pesan ke subjek (topic atau channel).

Komponen NATS.

Dengan desain sederhana ini, NATS memungkinkan program untuk berbagi kode penanganan pesan umum, mengisolasi sumber daya dan saling ketergantungan, serta mudah untuk di-scale-up dengan peningkatan volume pesan, baik itu permintaan service maupun data streaming.

Tipe Subscription NATS.

Streaming NATS mendukung beberapa jenis Subscription, yaitu,

  • Reguler,
  • Tahan lama atau Durable,
  • Antrian atau Queue,
  • Tahan lama atau Antrian - Durable/Queue.

Pada dasarnya, semua tipe subscription ini mendefinisikan positioning message pembuatannya.

Pertama, Reguler Subscription. Subscription ini akan kehilangan posisinya jika aplikasi crash, aplikasi terputus, atau mereka berhenti subscribe.

Kedua, Durable Subscription. Subscription ini mempertahankan posisinya melalui pemutusan sambungan, subscriber ditutup, tetapi tidak melalui unsubscribe. Posisi menyambungkan kembali berasal dari server, bukan opsi dalam kedua kasus.

Ketiga, Queue Reguler Subscription. Queue reguler subscriber kehilangan posisinya pada pemutusan atau unsubscribe terakhir.

Keempat, Durable Queue Subscription. Untuk subscription ini, subscriber mempertahankan posisinya melalui pemutusan sambungan, tetapi tidak melalui unsubscribe terakhir, di mana posisi yang disediakan dalam opsi diabaikan setelah posisi ditetapkan. Dalam hal ini, data tidak akan dihapus sampai waktu kadaluarsa, konsumen dapat berhenti dan memulai dari blok posisi message terbaru, data akan dihapus setelah client acknowledgement.
https://docs.nats.io/developing-with-nats-streaming/streaming#subscription-types

High Throughput Data Stream.

NATS menyediakan fitur load balancing built-in yang disebut antrian terdistribusi, yaitu Grup Antrian atau Queue Group. Menggunakan antrian subscribers akan menyeimbangkan pengiriman pesan di seluruh grup subscriber yang digunakan, menjadikannya memiliki fault tolerance untuk aplikasi dan mengatur besar kecilnya pemrosesan workload. Istilah ini juga biasa disebut dengan handling data with High Throughput, atau nilai TPS singkatan dari Transaction per Second yang besar, di mana cara mengatasinya cukup melalui pembuatan lebih banyak subscriber dengan Queue Group Name yang sama. - https://docs.nats.io/nats-concepts/queue

Untuk membuat antrian subscription sendiri, subscriber dapat mendaftarkan nama antrian. Semua subscriber dengan nama antrian yang sama membentuk Grup Antrian atau Queue Group. Pembuatannya tidak memerlukan konfigurasi lebih detail. Saat pesan tentang subjek (topic/channel) terdaftar dipublikasikan (published), salah satu anggota grup dipilih secara acak (round-robin) untuk menerima pesan. Meskipun grup antrian memiliki beberapa subscriber, setiap pesan hanya dapat diperoleh satu orang.

NATS dalam Sudut Pandang Big Data.

Dalam sudut pandang Big Data, komparasi batch dan streaming pada NATS adalah sebagai berikut,

  1. Batch Processing atau ETL: Lebih banyak menggunakan CPU dan RAM. Bila saat pemrosesan ada satu yang gagal, perlu mulai dari awal lagi.
  2. Streaming: Lebih sedikit menggunakan CPU dan RAM.
Multi Sink Data Stream.

Dikarenakan kedinamisan dan kemudahan penambahan subscriber untuk suatu channel atau topic tertentu, setiap subscriber dapat memiliki tujuan yang berbeda, salah satunya melalui penerapan multi sink atau penampungan data ETL ke beberapa storage. Hal ini dilakukan agar back-up atau validasi data dapat lebih mudah dilakukan dan lebih reliable.

Demo NATS

Melalui demo ini, kita akan melakukan proses publish, subscription dan dumping ke gcs bucket. Untuk lebih jelasnya, Anda dapat mengikuti tata cara sesuai README pada github berikut, https://github.com/warungpintar/nats-gcs-demo.

Bila sudah dijalankan, output-nya akan tampak seperti ini:

Code Run.
GCS Bucket Dumped File.

Semoga bermanfaat!

Bagi kalian yang tertarik untuk gabung dengan Warung Pintar, terlebih di Tim Product dan Engineering, yuk, daftarkan dirimu melalui https://bit.ly/WPCareer!

--

--