Diposting pada 09 November 2023, 16:10 Oleh ERMA NINDIASWARI, S.T, MTI
Redis (Remote Dictionary Server) adalah
teknologi penyimpanan stuktur data dalam memori. Beberapa penerapan redis antara lain digunakan untuk database, pengelolaan cache, message broker dan thread.
Redis bersifat open source
dan memungkinkan respon cepat dalam
mengakses,
mengingat metode penyimpanan data ada di dalam memori. Redis dapat digunakan diberbagai bahasa
pemrograman dan dapat dibangun di atas replikasi, dan memberikan high availability serta kemudahan dalam automatisasi sistem.
Redis juga mendukung adanya asychronous
replication. Untuk mendapatkan performa terbaik, Redis bekerja di dalam memory dataset.
Mengingat
redis adalah teknologi yang bekerja dalam memori, bukan seperti database yang penyimpanan datanya ada dalam hardisk/SSD.
Cara kerja seperti ini akan menghilangkan kebutuhan untuk mengakses disk,
serta menghindari penundaan
waktu pencarian. Sehingga
dapat mengakses data akan lebih cepat. Adapun fungsi
Redis yaitu:
1.
Pengelolaan cache (caching)
2.
Mengurangi latensi
akses data
3.
Sebagai microservices atau message broker
4.
Mempercepat load gambar, file dan halaman
pada website
5.
Mendukung aplikasi yang membutuhkan stream komentar, komunikasi antar server, serta chat secara realtime
6.
Memiliki antrean
(queue) yang ringan
7.
Dapat digunakan untuk membuat score
leaderboard secara realtime
8.
Pengelolaan session
9.
Menyimpan metadata
tentang riwayat tampilan,
informasi, token otentikasi pengguna
10. Mengelola data geospasial secara realtime
11. Dapat digunakan
untuk aplikasi berbasis
machine learning yang harus diakses
secara realtime
12. Dll
Latar Belakang
Arsitektur
sistem yang mendukung high availability bersifat scale up artinya instance
aplikasi bisa terdiri lebih dari 1
titik sehingga perlu kondisi/keadaan program yang dapat sikron antara
kondisi pada 1 instance dengan
instance lainnya. Kondisi/keadaan program pada saat
tertentu dinamakan state
dimana state memiliki arti
apapun bergantung konteks program dalam instance
aplikasi tersebut.
Salah
satu contoh sederhana adalah kondisi/keadaan login jika instance hanya 1 titik maka tidak ada masalah karena 1 titik
instance tersebut dapat mengetahui state login user tertentu. Tetapi akan beda halnya dalam arsitektur high
availability dimana instance yang menjalankan perintah program tertentu
bisa jadi lebih dari 1 instance maka akan ada potensi bahwa instance 1 tidak dapat mengetahui
state yanga ada pada instance lainnya, hal inilah yang perlu diantisipasi bagaimana multi intance aplikasi
dapat sinkron dari sisi state-nya.
Aplikasi
dikatakan statefull ketika aplikasi tersebut menyimpan state. Pada aplikasi
ini, ada data tentang penggunaan aplikasi
yang perlu disimpan.
Stateful application biasanya
digunakan ketika ada data aplikasi yang disimpan yang kemudian akan
dibaca lagi ketika aplikasi
digunakan. Contoh
yang paling mudah
ditemui adalah aplikasi
database seperti MySQL, Postgre, dan MongoDB. Tentu saja
aplikasi database haruslah stateful karena kegunaan
aplikasi tersebut adalah untuk menyimpan data. Kelemahan statefull adalah tidak scalable untuk kondisi replikasi server
untuk kondisi ketika
trafik akses meningkat pada server.
Aplikasi
stateless merupakan aplikasi yang tidak menyimpan state. Tidak ada data yang berkaitan dengan penggunaan aplikasi yang
disimpan permanen. Keuntungan aplikasi yang stateless akan sangat mudah untuk di scale up atau bertambah jumlahnya.
Bagaimana
dengan arsitektur aplikasi yang scalable tetapi masih tetap memerlukan state yang bersifat statefull salah satunya
untuk fungsi login, atau mungkin dalam aplikasi naskah dinas elektronik bagaimana membedakan kotak masuk naskah dinas
pegawai satu dengan pegawai lainnya. Pada
aplikasi berbasis web hal ini biasa menggunakan session atau state tertentu yang disimpan dalam session.
Pembahasan
Metode penyimpanan session menjadi hal yang perlu
diperhatikan untuk mendukung aplikasi yang stateless
tetapi penyimpanan session
nya bersifat statefull. Untuk penyimpanan session
biasanya dalam bentuk file, database,
ataupun dalam artikel ini akan di ulas metode penyimpanan session dalam bentuk storage in memory menggunakan redis. Beberapa metode terkini terdapat arsitektur aplikasi yang benar benar menerapkan stateless secara penuh baik aplikasinya
maupun metode penyimpanan sessionnya menggunakan konsep token Oauth2, Json Web Token (JWT), maupun metode lainnya.
Pada
artikel
ini lebih fokus kepada penggunaan redis untuk penyimpanan session. Adapun tujuan dari
penerapan redis untuk penyimpanan session adalah lebih kepada isu performa session tersimpan dalam memori
akan lebih cepat dan responsif dan isu kedua
adalah aspek skalabilitas yaitu untuk mendukung
arsitektur high availability dimana jika aplikasi di replikasi menjadi
banyak instance maka state antara instance 1 dengan instance lainnya masih mendapatkan data yang sama.
Berikut hasil
analisis terkait pemanfaatan redis di Kabupaten Tegal untuk penyimpanan session dengan
melihat dari beberapa aspek.
Aspek |
Kondisi/Penerapan saat
ini |
Anggaran |
Mengingat redis secara arsitektur cukup sederhana dan merupakan versi open source dan masih dapat digunakan
untuk memenuhi kebutuhan tanpa anggaran, sehingga untuk kebutuhan anggaran belum terlalu prioritas |
Infrastruktur |
Perlu
dilakukan asesmen terhadap kapasitas pusat
data apakah
cukup memadai untuk server redis |
Sumber Daya
Manusia |
Pengembangan kompetensi perlu dilakukan mengingat redis adalah hal yang baru dan akan
diimplementasikan pada level production
dimana masih
belum banyak pegawai
yang mendalami teknologi ini dan
implementasinya lebih lanjut sehingga perlu
kegiatan pengembangan kompetensi dalam bentuk training untuk pegawai |
Kesiapan aplikasi |
Asesmen untuk
kesiapan aplikasi perlu dilakukan meskipun
sebagian besar aplikasi berbasis PHP yang sudah mendukung implementasi session berbasis redis,
tetapi masih banyak aplikasi lain
yang menggunakan session tetapi perlu di cek
kembali kompatibilitasnya jika
menggunakan session redis |
Model Penerapan Teknologi |
Redis diinstall pada server tersendiri
yang bersifat statefull kemudian instance aplikasi yang memerlukan akses redis membuat koneksi ke alamat
IP yang ditentukan |
Tabel 1. Analisis Penerapan Redis untuk Penyimpanan Session
Berikut hasil
analisis terkait teknologi yang sama untuk penyimpanan session dengan
melihat dari beberapa opsi
Teknologi |
Keterangan |
Implementasi |
Redis |
Menjadi topik
dalam artikel ini sehingga menjadi opsi
utama untuk dipilih sebagai solusi permasalahaan penggunaan session dengan
kebutuhan akan kecepatan dan mendukung arsitektur yang scalable |
Direkomendasikan untuk diimplementasikan |
Memcache |
Teknologi
ini juga berbasis in memori yang dapat dimanfaatkan untuk pengelolaan session tetapi masih belum mendukung replikasi sehingga masih belum
memenuhi kriteria untuk implementasi |
Tidak direkomendasikan untuk diimplementasikan |
Storage sharing |
Penyimpanan session
ini berbasis file. Untuk skalabilitas memang mendukung
secara arsitektur teknis, tetapi
karena penyimpanan pada disk, sehingga isu lantensi atau kecepatan akses menjadi kendala tersendiri |
Belum direkomendasikan untuk diimplementasikan |
Database |
Untuk model penyimpanan session database masih terjadi beberapa error pada implementasinya pada saat hit traffik seringkali terjadi salah pembacaan data session, isu
kecepatan juga menjadi kendala mengingat
penyimpanan pada disk sehingga isu
latensi muncul, untuk isu skalabilitas
tidak menjadi kendala mengingat database ini bersifat statefull yang bisa
di akses dari
banyak instance aplikasi |
Belum direkomendasikan untuk diimplementasikan |
Tabel 2. Analisis beberapa
perangkat lunak untuk Penyimpanan Session
Dari hasil analisis
untuk pemilihan teknologi redis untuk penyimpanan session pada tabel 2, diketahui bahwa memang pilihan teknologi redis lebih tepat untuk diimplementasikan terutama dari aspek kecepatan akses data dan juga
aspek skalabilitas aplikasi.
Dampak
Dampak
untuk pemanfaatn redis pada penyimpanan session antara lain:
1.
Perubahan pada aplikasi dalam mengakses
session
Perubahan
ini perlu dilakukan pada aplikasi aplikasi yang telah ada dengan mengubah cara akses session dari yang umumnya
berbasis file yang tersimpan dalam disk menjadi
session storage yang tersimpan dalam memori
2.
Meningkatkan kemampuan untuk High Availability / Cluster
Arsitektur
harus memenuhi kebutuhan untuk high availability dimana sistem harus meminimalisir waktu downtime. Ketika ada disaster
atau sistem terdampak risiko, sehingga penyimpanan session ini harus redundan
3.
Perlunya peningkatan kompetensi SDM
Adanya
hal baru tentunya harus diimbangi dengan kemampuan SDM para pengelola
untuk perawatan dan pengelolaan sistem
sehingga perlu ada nya pelatihan pengembangan kompetensi pegawai
terkait teknologi redis in
memori session
4.
Perlunya mekanisme
peganggaran untuk implementasi
Jika
implementasi redis sudah sudah cukup masif dan menjadi kritikal maka perlu pertimbangan penganggaran untuk model
pekerjaan jasa konsultasi dengan output tenaga ahli yang melakukan setup, transfer knowledge, pelatihan, dan pendampingan teknis terhadap tim internal dalam melakukan maintenance
sehingga fitur yang ada juga meningkat
dan adanya dukungan dari penyedia untuk pengelolaan, perawatan, dan dukungan jika terjadi kendala.