code, lesson learned, technology, Tips

Apa itu High Availability?

Selama ini gw pikir High Availability (HA) semata-mata hanya mempersiapkan cadangan kalau bencana (disaster) muncul. Mempersiapkan cadangan dalam artian data backup. Ternyata pemahaman tersebut tidak sepenuhnya benar. Hal ini baru gw sadari setelah diberikan pekerjaan untuk membuat solusi kalau sampai layanan telekomunikasi yang digunakan tim Customer Service (CS) kena bencana.

Hasil akhir yang diharapkan — ingat selalu untuk berpikir dari hasil akhir yang diharapkan — adalah: tim CS harus selalu dapat menggunakan layanan telekomunikasi. Mereka tidak peduli dan tidak perlu tahu* kalau ada bencana terjadi. Yang mereka pedulikan adalah mereka datang ke kantor dan melakukan pekerjaan mereka: menghubungi dan dihubungi pelanggan.

Untuk itu harus ada minimal 2 (dua) layanan telekomunikasi yang berfungsi dalam waktu bersamaan. Namun hanya ada 1 (satu) layanan yang aktif digunakan dalam satu waktu*. Katakanlah ada layanan utama dan layanan cadangan.

Ketika bencana terjadi (pasti terjadi, hanya masalah waktu) dan mengakibatkan layanan utama gagal beroperasi, maka saatnya layanan cadangan yang aktif. Istilah yang digunakan untuk mewakili proses ini adalah failover.

Ketika bencana berakhir dan layanan utama kembali normal. Maka layanan utama harus kembali aktif, menggantikan layanan cadangan. Proses mengembalikan penggunaan dari layanan cadangan ke layanan utama disebut fallback.

Hubungan failover dan fallback bisa dilihat pada gambar berikut ini. Gambar ini gw dapat dari dokumentasi “Building Elastix-2.4 High Availability Clusters with DRBD and Heartbeat (using a single NIC)“. Sumber: http://www.theserverexpert.com/elastix_2.4_ha_cluster-updated.pdf

Failover and fallback.

Beberapa pertanyaan yang harus dijawab adalah:

  1. layanan-layanan apa saja yang vital dan harus selalu tersedia?
  2. apakah layanan-layanan tersebut dapat dibuat duplikasinya? hal ini harus menjawab pertanyaan lain, yaitu:
    • apa saja kebutuhan layanan-layanan tersebut?
    • bagaimana membuat duplikasi kebutuhan-kebutuhan tersebut?
    • seberapa mudah membuat duplikasi layanan tersebut?
  3. data apa saja yang harus tersedia?

Sejauh ini baru itu saja yang terpikirkan. Seharusnya ada beberapa lagi, tapi gw belum sampai di sana.

Pertanyaan tadi keluar dari pengalaman ketika berusaha membuat duplikasi layanan telekomunikasi berbasis Asterisk. Asterisk dikelola dengan FreePBX, dan diberi nilai tambah oleh produk bernama Elastix. Elastix merupakan sekumpulan alat bantu yang dikembangkan di atas sistem operasi CentOS.

Asterisk memiliki modul bernama CDR (Call Detail Recording) yang berfungsi untuk menyimpan metadata komunikasi telepon yang dilakukan melalui sistem.  Terdapat juga modul lain yang merekam semua pembicaraan. Oleh karena itu, data tadi harus selalu tersedia.

Elastix menggunakan SQLite sebagai penyimpanan data konfigurasi. FreePBX sebagai antarmuka Asterisk sepertinya tidak membutuhkan penyimpanan data apapun, namun memiliki beberapa modul tambahan yang mungkin saja membutuhkan penyimpanan data untuk menyimpan konfigurasi*.

Yang ingin gw sampaikan adalah pentingnya identifikasi detail kebutuhan tiap layanan karena menentukan apa yang harus diduplikasi dan caranya.

Apa yang dimaksud dengan kebutuhan tiap layanan?

Di atas sudah gw jelaskan bahwa modul Asterisk bernama CDR membutuhkan MySQL untuk penyimpanan data. Hal ini memaksa untuk mencari tahu apakah MySQL memiliki fitur untuk melakukan duplikasi layanan. Setelah dicari tahu ternyata MySQL memiliki fitur replikasi. Lalu muncul pertanyaan selanjutnya, MySQL versi berapa yang digunakan? Apakah versi tersebut sudah mendukung skenario replikasi yang kita butuhkan? Intinya adalah pemahaman tools yang digunakan, layanan yang ditawarkan tool tersebut, serta kompleksitasnya.

Kesimpulan

High Availability (HA) sulit dan kompleks sekali. Karena harus dipikirkan secara matang dan dilakukan oleh mereka yang paham dan kenal betul karakteristik penggunaan layanan, karakteristik layanan itu sendiri, karakteristik kebutuhan layanan, dan sebagainya.

Tulisan ini gw buat semata-mata untuk mengeluarkan isi pikiran saja. Mungkin saja berguna buat orang lain.

Standard
code, work

Symfony2

Kembali ke Bali untuk kesekiankalinya, dan kembali ke web development.

Seorang teman ajak untuk buat produk. Memutuskan untuk coba Symfony2 sebagai alat bantu utama. Setelah baca dokumentasi dan coba berulangkali, masih belum percaya diri untuk pakai framework yang satu ini.

Ga bisa bilang jelek atau buruk. Menurutku ini framework paling advance, dewasa, komplit, dan rumit. Bagus sekali, walau berat hati untuk mengakuinya.

Ga begitu sulit untuk memahami internal framework lain semacam Yii, Laravel, dsb. Tapi untuk yang satu ini, persis kayak pertama kali menaklukkan Magento dulu. Sakit kepala dan kesal secara konstan.

Seharusnya, kalau mau cepat, bisa saja pilih framework lain. Tapi entah kenapa kok ada tendensi untuk terus belajar dan coba pahami gimana Symfony2 ini bekerja. Symfony2 ini kayak hasil research bertahun-tahun dan belum berhenti. Blog penulisnya juga kaya akan ilmu dan tulisan bagus.

Entahlah. Kayaknya harus persisten dan stick dengan Symfony2 ini. Cuma bingung aja jelasin ke si temen, karena sudah pasti dia punya harapan untuk melihat produk secepat mungkin. Sigh.

Setelah dipikir-pikir, mata kuliah Komunikasi seharusnya dimasukkan ke kurikulum Ilmu Komputer. Bagaimana caranya mengkomunikasikan bahwa si programmer memilih tool A ke client. Bukan ngeles, ini serius.

Selain mata kuliah Komunikasi. Sebaiknya institusi pendidikan juga memaksakan agar anak kuliah Ilmu Komputer mempelajari source-code aplikasi open source. Ini penting sekali. Banget.

Merasa telat beberapa tahun baru tersadar betapa pentingnya belajar dari source code karya orang lain. Banyak teknik baru, implementasi pattern tertentu, dan sebagainya yang bisa dipelajari dan bakal sulit didapat kalau cuma membaca buku tertentu. Source code adalah dokumentasi paling valid.

Cuma ya siap-siap untuk dapat sakit kepala secara konstan.

Mempelajari source code, tentu tidak bisa lepas dari debugging. Pelan tapi pasti bakal memahami teknik debugging, dimana harus pasang breakpoint, kenapa harus periksa call stack, kapan harus cek nilai yang disimpan variable, dan sebagainya. Hal-hal kekgini minim diajarin di kuliahan. Setidaknya dulu cuma dikenalkan di Visual Basic. :|

Kok jadi banyak menuntut yak. Maksudnya adalah, masa kuliahan merupakan momen yang tepat untuk membangun mental dan cara berpikir sebagai programmer pro. Tidak perlu dihambur-hamburkan 3-4 tahun perkuliahan untuk hal-hal yang tidak berguna. Sayang sekali rasanya. Dengan model yang sekarang, programmers pro yang dihasilkan kampus jadi minim. Yang benar-benar bagus pasti ke luar negeri, rumput lebih hijau disana.

Duh, tulisan ini random sekali sih.

 

Standard
code

Penggunaan ‘const’ di C++

Penggunaan konstanta di C++ ternyata unik sekali. Selain membuat konstanta, const juga bisa digunakan untuk hal lain.

Perhatikan CRectangle.h baris 23. Penggunaan const di akhir definisi fungsi membuatnya bersifat read-only. Compiler akan mengeluarkan error jika terdapat statement di dalam fungsi tersebut yang berusaha untuk mengubah state milik instance. Continue reading

Standard