Eskperimen Basis Data Terdistribusi dengan CockroachDB

Iqbal Farabi
Pujangga Teknologi
Published in
5 min readJan 13, 2019

Basis data terdistribusi (distributed database) merupakan basis data yang perangkat-perangkat penyimpanannya terhubung dengan prosesor yang berbeda-beda. Salah satu atribut penting dari sebuah sistem basis data terdistribusi adalah meskipun sistem terdiri dari beberapa simpul (node), sistem harus tampak sebagai satu gugus (cluster) dari perspektif pengguna.

Sebuah sistem basis data terdistribusi berusaha menjawab paling sedikit tiga masalah berikut:

  • skalabilitas
  • ketersediaan (availability)
  • kehandalan (reliability)

Skalabilitas berkaitan dengan jumlah data dan transaksi yang mesti diproses oleh sistem. Ketersediaan berkaitan dengan uptime sistem yang idealnya harus selalu tersedia kapan pun pengguna butuh mengakses data dari sistem. Sementara kehandalan berkaitan dengan toleransi terhadap kerusakan (fault tolerance), bagaimana sistem tetap bisa melayani pengguna meski sebagian komponennya mengalami masalah.

Pada tulisan ini saya akan memaparkan pengalaman saya berkesperimen dengan salah satu teknologi basis data terdistribusi bernama CockroachDB. Dalam eksperimen yang akan kita simak bersama, saya akan mendemonstrasikan bagaimana CockroachDB menjawab persoalan skalabilitas, ketersediaan, dan kehandalan sebuah sistem.

Mari kita mulai bereksperimen!

Instalasi

Ada beberapa cara untuk meng-install CockroachDB di berbagai platform dan sistem operasi. Pada eksperimen ini, saya akan menggunakan binary CockroachDB di sistem operasi Mac OS dengan perintah berikut:

brew install cockroach

Untuk pilihan cara instalasi lainnya bisa dilihat di halaman web CockroachDB.

Persiapan Gugus Lokal (Local Cluster Setup)

Setelah CockroachDB terpasang pada perangkat, selanjutnya kita akan mempersiapkan gugus lokal yang akan kita gunakan dalam eskperimen kita. Di lingkungan produksi (production environment) yang sesungguhnya, simpul-simpul dalam gugus basis data kita tentunya akan berada di mesin yang berbeda-beda. Untuk keperluan eksperimen ini, semua simpul dalam gugus basis data (database cluster) yang kita gunakan berada di mesin yang sama.

Untuk membuat sebuah gugus, kita mulai dengan menjalankan satu simpul dengan perintah berikut:

cockroach start --insecure --listen-addr=localhost

Setelah satu simpul berjalan, kita jalankan dua simpul lainnya sehingga gugus basis data kita memiliki tiga simpul:

cockroach start \
--insecure \
--store=node2 \
--listen-addr=localhost:26258 \
--http-addr=localhost:8081 \
--join=localhost:26257
cockroach start \
--insecure \
--store=node3 \
--listen-addr=localhost:26259 \
--http-addr=localhost:8082 \
--join=localhost:26257

Seperti yang bisa dilihat, ada sedikit perbedaan antara perintah untuk menjalankan simpul pertama dengan perintah untuk menjalankan simpul kedua dan ketiga. Pada simpul kedua dan ketiga, kita perlu menambahkan parameter store, listen-addr, http-addr, dan join. Pada simpul pertama, parameter store secara otomatis terisi dengan nilai cockroach-data, listen-addr dengan nilai localhost:26257, dan http-addr dengan nilai localhost:8080. Sementara parameter join tidak diperlukan ketika kita menjalankan simpul yang pertama.

Setelah gugus basis data berjalan, kita bisa mengakses halaman antarmuka untuk admin di localhost:8080.

Eksperimen 1: Replikasi Data

Pada eksperimen ini, kita akan mencoba bagaimana data direplikasi pada gugus basis data CockroachDB. Pertama, kita akan menggunakan data sampel yang disediakan oleh CockroachDB untuk eksperimen ini. Untuk mengunggah data sampel ke simpul pertama dari gugus basis data kita, gunakan perintah berikut:

cockroach workload init intro \
'postgresql://root@localhost:26257?sslmode=disable'

Selanjutnya kita akan menjalankan SQL client pada simpul pertama untuk memverifikasi bahwa data sampel sudah tersimpan di sana:

cockroach sql --insecure --host=localhost:26257
SHOW DATABASES;
SHOW TABLES FROM intro;
SELECT * FROM intro.mytable WHERE (l % 2) = 0;

Perintah terakhir dari rangkaian perintah di atas akan mengeluarkan hasil sebagai berikut:

  l  |                          v
+----+------------------------------------------------------+
0 | !__aaawwmqmqmwwwaas,,_ .__aaawwwmqmqmwwaaa,,
2 | !"VT?!"""^~~^"""??T$Wmqaa,_auqmWBT?!"""^~~^^""??YV^
4 | ! "?##mW##?"-
6 | ! C O N G R A T S _am#Z??A#ma, Y
8 | ! _ummY" "9#ma, A
10 | ! vm#Z( )Xmms Y
12 | ! .j####mmm#####mm#m##6.
14 | ! W O W ! jmm###mm######m#mmm##6
16 | ! ]#me*Xm#m#mm##m#m##SX##c
18 | ! dm#||+*$##m#mm#m#Svvn##m
20 | ! :mmE=|+||S##m##m#1nvnnX##; A
22 | ! :m#h+|+++=Xmm#m#1nvnnvdmm; M
24 | ! Y $#m>+|+|||##m#1nvnnnnmm# A
26 | ! O ]##z+|+|+|3#mEnnnnvnd##f Z
28 | ! U D 4##c|+|+|]m#kvnvnno##P E
30 | ! I 4#ma+|++]mmhvnnvq##P` !
32 | ! D I ?$#q%+|dmmmvnnm##!
34 | ! T -4##wu#mm#pw##7'
36 | ! -?$##m####Y'
38 | ! !! "Y##Y"-
40 | !
(21 rows)

Selanjutnya kita bisa berhenti dari SQL client di simpul pertama dengan perintah \q.

Kemudian, kita akan memverifikasi bahwa data yang sama sudah direplikasi secara otomatis oleh CockroachDB ke simpul kedua dan ketiga:

cockroach sql --insecure --host=localhost:26258
SHOW DATABASES;
SHOW TABLES FROM intro;
SELECT * FROM intro.mytable WHERE (l % 2) = 0;
\q
cockroach sql --insecure --host=localhost:26259
SHOW DATABASES;
SHOW TABLES FROM intro;
SELECT * FROM intro.mytable WHERE (l % 2) = 0;
\q

Eksperimen 2: Toleransi Kerusakan

Pada eksperimen selanjutnya, kita akan mencoba melakukan simulasi kerusakan pada salah satu simpul dengan mematikan simpul kedua secara manual:

cockroach quit --insecure --host=localhost:26258

Selagi simpul kedua mati, kita akan mengunggah data sampel baru ke gugus basis data kita:

cockroach workload init startrek \
'postgresql://root@localhost:26257?sslmode=disable'

Setelah itu, kita verifikasi bahwa data sampel yang kita unggah ke simpul pertama sudah tereplikasi ke simpul ketiga:

cockroach sql --insecure --host=localhost:26259
SHOW DATABASES;
SHOW TABLES FROM startrek;
SELECT * FROM startrek.eipsodes WHERE stardate > 5500;
\q

Sekarang, kita akan nyalakan kembali simpul kedua:

cockroach start \
--insecure \
--store=node2 \
--listen-addr=localhost:26258 \
--http-addr=localhost:8081 \
--join=localhost:26257

Langkah terakhir dari eksperimen ini, kita verifikasi bahwa sampel data juga tereplikasi ke simpul kedua meskipun simpul kedua sempat mengalami downtime:

cockraoch sql --insecure --host=localhost:26258
SHOW DATABASES;
SHOW TABLES FROM startrek;
SELECT * FROM startrek.episodes WHERE stardate > 5500;
\q

Eksperimen 3: Penyeimbangan Beban Terotomasi (Automatic Load Balancing)

Seperti eksperimen sebelumnya, kita akan mengunggah data sampel ke gugus basis data kita:

cockroach workload init tpcc \
'postgresql://root@localhost:26257?sslmode=disable'

Beban dari sampel data yang kita jalankan di atas saat ini terdistribusi ke tiga simpul yang sudah ada di gugus basis data. Sekarang, kita akan tambahkan dua simpul lagi ke gugus basis data kita:

cockroach start \
--insecure \
--store=scale-node4 \
--listen-addr=localhost:26260 \
--http-addr=localhost:8083 \
--join=localhost:26257,localhost:26258,localhost:26259
cockroach start \
--insecure \
--store=scale-node5 \
--listen-addr=localhost:26261 \
--http-addr=localhost:8084 \
--join=localhost:26257,localhost:26258,localhost:26259

Setelah kedua simpul di atas ditambahkan, kita bisa membuka halaman antarmuka admin di localhost:8080 untuk melihat bagaimana jumlah replica pada simpul keempat dan kelima perlahan bertambah dan akhirnya sama jumlahnya dengan simpul pertama, kedua, dan ketiga.

Simpulan

Dari tiga eksperimen di atas, kita telah berhasil melakukan simulasi replikasi data, toleransi kerusakan, dan otomatisasi penyeimbangan beban pada gugus basis data dengan menggunakan CockroachDB. Replikasi data merupakan salah satu solusi untuk memastikan bahwa gugus basis data selalu tersedia kapan pun perlu diakses oleh pengguna. Toleransi kerusakan merupakan salah satu jawaban untuk menjaga kehandalan gugus basis data ketika salah satu simpul pada gugus mengalami downtime. Sementara otomatisasi penyeimbangan beban merupakan salah satu cara untuk meningkatkan skalabilitas sistem atau aplikasi yang menggunakan gugus basis data yang kita buat.

Tentunya, CockroachDB bukanlah satu-satunya perangkat lunak basis data terdistribusi. Ada juga nama-nama seperti Cassandra, MongoDB, CouchDB, dan lain sebagainya. Pada tulisan-tulisan berikutnya, saya akan membahas tentang teknologi-teknologi yang mendasari basis data terdisitribusi seperti key-value store, Raft protocol, gossip protocol, sharding, synchronous replication, dan berbagai teknologi lainnya, serta perbandingan bagaimana beberapa perangkat lunak basis data terdistribusi populer menggunakan teknologi-teknologi tadi.

P.S. Jika teman-teman menyukai artikel semacam ini, silakan subscribe ke newsletter kita dan dapatkan notifikasi artikel terbaru langsung di inbox kamu!

--

--