Skip to content

Instantly share code, notes, and snippets.

@ejlp12
Created April 10, 2021 04:25
Show Gist options
  • Save ejlp12/52941d3b0fc7bcccdaea9877fa294f70 to your computer and use it in GitHub Desktop.
Save ejlp12/52941d3b0fc7bcccdaea9877fa294f70 to your computer and use it in GitHub Desktop.
Konsep pengelolaan server: Pets vs Cattle

image

Pets vs Cattle

Bagian pertama dari 3 tulisan.

Kalau kamu seorang infrastructure engineer, devops engineer, system administrator atau apapun nama jabatan pekerjaan kamu tapi kamu bekerja mengelola server maka kamu harus mengerti tentang dua strategi mengelola kumpulan server yaitu (1) memperlakukannya seperti pets (binatang peliharaan) atau (2) sebagai cattle (peternakan sapi skala besar).

Analogi pets dan cattle ini perlu kalian pahami untuk bisa mentransformasi cara mengelola server agar menjadi lebih baik dengan mengurangi usaha (effort) dan juga mengurangi resiko kegagalan, sehingga kamu bisa lebih fokus pada inovasi, perkerjaan otomasi dan peningkatan kinerja (improvement).

Memperlakukan server seperti pets

Saat kamu memiliki pets, kamu biasanya memberi perhatian khusus pada setiap individu peliharaan kamu itu, misalnya kamu punya beberapa kucing dan masing-masing diberi nama misalnya "blacky", "winki", "loreng", mereka diberi makanan khusus sesuai kesukaannya masing-masing, kalau salah satu kucing sakit maka kamu akan mengisolasi dan memberikannya obat supaya sembuh atau dibawa bahkan ke doker hewan.

Saat kamu mengelola server dan memperlakukan sekumpulan server seperti Pets artinya kamu tahu persis masing-masing server itu; kamu memberi nama dan cukup hafal nama-nama server tersebut misalnya erp1.mydomain.com, database1.mydomain.com, webdev.mydomain.com dan seterusnya; kamu tahu setiap server itu menjalankan aplikasi apa dan mungkin juga hafal IP address dari setiap server tersebut. Ketika ada sebuah aplikasi atau server yang bermasalah, kamu akan login ke server tersebut dan melakukan perbaikan, memeriksa log, melakukan patching atau perbaikan sampai server atau aplikasi tersebut kembali sehat. Kamu juga mungkin akan login ke server untuk melakukan langkah-langkan tertentu saat merilis aplikasi versi terbaru.

Pet server biasanya akan selalu dipertahankan agar terus hidup supaya aplikasi selalu dapat diakses, kecuali jika terpaksa server tersebut kadang harus di-restart misalnya pada saat merilis aplikasi versi baru. Pet server biasanya adalah suatu server fisik (physical server) atau suatu Virtual Machine (VM).

Memperlakukan server seperti cattle

Lain halnya ketika kamu punya cattle yang jumlah hewan yang kamu tangani jauh lebih banyak dibanding jumlah binatang peliharaan. Karena jumlahnya ratusan, kamu tidak akan memberi nama setiap sapi tapi mungkin memberikan nomor (tag) yang dipasang di telinganya, semuanya sapi akan kamu diperlakukan sama, kalau ada seekor sapi yang sakit parah atau berpotensi menularkan penyakit kamu lebih memilih menyembelihnya dan mengganti dengan sapi muda baru yang bisa digemukkan lagi.

image

Memperlakukan server seperti cattle adalah sebuah metode yang "relatif baru", yang cocok saat kamu mengelola aplikasi dengan skala besar atau mengelola server yang jumlahnya luar biasa banyak. Kamu tentu saja tidak memberi nama khusus untuk tiap server atau mencoba menghafal semua server jika servernya jumlahnya ratusan atau bahkan ribuan. Biasanya server hanya diberi tanda atau nomor misalnya "vm-1845", "vm-1079", "vm-3352". Jika ada server yang bermasalah kamu bisa matikan servernya dan ganti dengan server baru, dan analisis log-nya bisa dilakukan belakanagan karena log sudah tersimpan di sebuah Server Logging Tersental.

Suatu cattle server biasanya bukan server fisik, tapi VM atau container. Akan sulit memperlakukan server fisik sebagai cattle server karena untuk mengganti sebuah server fisik memerlukan usaha yang banyak dan waktu yang tidak sebentar. VM jika kita perlakukan sebagai cattle server juga memiliki kekurangan yaitu waktu yang relatif lama dalam mengganti VM yang rusak dengan VM yang baru. Hal itu karena didalam VM terdapat sistem operasi (OS) sehingga VM memiliki ukuran image yang cukup besar dan untuk menjalankan VM baru akan dibutuhkan waktu untuk transfer (copy) image dari tempat penyimpanan (repository) ke server fisik yang dituju. Setelah VM image tersedia di sebuah server fisik, akan dibutuhkan waktu untuk menjalankan OS terlebih dahulu sebelum kemudian menjalankan aplikasi. Selain itu, bisa jadi perlu waktu juga untuk transfer persistent data yang diperlukan oleh aplikasi.

Container menjadi teknologi yang paling cocok sebagai cattle server. Saat kamu menggunakan container untuk menjalankan aplikasi, sangat tidak disarankan untuk mengelolanya sebagai pet server. Kenapa? Karena container didesain stateless. Artinya, setiap perubahan yang tejadi didalam container saat container sudah berjalan sebagai instan maka perubahan tersebut tidak akan bersifat persistent (terus menerus disimpan), tapi perubahan tersebut akan hilang saat kita me-restart container tersebut. Jadi bukan hal yang baik (walaupun bisa) kamu login ke container instan yang sedang berjalan untuk mengubah konfigurasi aplikasi atau melakukan sesuatu untuk memperbaiki kesalahan disitu. Praktek terbaik ketika container kamu bermasalah adalah siapkan container image baru yang sudah diperbaiki kemudian ganti (matikan) container instan lama dengan container instan baru dari image tersebut. Itulah sebebnya mengapa container sering disebut immutable (tidak bisa diubah).

Container juga cocok sebagai cattle server karena dia ringan (lightweight). Container tidak mengandung OS, dia hanya proses aplikasi yang dijalankan secara terisolasi sehingga container image memiliki ukuran yang relatif kecil dan waktu startup aplikasi jauh lebih cepat dibanding VM. Selain itu dengan menggunakan container, kita "dipaksa" untuk melakukan otomasi dalam mengkonfigurasi dan menginstal aplikasi dengan menggunakan skrip yang ditulis pada file Dockerfile. Setiap perubahan terhadap aplikasi atau komponen yang dibutuhkan aplikasi di dalam container harus dimulai dengan mengubah Dockerfile kemudian mem-build container image dari file tersebut.

Otomasi

Tidak salah jika anda masih menggunakan praktek managemen pet server, bisa jadi tidak benar juga kalau kamu memaksakan untuk memperlakukan semua server kamu sebagai cattle server padahal sebagian aplikasi masih bersifat monolitik dan tidak stateless. Yang terpenting dalam menerapkan praktek managemen server yang skalanya besar adalah otomasi. Mengotomasi pekerjaan-pekerjaan dalam pengelolaan server dan infrastruktur akan mengurangi resiko kesalahan orang dan mengurangi pekerjaan yang berulang-ulang.

  • Bagian 2 dari tulisan ini: Otomasi pada Pet server
  • Bagian 3 dari tulisan ini: Otomasi pada Cattle server
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment