Soal 1Pada server yang selalu aktif dan pada serverless, apa bedanya lama program pemrosesannya berjalan?
Server, Serverless, dan Container — Lapisan Server Aplikasi
Artikel ini adalah bagian dari kursus Dasar-Dasar Teknologi Informasi, yang membangun dari nol pengetahuan TI praktis yang minimal kamu butuhkan untuk memprogram dan melakukan vibe coding.
Perbedaannya adalah berapa lama program yang mengerjakan tugasnya tetap berjalan. Diagram membantu kamu membedakan bentuk yang terus berjalan sambil menunggu, bentuk yang berjalan hanya saat ada request, dan container, yang berjalan bersama runtime-nya sendiri di atas satu OS.
Artikel ini membahas 3 bentuk untuk menjalankan lapisan server aplikasi.
Ketiganya adalah selalu aktif, yang membiarkan satu server terus berjalan; serverless, yang berjalan hanya saat ada request; dan container.
Perbedaannya adalah berapa lama program yang mengerjakan tugasnya tetap berjalan.
Karena waktunya berbeda, cara menambah kapasitas saat request bertambah dan hal yang harus kamu siapkan sendiri pun ikut berbeda.
Server yang selalu aktif terus berjalan dan menunggu request
Kamu tidak pernah tahu kapan sebuah request akan datang, jadi kamu menjalankan server.js lebih dahulu dan membiarkannya menunggu sebagai proses (process, yaitu satu program yang sudah dijalankan dan sedang berjalan).
Membiarkan proses itu tetap ada alih-alih mengakhirinya disebut selalu aktif (always-on, yaitu membiarkan program tetap berjalan supaya bisa menerima request kapan saja).
Server listening on port 3000
Press Ctrl+C to stop
Baris pertama menunjukkan bahwa ia sedang mendengarkan request pada nomor port yang kamu pilih.
Seperti kata baris kedua, prosesnya tidak berakhir sampai kamu melakukan tindakan untuk menghentikannya.
| Yang datang pada jam itu | Proses server.js | Yang kembali ke lapisan server Web |
|---|---|---|
| 9:00 kamu menjalankannya | Hidup dan mulai mendengarkan | Belum ada yang kembali |
| 9:05 request ke /reservations | Menerimanya apa adanya dan mencari data reservasi | 3 reservasi |
| 9:06 tidak ada yang datang | Terus menunggu, tidak berakhir | Tidak ada yang kembali |
- Mendengarkan request di port 3000
- Tidak berakhir sampai kamu melakukan tindakan untuk menghentikannya
- Berisi penanganan untuk request yang datang ke /reservations
- Menanyakan jumlah reservasi ke lapisan database
- node kamu pasang dari situs resminya
- Pembaruan OS juga kamu lakukan sendiri
server.js yang paling dalam bukan satu-satunya yang kamu siapkan sendiri.
Komputer yang kamu jalankan terus, OS di atasnya, dan node juga kamu siapkan sendiri.
Inilah perbedaan besarnya dengan serverless, yang dibahas berikutnya.
Di dalam kotak itu ada satu mesin yang kamu siapkan dan kamu jalankan terus.
Prosesnya tidak berakhir selama tidak ada request yang datang; ia menunggu dengan port tetap terbuka.
Selalu aktif berarti tetap berjalan sampai kamu menghentikannya
Server yang selalu aktif adalah server yang kamu jalankan lebih dahulu lalu kamu biarkan menunggu request datang.
Yang menjalankannya adalah node server.js, prosesnya tidak berakhir sampai kamu melakukan tindakan untuk menghentikannya, dan komputer yang kamu jalankan terus, OS, serta node kamu siapkan sendiri.
Serverless menjalankan pemrosesan hanya ketika ada request datang
Pada serverless (yaitu bentuk yang program pemrosesannya berjalan hanya ketika request datang dan berhenti setelah pemrosesannya selesai), kamu tidak menjalankan sendiri proses yang menunggu.
Yang kamu daftarkan adalah satu file seperti handler.js, dan satuan pendaftarannya disebut "fungsi".
- Menerima request yang datang
- Menentukan berapa banyak yang berjalan sekaligus
- OS dan node disiapkan penyedia
- Berhenti setelah pekerjaannya selesai
- Hanya menangani satu request yang datang ke /reservations
- Ada batas atas untuk berapa lama ia boleh berjalan
Satu-satunya yang kamu sentuh adalah handler.js yang paling dalam.
Kotak-kotak di luarnya disiapkan penyedia, dan pembaruan OS serta node juga dilakukan penyedia.
Siapa menyiapkan apa dibahas di artikel tentang on-premises, server sewaan, dan cloud.
Selama belum ada request yang datang, handler.js tidak berjalan.
Runtime disiapkan untuk setiap request dan berhenti begitu jawabannya dikembalikan.
Inilah perbedaannya dengan selalu aktif, yang tetap berjalan sampai kamu menghentikannya.
Serverless berjalan hanya ketika dipanggil
Serverless adalah bentuk yang menjalankan pemrosesan setelah request datang dan menghentikannya begitu jawabannya dikembalikan.
Satu-satunya yang kamu taruh di sana adalah handler.js, dan runtime yang menjalankannya disiapkan penyedia untuk setiap request.
Cara menambah kapasitas saat request bersamaan bertambah pun berbeda
Jumlah request yang datang bersamaan berubah menurut waktunya.
Menyesuaikan diri dengan hal itu disebut scaling (yaitu menambah atau mengurangi jumlah pihak yang mengerjakan sesuai banyaknya request).
Kita mulai dari bentuk ketika 3 request datang bersamaan ke serverless.
Sampai batas jumlah yang ditetapkan penyedia untuk berjalan sekaligus, tidak ada request yang dibiarkan menunggu.
Kamu juga tidak melakukan apa pun untuk menambah kapasitas.
Server yang selalu aktif membutuhkan peran yang sama, tetapi pihak yang mengisinya berbeda.
Yang berubah adalah apakah kamu sendiri yang memutuskan menambah kapasitas atau menyerahkannya ke sistem penyedia.
Setelah jumlahnya bertambah, request dari orang yang sama tidak selalu sampai ke pihak yang sama, jadi stateless menjadi keharusan, yaitu satu kali pemrosesan tidak menyimpan nilai yang diingat dari pemrosesan sebelumnya.
Apakah request kedua bisa membaca nilai yang diingat request pertama itu tergantung di mana kamu menaruh nilai tersebut.
Nilai yang juga kamu pakai pada request berikutnya disimpan ke lapisan database lalu dibaca kembali dari sana.
Hal yang sama berlaku di server yang selalu aktif: begitu kamu menambah proses, nilainya tidak tersisa di proses yang lain.
Cara menambah kapasitas, dan tempat menaruh nilai
Ketika request bersamaan bertambah, pada selalu aktif kamu sendiri yang menambah kapasitas, sedangkan pada serverless sistem penyedia yang melakukannya untuk kamu.
Setelah jumlahnya bertambah, dua request dari orang yang sama belum tentu dijawab pihak yang sama, jadi nilai yang ingin kamu pakai lagi ditaruh di lapisan database, bukan di memori lokal.
Container berjalan di atas satu OS, dan kamu memilih di antara ketiganya berdasarkan apakah kamu perlu selalu aktif
Bentuk ketiga, yaitu container (format yang membungkus aplikasi, runtime-nya, dan file yang dibutuhkannya menjadi satu lalu menjalankannya di komputer lain dengan susunan yang sama), berjalan selama waktu yang sama dengan server yang selalu aktif.
Yang berbeda adalah runtime-nya tidak dipasang di komputer, melainkan dibungkus bersama aplikasinya.
- Tiga komputer
- Tiga OS
- Node.js 18 / Python 3.11 / Node.js 20 dipasang di mesin terpisah
- Satu proses
- Node.js 18
- server.js
- Satu proses
- Python 3.11
- batch.py
- Satu proses
- Node.js 20
- admin.js
OS-nya satu, dan setiap container berjalan di atasnya sebagai satu proses.
Runtime-nya berada terpisah di dalam masing-masing container, jadi apa pun yang dipakai container di sebelahnya tidak berpengaruh.
Bagian perangkat keras yang dipakai untuk menjalankan sesuatu, seperti CPU dan memori, disebut resource.
Yang atas menjalankan tiga OS, sedangkan yang bawah berbagi satu OS, jadi perangkat keras yang sama bisa memuat lebih banyak aplikasi.
Kamu bisa menjalankan lebih banyak di jumlah mesin yang sama, dan biaya untuk terus menjalankannya pun lebih kecil.
Tidak ada OS baru yang dinyalakan, jadi waktu sampai ia mulai berjalan juga lebih singkat.
Satu OS hanya bisa memuat satu node, tetapi dengan container kamu bisa menjalankan keduanya berdampingan dengan node yang terpisah.
Runtime-nya terpisah untuk setiap aplikasi, jadi menaikkan versi salah satunya tidak mengganggu yang lain, yang tetap berjalan.
Kumpulan file yang sudah dibungkus itu disebut container image (aplikasi, runtime, dan file yang dibutuhkannya yang dibungkus menjadi satu), dan Docker adalah software paling dikenal untuk membuat lalu menjalankannya.
Pihak yang memakainya cukup menerima image ini lalu menjalankannya.
Walaupun tempat menjalankannya berubah, yang dijalankan adalah satu image yang sama.
Kamu tidak perlu memasang runtime lagi di server publik, jadi kamu bisa merilis susunan yang sama dengan yang berjalan di mesin kamu sendiri.
Garis pemisah ketika kamu memilih adalah apakah ia harus tetap berjalan ketika tidak ada request.
Garis pemisah lainnya adalah seberapa banyak yang bisa kamu muat di satu mesin.
Pada dua garis atas, prosesnya tetap berjalan walaupun tidak ada request.
Keduanya dibedakan oleh apakah runtime-nya dipasang di komputer atau dibungkus bersama aplikasinya.
Dua bentuk yang selalu aktif tetap berjalan termasuk selama waktu ketika tidak ada request yang datang.
Pada serverless, yang dihitung hanyalah lama ia berjalan dan berapa kali ia dipanggil.
Selama request masih jarang, perbedaan itu langsung terasa.
Pilih berdasarkan berapa lama ia tetap berjalan
Pemilahan pertamanya adalah apakah ia harus tetap berjalan ketika tidak ada request.
Kalau tidak perlu, pilih serverless; kalau perlu, pilih server yang selalu aktif atau container.
Container berbagi satu OS antar aplikasi, jadi kamu bisa memuat banyak di perangkat keras yang sama dan menekan biaya untuk terus menjalankannya.
Kamu juga memilih container ketika kamu ingin susunan di mesin kamu sendiri sama dengan susunan di server publik.
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Kapan kamu memakai container?
Soal 3Apa yang kamu lakukan ketika nilai yang kamu taruh di memori di tengah pemrosesan ingin kamu pakai juga pada request berikutnya?