10
REmote DIrectory Server ( R E D I S ) TUGAS RESUME Oleh : 1210652030 Hendra Dwi Saputra PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS MUHAMMADIYAH JEMBER 2 0 1 5

REmote DIctionary Server

Embed Size (px)

Citation preview

REmote DIrectory Server

( R E D I S )

TUGAS RESUME

Oleh :

1210652030 Hendra Dwi Saputra

PROGRAM STUDI TEKNIK INFORMATIKA

FAKULTAS TEKNIK

UNIVERSITAS MUHAMMADIYAH JEMBER

2 0 1 5

REmote DIctionary Server

(REDIS)

Apa itu REDIS?

REDIS adalah penyimpan nilai kunci sementara dan permanen berbasis open source

dengan lisensi BSD. Hal ini sering disebut sebagai server struktur data dapat berisi string,

hash, list, set, sorted set, bitmap dan hyperlog. Anda dapat menjalankan operasi atomik pada

tipe data ini, seperti menambahkan string; menambahkan nilai dalam hash; memasukkan

sebuah elemen ke dalam list; komputasi pesimpangan, himpunan dan perbedaan set; atau

mendapatkan anggota yang memiliki ranking tertinggi di sebuah sorted set.

Untuk mendapatkan kinerja yang luar biasa, Redis bekerja dengan sebuah dataset di

dalam memori. Tergantung dari penggunaan anda, anda dapat mempertahankannya dengan

membuang dataset ke media penyimpanan sekali-kali, atau dengan menambahkan ke sebuah

catatan. Ketahanan ini dapat secara opsional dinonaktifkan, jika anda hanya membutuhkan

kaya-fitur, jaringan, dalam cache memori. Redis juga mendukung pengaturan biasa replikasi

ansinkronus master-slave, dengan sinkronisasi pertama tanpa-terhenti yang sangat cepat,

otomatis-koneksi-ulang dengan pembagian sinkronisasi-ulang dengan jaringan terpisah. Fitur-

fitur yang lain adalah :

Transaksi

Pub/Sub

Skrip Lua

Kunci dengan waktu terbatas

LRU eviction of keys

Automatic failover

Anda dapat menggunakan Redis dari bahasa pemrograman umum di dunia. Redis

ditulis dengan ANSI-C dan dapat bekerja di sistem POSIX umum seperti Linux, UNIX, BSD,

OSX tanpa dependensi eksternal.

PUB/SUB

SUBSCRIBE, UNSUBSCRIBE dan PUBLISH mengimplementasikan paradigma

pengiriman pesan secara PUBLISH/SUBSCRIBE (publikasi/langganan) yang mana pengirim

(publishers) diprogram untuk tidak mengirim pesannya ke penerima tertentu (subscribers).

Tetapi, pesan-pesan yang dipublikasikan ditandai ke dalam saluran-saluran, tanpa mengetahui

apabila penerima ada (menerima) atau tidaknya. Penerima menyatakan keinginan pada satu

atau beberapa saluran, dan hanya menerima pesan-pesan yang diinginkan, tanpa mengetahui

apabila pengirim ada (mengirim) atau tidaknya. Ketidakterikatan antara pengirim dan

penerima dapat memberikan skalabilitas dan topologi jaringan yang lebih dinamis. Misalnya

untuk berlangganan saluran “musik” dan “film” klien menerbitkan sebuah SUBSCRIBE

menetapkan nama dari saluran :

SUBSCRIBE musik film

Pesan-pesan disampaikan oleh klien yang lain ke saluran-saluran ini yang akan

diedarkan oleh Redis ke semua klien yang berlangganan. Sebuah klien yang berlangganan ke

satu atau beberapa saluran tidak perlu menerbitkan perintah, meskipun dia dapat berlangganan

dan berhenti berlangganan ke dan dari saluran-saluran yang lain. Balasan dari operasi

SUBSCRIBE dan UNSUBSCRIBE dikirimkan dalam bentuk pesan, sehingga klien dapat

membaca sebuah aliran pesan yang cocok yang mana element pertama mengindikasikan tipe

dari pesannya.

Format Pesan

Sebuah pesan adalah balasan berbentuk array (susunan) dengan tiga elemen. Elemen yang

pertama merupakan bentuk dari pesan :

subscribe : berarti kita telah berhasil berlangganan ke saluran yang diberikan sesuai

dengan elemen kedua pada balasan. Elemen ketiga menyatakan jumlah saluran kita

berlangganan.

unsubscribe : berarti kita telah berhasil berhenti berlangganan dari saluran yang

diberikan sesuai dengan elemen kedua pada balasan. Ketika elemen terakhir adalah

kosong, maka kita tidak lagi berlangganan ke saluran apapun, dan klien dapat menerbitkan

apapun perintah Redis ketika kita berada di luar tahap Pub/Sub.

message : itu adalah pesan yang diterima dari sebuah perintah PUBLISH yang

diterbitkan oleh klien lain. Elemen kedua adalah nama dari saluran berasal, dan elemen

ketiga adalah muatan pesan sesungguhnya.

Basisdata & Pengujian

Pub/Sub tidak ada hubungannya dengan ruang kunci. Itu dibuat untuk tidak mengganggunya

di level manapun, termasuk jumlah basisdata. Menerbitkan di basisdata 10, akan diterima oleh

pelanggan pada basisdata 1. Jika ingin menguji beberapa macam, beri awalan pada saluran

dengan nama dari lingkungannya (test, staging, production, ....).

Contoh Protokol Koneksi

SUBSCRIBE pertama kedua

*3

$9

subscribe

$5

pertama

:1

*3

$9

Subscribe

$6

Second

:2

Pada titik ini, dari klien yang lain kita menerbitkan operasi PUBLISH pada saluran dengan

nama kedua :

PUBLISH kedua Hello

Ini adalah yang diterima oleh klien pertama :

*3

$7

message

$6

Kedua

$5

Hello

Sekarang klien berhenti berlangganan dari seluruh saluran melalui perintah UNSUBSCRIBE

tanpa argumen tambahan :

UNSUBSCRIBE

*3

$11

unsubscribe

$6

kedua

:1

*3

$11

unsubscribe

$5

pertama

:0

Langganan Pencocokan-Pola

Implementasi Redis Pub/Sub mendukung pencocokan pola. Klien-klien dapat berlangganan

pola ragam glob untuk menerima semua pesan yang terkirim ke saluran dengan nama yang

cocok dengan pola yang diberikan. Sebagai contoh :

PSUBSCRIBE news.*

Akan menerima semua pesan terkirim ke saluran news.art.figurative, news.music.jazz, dan

lain-lain. Semua pola ragam glob adalah valid, jadi beberapa wildcard sekaligus juga

didukung.

PUNSUBSCRIBE news.*

Akan memberhentikan langganan dari sebuah klien dari pola tersebut. Tidak ada pelanggan

lain yang terpengaruh dari panggilan ini. Pesan diterima sebagai hasil dari pencocokan pola

dikirimkan dengan format yang berbeda :

Tipe pesan dari pmessage : itu adalah sebuah pesan yang diterima sebagai hasil dari

sebuah terbitan perintah PUBLISH oleh klien yang lain, mencocokkan sebuah langganan

pencocokan pola. Elemen kedua adalah pola yang cocok sebenarnya, elemen ketiga adalah

nama dari saluran berasal, dan elemen terakhir adalah muatan pesan aktual.

Mirip dengan SUBSCRIBE dan UNSUBSCRIBE, perintah PSUBSCRIBE dan

PUNSUBSCRIBE diketahui oleh sistem mengirim sebuah pesan dari tipe psubscribe dan

punsubscribe menggunakan format yang sama dengan format pesan subscribe dan

unsubscribe.

Pencocokan pesan dengan langganan sebuah saluran atau pola

Sebuah klien dapat menerima sebuah pesan tunggal berkali-kali jika langganannya ke

beberapa pola dicocokkan dengan pesan yang dipublikasikan, atau jika dia berlangganan pada

kedua pola dan saluran yang cocok dengan pesan. Seperti contoh dibawah ini :

SUBSCRIBE foo

PSUBSCRIBE f*

Pada contoh di atas, jika sebuah pesan dikirimkan ke saluran foo, maka klien akan menerima

dua pesan : satu tipe message dan satu tipe pmessage.

Arti dari penghitungan langganan dengan pencocokan pola

Pada tipe pesan subscribe, unsubscribe, psubscribe dan punsubscibe,

argumen terakhir adalah perhitungan pelanggan yang terus aktif. Jumlah ini adalah total

angka sebenarnya dari saluran dan pola dimana klien tetap berlanggan. Jadi klien akan keluar

dari tahap Pub/Sub ketika penghitungan ini menjadi nol akibat dari berhentinya berlangganan

dari semua saluran dan pola.

Petunjuk implementasi pustaka klien

Karena semua pesan diterima berisi langganan nyata menyebabkan pustaka pengiriman pesan

(saluran di dalam tipe message, dan pola nyata di tipe pmessage) klien memungkinkan

mengikat langganan nyata untuk callback (hal ini dapat berupa fungsi anonimus, blok, pointer

fungsi), menggunakan sebuah tabel hash. Ketika pesan diterima sebuah pencarian O(1) dapat

diselesaikan untuk mengantarkan pesan ke callback terdaftar.

INSTALASI dan KONFIGURASI

REDIS di Gentoo Linux

1. Instalasi Redis di Gentoo Linux

# emerge -p dev-db/redis

2. Konfigurasi Redis di Gentoo Linux

# eselect rc add redis

# eselect rc start redis

3. Ujicoba Kinerja Redis

PERCOBAAN PUB/SUB

MENGGUNAKAN REDIS

1. Percobaan ini akan mengimplementasikan dasar-dasar Pub/Sub pada Redis, dengan

membuat 3 (tiga) saluran yaitu musik, video dan berita dengan 2 (dua) klien yang

masing-masing klien pertama berlangganan saluran musik dan berita, sedangkan klien

kedua berlangganan saluran video dan berita. Untuk berlangganan menggunakan

perintah SUBSCRIBE.

Klien Pertama Klien Kedua

SUBSCRIBE musik berita SUBSCRIBE video berita

2. Jika kita menerbitkan pesan dengan menggunakan perintah PUBLISH, maka klien akan

menerima pesan sesuai dengan saluran dimana mereka berlangganan. Sebagai contoh

pertama kita akan mengirimkan pesan ke saluran musik.

PUBLISH musik “Meghan Trainor - All About That Bass”

Klien Pertama Klien Kedua

Dalam contoh ini, hanya klien pertama yang mendapatkan pesan karena hanya dia yang

berlangganan saluran musik, sedangkan klien kedua tidak mendapatkan pesan.

3. Kemudian kita menerbitkan pesan untuk saluran video, maka klien kedua yang

berlangganan saluran video saja yang menerima pesan. Sedangkan klien pertama tidak

menerima pesan karena tidak berlangganan saluran tersebut.

PUBLISH video “Avengers 2 - Age of Ultron”

Klien Pertama Klien Kedua

4. Yang terakhir adalah ketika diterbitkan sebuah pesan ke saluran berita dimana kedua

klien tersebut berlangganan saluran berita akan menerima pesan yang diterbitkan.

PUBLISH berita “Uang Muka Mobil Pejabat Naik”

Klien Pertama Klien Kedua