evilfactorylabs

Cover image for Mengenal "Cloud" untuk Software Developer
Rizaldy
Rizaldy

Posted on

Mengenal "Cloud" untuk Software Developer

Kata "Cloud" mungkin sudah tidak asing lagi di telinga pembaca sekalian, dan, ya, frasa "There is no cloud, it just someone else computer" pun secara konsep tidak 100% salah untuk menggambarkan tentang Cloud.

Tapi tidak sedikit yang belum memahami sepenuhnya apa itu cloud (atau yang biasa disebut sebagai cloud computing/komputasi awan) termasuk saya. Dan karena cloud ini adalah konsep yang relatif baru, biasanya saya menggunakan pendekatan "pembalikkan" untuk mencoba memahaminya, alias, bagaimana bila kita mulai dengan pertanyaan apa itu yang bukan cloud?

Infrastruktur Tradisional

Untuk menjalankan aplikasi/layanan yang dibuat untuk pengguna internet, ada 2 komponen utama yang harus kita miliki sebagai operator:

  • Komputer alias Server (tentu saja)
  • Jaringan internet (tentu saja juga)

Kita mulai dari komputer. Kita harus memiliki komputer yang lumayan tangguh khususnya untuk bisa menangani skala pengguna internet yang relatif acak, beda dengan membuat program yang bukan untuk pengguna internet yang mana bergantung dengan komputer yang digunakan pengguna, bukan malah si operator, alias, it's not my problem.

Untuk merakit komputer yang tangguh tentu memakan biaya yang tidak sedikit, kita harus benar-benar peduli dengan CPU (dan jumlah core) yang ada; media storage yang digunakan, jumlah RAM, NIC, dsb dsb.

Lalu ke jaringan internet. Tentu tidak mungkin berlangganan paket internet rumahan yang menggunakan alamat IP publik dinamis, komputer kita harus memiliki alamat IP publik statis sehingga pengguna internet lain dapat mengakses komputer kita mengingat komputer hanya berkomunikasi dengan komputer lain menggunakan alamat IP.

Mungkin kita bisa menyewa alamat IP dengan prefix /24 ataupun /23 ke internet registry di wilayah kita, mendaftarkan ASN, dan lalu peering dengan ISP yang ada yang menawarkan BGP. Tapi ini lumayan ribet serta banyak memakan biaya & waktu.

Atau kita bisa menggunakan layanan Colocation alih-alih mengatur jaringan sendiri, namun tetap, kita harus bertanggung jawab salahsatunya misal ketika salah satu SSD kita... corrupt. Membangun infrastruktur kita sendiri untuk dapat membuat aplikasi/layanan untuk pengguna internet terlihat seperti mimpi buruk, dan lebih brengseknya lagi sangat mahal dan ribet.

Mungkin kita butuh sebuah solusi untuk lebih mempermudah siapapun membuat aplikasi/layanan untuk pengguna internet, dan dengan biaya yang lebih terjangkau.

Infrastructure as a Service (IaaS)

Sekarang kita sudah masuk ke topik cloud. Inti dari cloud sederhananya ada dua:

  • Komputer orang lain
  • Diakses melalui jaringan internet

Jika kamu sudah menggunakan komputer orang lain yang dapat diakses melalui jaringan internet (dan bukan melalui jalur backdoor), then, cool, you are on the cloud!

Penyedia IaaS sudah lumayan banyak, termasuk di Indonesia. Dengan IaaS, kamu tidak perlu pusing lagi mempertimbangkan hal-hal terkait perangkat keras, karena itu tanggung jawabnya si penyedia layanan (dan termasuk dipemeliharaannya juga!).

Hal yang kamu lakukan hanyalah memilih, dari:

  • Jumlah CPU core yang digunakan
  • Jumlah kapasitas penyimpanan yang dibutuhkan
  • Jumlah RAM yang diinginkan

Dan umumnya jenis layanan yang ditawarkan ada 3:

  • Bare metal (pikirkan seperti colocation, namun bukan menggunakan server kamu sendiri)
  • Dedicated (di beberapa tempat maksudnya menggunakan CPU khusus untukmu)
  • Shared (menggunakan vCPU alias berbagi dengan pengguna lain)

Nah berdasarkan kebutuhan (dan ehm budget) kamu, kamu bisa mulai memesan server yang ingin kamu gunakan, tanpa biaya dan usaha banyak yang harus dikeluarkan.

Rekomendasi gue untuk infrastruktur di Indonesia adalah IDCloudHost dan untuk yang luar adalah DigitalOcean & Linode.

Setiap penyedia layanan hampir menawarkan barang yang sama, pembedanya biasanya hanya di:

  • Inbound/outbound bandwidth transfer & throughput (10GbE? 40GbE?)
  • Jenis CPU yang digunakan (Intel? AMD?)
  • Jenis PCI yang digunakan (AHCI? NVMe?)
  • Dukungan sistem operasi (GNU/Linux? *BSD? Windows?)
  • Ekstensi tambahan seperti dukungan VM backup, floating IP, Layer 3/4 DDoS protection, dsb

Di IaaS, ada 3 hal yang pada dasarnya sudah bukan menjadi urusanmu lagi, yakni:

  1. Jaringan
  2. Penyimpanan
  3. Komputasi

Berarti, sekali lagi, kamu tidak perlu memusingkan jenis Switch/Router, media penyimpanan, dan hal-hal terkait komputasi seperti CPU dan RAM yang akan digunakan, karena itu sudah bukan lagi urusanmu.

Pertanyaan paling inti adalah: Seberapa besar kamu mempercayai penyedia IaaS yang kamu pilih dalam memilih & memelihara 3 hal diatas?

Platform as a Service (PaaS)

Ini adalah lapisan diatas IaaS, dan jika berbicara realita, pada dasarnya sebuah aplikasi hanya terdiri dari komponen-komponen berikut:

  • Runtime (biasanya sebuah web server)
  • Database (MariaDB? Postgres? MongoDB?)
  • Storage (di disk? di db? di S3?)

Komponen lain seperti worker hanyalah tambahan dan bukan sebuah kewajiban. Oh, biasanya sebuah aplikasi/layanan bertindak sebagai IDP, jadi mungkin harus memikirkan hal-hal terkait IAM nya juga.

Anyway, anggap kita menggunakan IaaS dan ada 7 layanan utama untuk dapat menjalankan aplikasi kita:

  1. Reverse proxy 1 (SSL termination, i.e: Traefik)
  2. Reverse proxy 2 (caching, compression, i.e: OpenResty)
  3. Persistent storage (i.e: Postgres)
  4. Ephemeral storage (i.e: Redis)
  5. Another proxy (i.e: imgproxy)
  6. Main application
  7. Worker application

Setidaknya 7 layanan diatas yang harus berjalan untuk dapat menggunakan situs yang sedang kamu akses sekarang ini.

Yang berarti, ada 7 layanan yang harus gue pikirin & pelihara, dari backup; monitoring, keamanan, dsb.

Dan, hey! VM gue pakai FreeBSD, bisa gak nih jalanin Umami di VM ini?

Salah satu benefit yang ditawarkan oleh cloud adalah tentang abstraksi, dan IaaS hanya meng-cover bagian infrastrukturnya saja.

Ingin membuat strategi failover di Postgres? Ingin membuat replika di Redis? Ingin dapat membuat aplikasi berjalan kembali setelah crash? Ingin menjalankan untrusted code dengan aman? Ingin naik gaji?

Itu urusan anda.

Nah, dengan PaaS, hal-hal tersebut bisa menjadi urusannya orang lain alias menjadi urusannya si penyedia layanan (oke kecuali bagian naik gaji, mungkin possible aja anyway).

Kunci dari cloud sebenarnya adalah satu: managed X. Jika IaaS berarti managed infrastructure, PaaS berarti managed platform.

Contohnya, kamu tidak perlu berurusan dengan instalasi Ruby untuk menjalankan aplikasi yang dibuat menggunakan Ruby On Rails ini, karena, ya, itu urusan si penyedia layanan.

Dan hey, sudahkah gue menyebutkan bahwa kita tidak perlu memusingkan konfigurasi firewall untuk memfilter paket masuk dan keluar? Anyway.

Gue personally belum tertarik menggunakan PaaS karena masalah biaya (alias duit gue masih lebih berharga daripada waktu hahaha) tapi kalau mau mencoba, pertimbangan gue adalah menggunakan fly.io, Cloud Run nya GCP, atau apapun itu yang bukan ehm Heroku.

Satu hal yang dijual oleh PaaS adalah agar pengembang bisa fokus ke aplikasi yang dikembangkannya tanpa perlu memusingkan hal-hal terkait infrastruktur dari memilih sistem operasi; kernel, dan lain sebagainya terkait runtime.

Elasticity

Bukan tanpa alasan gue menempatkan bagian inti dari komputasi awan di bagian terakhir. Selain kemudahan, benefit yang didapat dari komputasi awan ini adalah elastisitas (is this a thing?) khususnya dalam menggunakan sumber daya untuk melakukan komputasi.

Misal, kamu bisa menambah vCPU secara on-demand misal ketika traffic sedang naik-naiknya, dan kamu cukup membayar hanya selama vCPU tambahan tersebut digunakan. Sesuatu yang sulit didapat dari infrastruktur tradisional, bukan?

Selain di elastisitas dalam sumber daya, ada juga di bagian lain yang akan kita bahas nanti per-kategori :))

Penutup

Hal yang harus diperhatikan dalam memilih Cloud Provider adalah kepercayaan, karena dengan migarsi ke cloud, secara tidak resmi berarti kita mempercayakan si penyedia layanan dalam mengatur apapun yang terjadi di sistem yang kita buat dan miliki.

Untuk skala yang lebih kecil, tentu ini bukanlah a very big deal terlebih mungkin dari hari pertama pun mereka sudah mengadopsi cloud. Namun untuk yang konteksnya migrasi ke cloud, I cannot speak for them, sayangnya.

Ditulisan ini kita hanya membahas tentang IaaS dan PaaS, diselanjutnya kita akan explore lebih jauh lagi yakni di Function as a Service (FaaS) alias Serverless computing berikut dengan benefit serta drawbacks nya khususnya untuk Software Developer.

See you very soon on the next cloud!

Oldest comments (0)