Ini adalah catatan minggu pertama dari apa yang saya pelajari di kelas RU202-nya Redis University yang berjudul "Redis Streams".
Sesuai judulnya, pada kelas ini pembahasannya adalah tentang Redis Stream, fitur pada Redis yang diperuntukkan untuk membuat messaging dan streaming pipelines.
Kelas RU202 yang saya ikuti ini dimulai pada 7 Agustus 2019, dan akan berjalan selama 5 minggu dimana 4 minggu pertama adalah pembelajaran, dan minggu terakhir adalah ujian. Pada 4 minggu pertama, peserta dibagikan materi berupa video, quiz, dan diakhiri dengan PR mingguan. Nilai dari PR mingguan akan diakumulasikan pada nilai akhir, jika nilai akhir mencapai 64% atau lebih, peserta akan diberikan sertifikat penyelesaian dari Redis University.
Sebagaimana kelas Redis University lainnya, RU202 juga memberikan Virtual Lab di setiap minggunya yang sudah terinstall Redis.
Catatan RU202 Minggu Pertama
Pada minggu pertama ini, yang dibahas adalah:
- Pengenalan Distributed Systems dan Stream Processing
- Pengenalan Redis Streams
1. Pengenalan Distributed Systems dan Stream Processing
Distributed Systems
Distributed systems adalah sebuah setup (pengaturan) yang terdiri dari berbagai komponen jaringan yang saling melakukan perpesanan (messaging) satu sama lain. Redis sendiri didesain untuk menjadi salah satu komponen tersebut, dimana nama Redis merupakan singkatan dari "Remote Dictionary Server". Kata "remote" berarti dapat diakses melalui jaringan, sedangkan kara "server" menunjukkan rolenya pada paradigma client-server. Jadi kata Redis sendiri dapat diartikan sebagai server yang berperan sebagai bagian dari setup dimana komponen-komponen (pada distributed system) lain berkomunikasi dengannya, juga menjadi perantara antara setiap komponen untuk berkomunikasi satu sama lain.
Membuat distributed system memiliki tantangan tersendiri dalam menghadapi kegagalan (failures). Saat salah satu komponen mengalami kegagalan (mati), komponen tersebut jadi tidak dapat menerima pesan apapun dari komponen lain, bahkan pesan yang sedang diproses sebelum dia mati juga ikut hilang. Kehilangan sebuah komponen dalam distributed system adalah hal yang tidak dapat dicegah. Oleh karena itu distributed system yang dibuat harus dirancang sedemikian rupa untuk menghadapi kemungkinan tersebut.
Messaging adalah komponen yang cukup penting dalam sebuah distributed system, karena dia mengendalikan global-state yang digunakan oleh komponen-komponen lain.
Pada versi 5.0, Redis sudah mendukung distributed messaging. Messaging pada Redis dirancang khusus untuk unggul dalam performa dibanding beberapa alternatif message broker lainnya.
Stream Processing
Setiap distributed system bergantung pada komponen messaging untuk mengendalikan atau mengkoordinasikan komponen-komponen lain. Beberapa sistem dibangun untuk dapat menangani data yang dikirimkan secara terus-menerus, dan bereaksi secara instan saat terdapat perubahan pada data. Pada era big data, hal ini disebut stream processing, dipopulerkan oleh Apache Storm dan beberapa konsep lain yang sudah hadir sebelumnya.
Stream processing adalah kebalikan dari batch processing.
Contoh populer dari stream processing adalah monitoring suhu. Sensor suhu akan membaca suhu setiap sepersekian detik, kemudian sensor akan mengirimkannya secara terus menerus (streaming) data tersebut ke stream processor. Kemudian stream processor akan mengecek, jika suhu melewati batas yang ditentukan, stream processor secara real-time akan mengirimkan notifikasi ke smartpohne pengguna.
2. Pengenalan Redis Stream
Pada versi 5.0 Redis mendukung struktur data untuk melakukan stream yang diberi nama Redis Stream.
Berikut beberapa poin penting tentang Redis Stream:
- Redis Stream adalah struktur data.
- Bertindak seperti append-only list. Tidak seperti list yang bisa ditambahkan nilai pada index tertentu, stream hanya dapat ditambahkan di akhir. Jadi mulai sekarang bayangin Redis Stream ini adalah array.
- Setiap item didalam Redis Stream adalah Hash (semacam
Map<String, String>
kalau di Java). - Setiap item didalam Redis Stream diidentifikasikan oleh ID unik, dimana secara default ID adalah time-prefixed (diawali informasi waktu).
- Mendukung ID-based range queries. Kalau ibarat SQL di RDBMS, dia mendukung semacam:
select from streamnya where timenya between timeA and timeB
. - Setiap Redis Stream dapat dikonsumsi oleh banyak kelompok consumer atau yang disebut sebagai consumer group.
- Redis stream bersifat immutable, sekali di append, data tidak dapat diubah.
- Setiap item didalam Redis Stream dapat dihapus, tetapi Redis hanya memberi flag "terhapus", datanya sendiri sebetulnya masih ada, tetapi tidak akan muncul saat diquery.
Sebelumnya Redis memiliki fitur Redis Pub/Sub, lalu apa bedanya dengan Redis Stream?
Perbedaannya adalah, jika pada Pub/Sub, client hanya menerima data yang dipublish (dikirim) setelah dia terhubung. Sedangkan pada Redis Stream, client yang baru terhubung akan menerima data stream yang dikirim sebelum dia terhubung. Dengan kata lain pada Pub/Sub memori akan dihapus setelah publish selesai dilakukan, sedangkan pada Redis Stream memori (data streamnya) tetap disimpan untuk dikirimkan nanti saat ada client baru yang terhubung.
Segitu aja mungkin untuk RU202 ini yang perlu saya catat. Yaudahlah, sampai jumpa di catatan minggu depan.