Jalur Pembelajaran: Mengubah monolith menjadi aplikasi GKE - Memahami monolith


Selamat datang di tutorial pertama dalam seri yang menunjukkan cara mengambil monolit (atau aplikasi monolitik), memisahkannya menjadi modul, membuat container untuk modul, dan men-deploy image container ke cluster Google Kubernetes Engine (GKE). Jangan khawatir jika Anda tidak memahami salah satu istilah ini. Anda akan mempelajari artinya saat Anda melanjutkan seri ini.

Jalur pembelajaran terdiri dari tutorial berikut:

  1. Ringkasan
  2. Memahami monolith (tutorial ini)
  3. Modularisasi monolit
  4. Menyiapkan aplikasi modular untuk di-build dalam container
  5. Memasukkan aplikasi modular ke dalam container
  6. Men-deploy aplikasi ke cluster GKE

Dalam tutorial ini, Anda akan mempelajari monolith dengan melakukan langkah-langkah berikut:

  1. Menyiapkan aplikasi di komputer lokal Anda.
  2. Menjelajahi fiturnya di browser Anda.
  3. Meninjau kode.

Apa itu monolith?

Sebelum Anda menjalankan sampel monolit Cymbal Books, penting untuk memahami terlebih dahulu apa itu monolit.

Monolit adalah aplikasi yang semua komponennya saling terhubung, dan tidak dapat diskalakan secara independen. Misalnya, jika sejumlah pengguna tiba-tiba mengunjungi halaman login aplikasi, Anda tidak dapat menskalakan hanya komponen login secara terpisah. Sebagai gantinya, Anda perlu menskalakan seluruh aplikasi, termasuk komponen yang tidak terkait, seperti katalog produk atau sistem pemrosesan pesanan.

Sebaliknya, saat aplikasi dipecah menjadi modul independen, setiap modul dapat diskalakan secara terpisah berdasarkan kebutuhan resource-nya. Jika Anda menghosting aplikasi modular di cluster GKE, GKE bahkan dapat mengotomatiskan penskalaan untuk Anda.

Istilah monolitik tidak berarti kode yang tidak teratur. Monolit dapat terstruktur dengan baik, dan komponennya dapat diimplementasikan di area kode yang berbeda. Yang membedakan monolit adalah bahwa komponen ini tidak dapat berjalan atau diskalakan secara independen.

Biaya

Anda dapat menyelesaikan tutorial ini tanpa dikenai biaya apa pun. Namun, mengikuti langkah-langkah dalam tutorial terakhir dalam seri ini akan menimbulkan biaya pada akunGoogle Cloud Anda. Biaya dimulai saat Anda mengaktifkan GKE dan men-deploy aplikasi Cymbal Books ke cluster GKE. Biaya ini mencakup biaya per cluster untuk GKE, seperti yang diuraikan di halaman Harga, dan biaya untuk menjalankan VM Compute Engine.

Untuk menghindari biaya yang tidak perlu, pastikan Anda menonaktifkan GKE atau menghapus project setelah menyelesaikan tutorial ini.

Sebelum memulai

Tutorial ini memerlukan Python versi 3.13 di mesin lokal Anda. Untuk memeriksa versi Python yang ada di komputer Anda, jalankan perintah ini:

python3 --version

Jika versi Python Anda lebih lama dari 3.13, download dan instal versi terbaru dari situs resmi Python.

Menyiapkan lingkungan Anda

Dalam seri tutorial ini, Anda menjalankan berbagai versi aplikasi di berbagai tempat:

  • Versi monolitik di komputer lokal Anda
  • Versi modular di komputer lokal Anda
  • Versi dalam container di Cloud Shell, lalu di cluster GKE

Di bagian ini, Anda menyiapkan lingkungan virtual di komputer lokal tempat monolit dapat berjalan.

Mendownload kode

  1. Buka terminal di mesin lokal Anda.

  2. Buat clone repositori GitHub tutorial ke komputer lokal Anda:

    git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
    

    Folderkubernetes-engine-samples/quickstarts/monolith-to-microservices berisi tiga folder berikut: monolith/, modular/, dan containerized/. Dalam tutorial ini, Anda akan berfokus secara eksklusif pada file di folder monolith/.

Buat dan aktifkan lingkungan virtual

Lingkungan virtual menyediakan ruang terisolasi untuk menjalankan aplikasi. Lingkungan ini mencegah library Python yang perlu Anda instal untuk aplikasi agar tidak mengganggu project Python lain di sistem Anda.

Ikuti langkah-langkah berikut untuk membuat dan mengaktifkan lingkungan virtual:

  1. Di terminal yang Anda buka di bagian sebelumnya, buka folder berikut di repositori yang Anda clone ke mesin Anda sebelumnya:

    cd kubernetes-engine-samples/quickstarts/monolith-to-microservices
    
  2. Buat lingkungan virtual bernama book-review-env:

    python3 -m venv book-review-env
    

    Sebaiknya buat lingkungan virtual karena di area ini Anda dapat menjalankan aplikasi secara terpisah. Hal ini memastikan bahwa dependensi dan konfigurasi aplikasi tidak berkonflik dengan software atau library lain di sistem Anda.

  3. Aktifkan lingkungan virtual menggunakan perintah untuk sistem operasi Anda:

    macOS dan Linux

    source book-review-env/bin/activate
    

    Windows

    book-review-env\Scripts\activate
    
  4. Instal dependensi Python untuk monolith. Dependensi adalah library Python eksternal yang diandalkan aplikasi agar berfungsi dengan baik. Library ini tercantum dalam file requirements.txt, dan perintah berikut menginstal semuanya di lingkungan virtual Anda:

    pip install -r monolith/requirements.txt
    

Menjalankan dan menjelajahi Cymbal Books di browser

Aplikasi Cymbal Books sengaja dibuat sederhana dan memiliki fitur berikut:

  • Halaman beranda yang menampilkan semua buku di perpustakaan.
  • Halaman yang menampilkan detail tentang buku.
  • Tombol di halaman detail yang, saat diklik, menampilkan ulasan buku.
  • Kemampuan untuk menampilkan gambar sampul buku.

Halaman beranda menampilkan tiga buku, dan tombol Lihat Detail muncul di setiap buku:

Halaman beranda aplikasi ulasan buku

Setelah lingkungan virtual aktif dan dependensi aplikasi diinstal di lingkungan tersebut, jalankan aplikasi dengan mengikuti langkah-langkah berikut:

  1. Di komputer lokal Anda, buka direktori monolith:

    cd monolith/
    
  2. Mulai aplikasi:

    python3 mono.py
    
  3. Buka browser web Anda, lalu buka halaman beranda aplikasi: http://127.0.0.1:8080.

  4. Untuk membuka halaman detail buku, klik Lihat Detail. Halaman detail memberikan informasi selengkapnya tentang buku, seperti penulis dan tahun penerbitannya.

  5. Untuk menampilkan daftar ulasan buku, di halaman detail, klik Tampilkan Ulasan. Gambar berikut menunjukkan halaman detail buku untuk buku Zephyr's Timepiece dan ulasan buku pertama:

    Diagram yang menampilkan detail dan ulasan buku untuk sebuah buku

Jelajahi file di folder /monolith

Luangkan waktu untuk memeriksa file di folder /monolith:

monolith/
├── mono.py
├── data/
│   ├── book-1.json
│   ├── book-2.json
│   ├── book-3.json
│   ├── reviews-1.json
│   ├── reviews-2.json
│   └── reviews-3.json
├── images/
│   ├── fungi_frontier.jpg
│   ├── melodic_mechanics.jpg
│   └── zephyrs_timepiece.jpg
├── static/
│   ├── styles_for_details.css
│   └── styles_for_home.css
└── templates/
    ├── book_details.html
    └── home.html

Folder dan file utama adalah sebagai berikut:

  • Folder images/ berisi gambar sampul buku berikut, yang ditampilkan di aplikasi:

    • fungi_frontier.jpg
    • melodic_mechanics.jpg
    • zephyrs_timepiece.jpg
  • Folder data/ berisi file JSON berikut. File ini berisi ulasan tiga buku di library Cymbal Books, dan detail tentang setiap buku:

    • reviews-1.json, reviews-2.json, reviews-3.json
    • book-1.json, book-2.json, book-3.json

Meskipun aplikasi dunia nyata sering menggunakan database, menyimpan data aplikasi dalam file JSON akan menyederhanakan penerapannya. Aplikasi contoh Cymbal Book menggunakan file JSON sehingga Anda tidak perlu menangani kode yang rumit. Sebagai gantinya, Anda dapat berfokus pada tujuan utama seri tutorial ini, yaitu mempelajari cara memodularisasi dan mengontainerisasi monolith.

Anda dapat mengabaikan folder berikut karena file di dalamnya penting untuk tata letak dan desain aplikasi, tetapi tidak relevan secara langsung dengan logika aplikasi:

  • static/: berisi file CSS yang menentukan gaya aplikasi.
  • templates/: berisi file HTML yang menentukan tata letak dan konten aplikasi.

Memahami monolith sebagai aplikasi Flask

Monolit dalam tutorial ini dibangun menggunakan Flask, yang merupakan library Python untuk membangun aplikasi web. Namun, Flask biasanya tidak digunakan di lingkungan produksi karena tidak mendukung konkurensi, yang dapat menyebabkan hambatan performa saat beban berat. Aplikasi Flask juga tidak memiliki fitur penanganan error dan skalabilitas yang andal.

Aplikasi Cymbal Books menggunakan Flask karena kesederhanaan dan penyiapannya yang minimal membuatnya lebih mudah memahami konsep modularisasi dan containerisasi. Untuk aplikasi tingkat produksi yang menggunakan Python, pertimbangkan alternatif untuk Flask seperti FastAPI atau Django. Anda juga dapat menggunakan framework yang disesuaikan untuk bahasa lain, seperti Spring Boot untuk Java atau Express.js untuk Node.js. Framework ini dapat menawarkan kemampuan konkurensi, skalabilitas, dan siap produksi yang lebih baik untuk memenuhi tuntutan aplikasi dunia nyata.

Periksa mono.py

Semua logika monolith terdapat dalam satu file bernama mono.py. File ini membuat aplikasi Flask. Aplikasi Flask berjalan di dalam server web, memproses URL tertentu, yang disebut endpoint, dan merespons permintaan yang dibuat ke URL tersebut. Saat seseorang meminta salah satu URL ini—baik dengan membukanya di browser web atau membuat permintaan secara terprogram—Flask menjalankan bagian kode yang sesuai untuk menangani permintaan tersebut.

Screenshot berikut menampilkan file mono.py. Kotak tersebut menandai handler rute aplikasi. Meskipun satu handler melayani halaman beranda yang ditampilkan kepada pengguna, handler lainnya terutama digunakan untuk komunikasi antar-modul—mengirimkan data dalam format JSON atau file gambar statis. Detail selengkapnya tentang endpoint ini akan diberikan di bagian berikutnya.

Diagram yang menampilkan kotak di sekitar berbagai pengendali rute dalam kode monolitik

Dalam screenshot, kotak menyoroti pengendali rute aplikasi. Handler rute terdiri dari dua bagian:

  • Baris @app.route() yang menentukan pola URL (seperti /book/<id>/reviews).
  • Fungsi yang berjalan saat endpoint dipanggil.

Endpoint adalah URL yang cocok dengan pola yang ditentukan di baris @app.route().

Misalnya, saat pengguna mengklik Tampilkan Ulasan di halaman detail buku, aplikasi membuat permintaan ke http://localhost:8080/book/1/reviews. Penangan rute ulasan buku merespons permintaan ini dengan melakukan langkah-langkah berikut:

  1. Mengenali bahwa URL ini cocok dengan polanya /book/<id>/reviews.
  2. Mendapatkan ulasan untuk buku 1 dari file JSON.
  3. Mengirimkan ulasan tersebut kembali ke frontend dalam format JSON.

Komponen detail buku kemudian menampilkan ulasan ini dalam bentuk yang dapat dibaca manusia di halaman web. Monolit Cymbal Books menggunakan library Python bernama Flask untuk menyederhanakan penerapan handler rute. Dalam tutorial berikutnya, Anda akan melihat bahwa Flask dan handler rute memainkan peran penting saat Anda mempelajari cara mengubah aplikasi monolitik menjadi aplikasi modular.

Alasan pentingnya endpoint monolit untuk modularisasi

Endpoint memainkan peran penting dalam aplikasi Flask, termasuk aplikasi Cymbal Books. Namun, kepentingannya melampaui desain monolitik karena memahami endpoint sangat penting untuk memecah aplikasi menjadi modul independen. Berikut alasannya:

  • Fitur inti: Endpoint mengimplementasikan fitur utama aplikasi, seperti menampilkan halaman atau mengambil data. Setiap fitur dikaitkan dengan endpoint tertentu.
  • Modularisasi: Endpoint bertindak sebagai batas alami, atau garis patahan, untuk membagi aplikasi menjadi modul yang lebih kecil. Seperti yang akan Anda lihat dalam tutorial berikutnya, setiap modul dalam aplikasi versi modular sesuai dengan fitur dengan endpointnya sendiri.
  • Komunikasi: Dalam desain modular, endpoint memungkinkan modul otonom untuk saling berkomunikasi. Memahami cara penerapan endpoint di mono.py meletakkan dasar untuk memodularisasi aplikasi Cymbal Books menjadi modul independen dalam tutorial berikutnya.

Menguji handler rute monolit

Untuk melihat jenis data yang ditampilkan setiap pengendali rute, buka endpoint berikut di browser Anda:

  • Handler rute halaman beranda: Buka http://localhost:8080/ untuk melihat halaman HTML lengkap yang menampilkan katalog buku.
  • Handler rute detail buku: Buka http://localhost:8080/book/1 untuk melihat halaman HTML yang menampilkan detail tentang buku tertentu. Halaman mengambil data JSON tentang buku dari server dan menampilkannya dalam format yang dapat dibaca manusia menggunakan template HTML. Coba lihat detail buku lain dengan mengubah nomor ID (1, 2, atau 3) di URL.
  • Handler rute ulasan buku: Buka http://localhost:8080/book/3/reviews untuk melihat data JSON ulasan buku. Data ini diproses ke dalam format yang dapat dibaca saat Anda mengklik Show Reviews di halaman detail buku untuk Melodic Mechanics.
  • Penanganan rute gambar: Buka http://localhost:8080/images/fungi_frontier.jpg untuk melihat file gambar. Halaman beranda dan halaman detail buku memanggil endpoint ini untuk menampilkan gambar sampul buku.

Ringkasan

Dalam tutorial ini, Anda akan menyiapkan dan menjalankan aplikasi Cymbal Books monolitik. Kemudian, Anda akan mempelajari bahwa monolith diimplementasikan sebagai aplikasi Flask, yang memproses URL tertentu, yang disebut endpoint, dan merespons permintaan yang dibuat ke URL tersebut.

Langkah berikutnya

Dalam tutorial berikutnya, Membuat monolit menjadi modular, Anda akan melihat cara memecah monolit menjadi modul independen.