Wednesday

18-06-2025 Vol 19

Run Your Dockerized Microservices Voting App

Menjalankan Aplikasi Voting Microservices Ter-Dockerisasi Anda: Panduan Lengkap

Di era arsitektur cloud-native, microservices dan containerization adalah dua pilar penting. Docker telah menjadi standar de facto untuk containerization, memungkinkan pengembang untuk mengemas aplikasi dan dependensinya ke dalam unit portabel. Dalam panduan ini, kita akan membahas langkah demi langkah cara menjalankan aplikasi voting microservices ter-Dockerisasi. Kita akan membahas persiapan lingkungan, penyusunan dan menjalankan container, serta verifikasi fungsionalitas aplikasi. Panduan ini dirancang untuk pengembang dengan pengalaman menengah dalam Docker dan microservices.

Daftar Isi

  1. Pendahuluan
    • Apa itu Microservices?
    • Manfaat Microservices
    • Mengapa Docker untuk Microservices?
    • Gambaran Umum Aplikasi Voting
  2. Persiapan Lingkungan
    • Instalasi Docker
    • Instalasi Docker Compose (Opsional tetapi Direkomendasikan)
  3. Memahami Arsitektur Aplikasi Voting
    • Layanan Front-End
    • Layanan Voting
    • Layanan Hasil
    • Database (Redis dan PostgreSQL)
    • Message Queue (RabbitMQ)
  4. Membangun dan Menjalankan Container Docker
    • Mengkloning Repository Aplikasi Voting
    • Membangun Images Docker
    • Menggunakan Docker Compose untuk Menjalankan Aplikasi
    • Menjalankan Container Secara Manual (Jika Tidak Menggunakan Docker Compose)
  5. Verifikasi Aplikasi Voting
    • Mengakses Antarmuka Pengguna Front-End
    • Melakukan Voting
    • Memeriksa Hasil Voting
    • Memverifikasi Log Container
  6. Skalabilitas dan Pemantauan
    • Menskalakan Layanan dengan Docker Compose
    • Memantau Container dengan Docker Tools
    • Pertimbangan untuk Pemantauan Produksi
  7. Penyelesaian Masalah Umum
    • Koneksi Database Gagal
    • Aplikasi Tidak Bisa Diakses
    • Kesalahan Log
    • Masalah Kinerja
  8. Keamanan
    • Best Practices Keamanan Docker
    • Mengamankan Microservices
    • Manajemen Rahasia
  9. Peningkatan Lanjutan
    • Orkestrasi dengan Kubernetes
    • Implementasi CI/CD
    • Menggunakan Service Mesh
  10. Kesimpulan

1. Pendahuluan

Apa itu Microservices?

Microservices adalah pendekatan arsitektur yang menstruktur aplikasi sebagai kumpulan layanan kecil yang otonom, dimodelkan di sekitar domain bisnis. Setiap layanan berjalan dalam prosesnya sendiri dan berkomunikasi dengan layanan lain melalui API yang ringan, seringkali melalui HTTP/REST atau message queues. Konsep ini berkebalikan dengan pendekatan monolitik, di mana seluruh aplikasi dibangun sebagai satu unit.

Manfaat Microservices

  1. Skalabilitas: Setiap layanan dapat diskalakan secara independen, memungkinkan penggunaan sumber daya yang lebih efisien.
  2. Independensi: Setiap layanan dapat dikembangkan, diterapkan, dan diperbarui secara independen, mengurangi risiko penerapan.
  3. Ketahanan: Kegagalan satu layanan tidak memengaruhi layanan lain.
  4. Teknologi yang beragam: Tim dapat memilih teknologi yang paling sesuai untuk setiap layanan.
  5. Organisasi: Microservices mempromosikan organisasi yang lebih baik di sekitar domain bisnis.

Mengapa Docker untuk Microservices?

Docker menyediakan platform yang konsisten dan ringan untuk mengemas, mendistribusikan, dan menjalankan microservices. Manfaat menggunakan Docker untuk microservices meliputi:

  1. Konsistensi: Docker memastikan bahwa aplikasi berjalan dengan cara yang sama di lingkungan apa pun.
  2. Isolasi: Docker mengisolasi microservices satu sama lain, mencegah konflik dependensi.
  3. Portabilitas: Docker memungkinkan microservices untuk dipindahkan dengan mudah di antara lingkungan.
  4. Efisiensi: Docker lebih efisien daripada mesin virtual tradisional karena berbagi kernel sistem operasi.
  5. Pengulangan: Docker memungkinkan pembuatan lingkungan yang berulang dan dapat diprediksi.

Gambaran Umum Aplikasi Voting

Aplikasi voting kita akan terdiri dari beberapa microservices yang berkolaborasi untuk memungkinkan pengguna memberikan suara pada dua opsi, menampilkan hasil, dan mengelola data. Secara khusus, ini akan terdiri dari:

  • voting-app: Antarmuka pengguna web yang memungkinkan pengguna memilih.
  • result-app: Aplikasi web yang menampilkan hasil voting.
  • vote: Layanan yang menerima voting dari aplikasi voting, menyimpan data voting ke database (Redis), dan menempatkan pesan ke message queue (RabbitMQ).
  • worker: Layanan yang menggunakan pesan dari RabbitMQ dan memperbarui hasil di database utama (PostgreSQL).
  • redis: Database in-memory yang digunakan untuk menyimpan voting sementara.
  • db: Database PostgreSQL yang menyimpan hasil voting permanen.
  • rabbitmq: Message queue untuk komunikasi asinkron antara layanan.

2. Persiapan Lingkungan

Instalasi Docker

Sebelum kita mulai, kita perlu memastikan bahwa Docker terinstal di sistem kita. Ikuti langkah-langkah berikut untuk menginstal Docker:

  1. Unduh Docker: Kunjungi situs web Docker (https://www.docker.com/products/docker-desktop) dan unduh versi Docker Desktop yang sesuai untuk sistem operasi Anda.
  2. Instal Docker: Jalankan installer yang diunduh dan ikuti petunjuk di layar untuk menginstal Docker.
  3. Verifikasi Instalasi: Buka terminal atau command prompt dan jalankan perintah berikut:
docker --version

Anda akan melihat versi Docker yang diinstal, yang memverifikasi bahwa Docker telah diinstal dengan benar.

Instalasi Docker Compose (Opsional tetapi Direkomendasikan)

Docker Compose adalah alat untuk mendefinisikan dan menjalankan aplikasi multi-container Docker. Ini menggunakan file YAML untuk mengonfigurasi layanan aplikasi Anda. Walaupun menjalankan container secara manual dimungkinkan, Docker Compose menyederhanakan proses, terutama untuk aplikasi dengan banyak layanan.

  1. Periksa Apakah Docker Compose Sudah Terinstal: Sebagian besar instalasi Docker Desktop menyertakan Docker Compose secara default. Anda dapat memverifikasi instalasi dengan menjalankan:
docker-compose --version

Jika Docker Compose tidak diinstal, ikuti langkah-langkah di bawah:

  1. Unduh Docker Compose: Kunjungi halaman GitHub Docker Compose (https://github.com/docker/compose/releases) dan unduh versi yang sesuai untuk sistem operasi Anda.
  2. Instal Docker Compose:
    • Linux:
      sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
      sudo chmod +x /usr/local/bin/docker-compose
    • macOS: Docker Desktop untuk Mac menyertakan Docker Compose.
    • Windows: Docker Desktop untuk Windows menyertakan Docker Compose.
  3. Verifikasi Instalasi: Jalankan perintah berikut:
docker-compose --version

Anda akan melihat versi Docker Compose yang diinstal.

3. Memahami Arsitektur Aplikasi Voting

Sebelum kita menjalankan aplikasi, mari kita pahami arsitekturnya secara detail:

Layanan Front-End (voting-app)

Aplikasi voting bertindak sebagai antarmuka pengguna untuk aplikasi. Pengguna mengakses aplikasi ini melalui browser web untuk memilih salah satu dari dua opsi. Aplikasi ini mengirimkan suara ke layanan Voting.

Layanan Voting (vote)

Layanan voting bertanggung jawab untuk menerima voting dari aplikasi Front-End. Setelah menerima suara, layanan ini:

  1. Menyimpan suara sementara ke database Redis.
  2. Memasukkan pesan ke antrean pesan RabbitMQ, yang menandakan suara baru telah diberikan.

Layanan Hasil (result-app)

Layanan hasil adalah aplikasi web yang menampilkan hasil voting. Ini secara teratur mengambil data dari database PostgreSQL dan memperbarui tampilan dengan hasil terbaru.

Database (Redis dan PostgreSQL)

  1. Redis: Redis adalah database in-memory yang digunakan untuk menyimpan sementara voting sebelum diproses oleh worker. Memori cepat memungkinkan layanan Voting menerima dan menyimpan voting dengan cepat.
  2. PostgreSQL: PostgreSQL adalah database utama yang digunakan untuk menyimpan hasil voting permanen. Worker memperbarui database ini berdasarkan pesan yang diterima dari RabbitMQ.

Message Queue (RabbitMQ)

RabbitMQ bertindak sebagai message broker, menerima pesan dari layanan Voting dan mengantrekannya untuk diproses oleh worker. Arsitektur asinkron ini memastikan bahwa aplikasi voting tidak memblokir saat memproses suara, memungkinkan respons yang lebih baik.

Worker

Worker mengkonsumsi pesan dari RabbitMQ dan memperbarui hasil di database PostgreSQL. Ini membantu untuk memisahkan tugas penerimaan suara dari aplikasi voting dengan tugas pembaruan basis data utama.

4. Membangun dan Menjalankan Container Docker

Mengkloning Repository Aplikasi Voting

Langkah pertama adalah mengkloning repository aplikasi voting dari GitHub. Buka terminal atau command prompt dan jalankan perintah berikut:

git clone [URL repository aplikasi voting]
cd [nama direktori repository]

Ganti [URL repository aplikasi voting] dengan URL sebenarnya dari repository GitHub. Ganti [nama direktori repository] dengan nama direktori hasil kloning.

Membangun Images Docker

Setelah mengkloning repository, kita perlu membangun images Docker untuk setiap layanan. Biasanya, setiap layanan akan memiliki Dockerfile-nya sendiri. File-file ini berisi instruksi tentang cara membangun image Docker.

Navigasikan ke direktori yang berisi Dockerfile untuk setiap layanan dan jalankan perintah berikut:

docker build -t [nama image] .

Ganti [nama image] dengan nama yang ingin Anda berikan untuk image, seperti voting-app, result-app, vote, dan worker.

Contoh:

docker build -t voting-app ./voting-app
docker build -t result-app ./result-app
docker build -t vote ./vote
docker build -t worker ./worker

Menggunakan Docker Compose untuk Menjalankan Aplikasi

Docker Compose menyederhanakan proses menjalankan aplikasi multi-container. Repository biasanya berisi file docker-compose.yml yang mendefinisikan layanan, dependensi, dan konfigurasi jaringan.

Untuk menjalankan aplikasi menggunakan Docker Compose, navigasikan ke direktori yang berisi file docker-compose.yml dan jalankan perintah berikut:

docker-compose up -d

Opsi -d menjalankan container di background.

Docker Compose akan membangun image (jika belum ada), membuat dan menjalankan container, dan mengonfigurasi jaringan. Ini akan otomatis menyiapkan semua dependensi yang diperlukan dan menghubungkan layanan bersama-sama.

Menjalankan Container Secara Manual (Jika Tidak Menggunakan Docker Compose)

Jika Anda memilih untuk tidak menggunakan Docker Compose, Anda dapat menjalankan container secara manual menggunakan perintah docker run. Ini membutuhkan lebih banyak konfigurasi dan manajemen.

Contoh:

Pertama, jalankan database Redis:

docker run -d --name redis redis:latest

Selanjutnya, jalankan database PostgreSQL:

docker run -d --name db -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=postgres postgres:latest

Jalankan RabbitMQ:

docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management

Jalankan layanan voting:

docker run -d --name vote --link redis:redis --link rabbitmq:rabbitmq vote

Jalankan worker:

docker run -d --name worker --link rabbitmq:rabbitmq --link db:db worker

Jalankan aplikasi front-end (voting-app):

docker run -d --name voting-app -p 8080:80 --link vote:vote voting-app

Jalankan aplikasi hasil (result-app):

docker run -d --name result-app -p 5001:80 --link db:db result-app

Penting: Saat menjalankan container secara manual, Anda perlu memastikan bahwa setiap container terhubung dengan benar ke dependensinya menggunakan opsi --link. Selain itu, Anda mungkin perlu mengonfigurasi variabel lingkungan untuk menghubungkan layanan dengan benar.

5. Verifikasi Aplikasi Voting

Setelah container berjalan, kita dapat memverifikasi bahwa aplikasi berfungsi dengan benar.

Mengakses Antarmuka Pengguna Front-End

Buka browser web dan kunjungi http://localhost:8080. Anda akan melihat antarmuka aplikasi voting.

Melakukan Voting

Pilih salah satu dari dua opsi dan klik tombol “Vote”. Suara Anda akan direkam dan dikirim ke layanan Voting.

Memeriksa Hasil Voting

Buka browser web dan kunjungi http://localhost:5001. Anda akan melihat hasil voting yang ditampilkan.

Memverifikasi Log Container

Anda dapat memeriksa log container untuk memastikan bahwa tidak ada kesalahan dan semua layanan beroperasi dengan benar.

Untuk melihat log container tertentu, jalankan perintah berikut:

docker logs [nama container]

Ganti [nama container] dengan nama container yang ingin Anda periksa, seperti voting-app, result-app, vote, worker, redis, db, atau rabbitmq.

Contoh:

docker logs voting-app
docker logs result-app
docker logs vote
docker logs worker

6. Skalabilitas dan Pemantauan

Menskalakan Layanan dengan Docker Compose

Salah satu manfaat menggunakan Docker dan microservices adalah kemudahan skalabilitas. Dengan Docker Compose, Anda dapat dengan mudah menskalakan layanan dengan menjalankan perintah berikut:

docker-compose scale [nama layanan]=[jumlah replika]

Ganti [nama layanan] dengan nama layanan yang ingin Anda skala, dan [jumlah replika] dengan jumlah replika yang ingin Anda jalankan.

Contoh:

docker-compose scale vote=3
docker-compose scale worker=5

Ini akan menskalakan layanan vote menjadi 3 replika dan layanan worker menjadi 5 replika.

Memantau Container dengan Docker Tools

Docker menyediakan berbagai alat untuk memantau kinerja container.

  1. docker stats: Menampilkan statistik penggunaan sumber daya langsung untuk container.
  2. docker top: Menampilkan proses yang berjalan di dalam container.
  3. docker inspect: Menampilkan informasi konfigurasi terperinci tentang container.

Contoh:

docker stats
docker top [nama container]
docker inspect [nama container]

Pertimbangan untuk Pemantauan Produksi

Untuk pemantauan produksi, Anda harus mempertimbangkan untuk menggunakan alat pemantauan yang lebih komprehensif, seperti:

  1. Prometheus: Sistem pemantauan dan pemberian peringatan sumber terbuka.
  2. Grafana: Platform visualisasi data.
  3. ELK Stack (Elasticsearch, Logstash, Kibana): Solusi manajemen log.

7. Penyelesaian Masalah Umum

Koneksi Database Gagal

Jika layanan tidak dapat terhubung ke database, periksa hal berikut:

  1. Pastikan container database berjalan.
  2. Verifikasi nama host dan port database yang benar dikonfigurasi dalam variabel lingkungan layanan.
  3. Periksa aturan firewall apa pun yang dapat memblokir koneksi ke database.

Aplikasi Tidak Bisa Diakses

Jika Anda tidak dapat mengakses aplikasi di browser web, periksa hal berikut:

  1. Pastikan container aplikasi berjalan.
  2. Verifikasi port yang benar dipetakan dalam konfigurasi Docker.
  3. Periksa aturan firewall apa pun yang dapat memblokir akses ke port.

Kesalahan Log

Periksa log container untuk kesalahan apa pun. Kesalahan log dapat memberikan petunjuk berharga tentang penyebab masalah.

Masalah Kinerja

Jika aplikasi berkinerja lambat, periksa hal berikut:

  1. Penggunaan CPU dan memori container.
  2. Latensi jaringan antar layanan.
  3. Kueri database yang lambat.

8. Keamanan

Best Practices Keamanan Docker

  1. Gunakan images dasar resmi: Selalu gunakan images dasar resmi dari Docker Hub atau repositori terpercaya lainnya.
  2. Jaga agar images tetap kecil: Hapus dependensi yang tidak perlu dan kurangi ukuran image Anda.
  3. Gunakan pengguna non-root: Jangan jalankan container sebagai pengguna root. Buat pengguna khusus dengan hak istimewa minimal.
  4. Gunakan Docker Content Trust: Verifikasi integritas dan sumber image menggunakan Docker Content Trust.
  5. Pindai images untuk kerentanan: Gunakan alat pemindaian kerentanan untuk mengidentifikasi dan memperbaiki kerentanan dalam images Docker Anda.

Mengamankan Microservices

  1. Gunakan autentikasi dan otorisasi: Implementasikan autentikasi dan otorisasi untuk melindungi microservices Anda dari akses tidak sah.
  2. Enkripsi komunikasi: Gunakan TLS/SSL untuk mengenkripsi komunikasi antara microservices.
  3. Batasi akses jaringan: Batasi akses jaringan ke microservices Anda hanya ke layanan yang diperlukan.
  4. Auditing: Implementasikan audit untuk melacak aktivitas di microservices Anda.

Manajemen Rahasia

Jangan simpan rahasia (misalnya, kata sandi, kunci API) langsung dalam kode Anda atau dalam images Docker. Gunakan mekanisme manajemen rahasia, seperti:

  1. Docker Secrets: Menyimpan dan mengelola informasi sensitif dengan aman.
  2. HashiCorp Vault: Alat untuk mengelola rahasia, mengenkripsi data, dan mengamankan akses ke informasi sensitif.
  3. AWS Secrets Manager, Azure Key Vault, Google Cloud Secret Manager: Layanan manajemen rahasia berbasis cloud.

9. Peningkatan Lanjutan

Orkestrasi dengan Kubernetes

Kubernetes adalah sistem orkestrasi container sumber terbuka untuk mengotomatiskan penyebaran, penskalaan, dan pengelolaan aplikasi ter-containerisasi. Meskipun Docker Compose cocok untuk pengembangan dan pengujian, Kubernetes lebih cocok untuk lingkungan produksi.

Migrasi aplikasi voting ke Kubernetes melibatkan pendefinisian Pods, Deployments, dan Services untuk setiap microservice. Kubernetes menyediakan fitur lanjutan seperti autoscaling, self-healing, dan rolling updates.

Implementasi CI/CD

Continuous Integration/Continuous Deployment (CI/CD) mengotomatiskan proses pembangunan, pengujian, dan penyebaran aplikasi. Alur CI/CD dapat secara otomatis membangun images Docker, menjalankan pengujian, dan menyebarkan aplikasi ke lingkungan Docker atau Kubernetes.

Alat CI/CD populer meliputi:

  1. Jenkins: Server otomatisasi sumber terbuka.
  2. GitLab CI: Bagian dari GitLab, platform kolaborasi DevOps.
  3. CircleCI: Platform CI/CD berbasis cloud.
  4. GitHub Actions: Fitur CI/CD yang terintegrasi dengan GitHub.

Menggunakan Service Mesh

Service Mesh adalah lapisan infrastruktur khusus untuk mengelola komunikasi layanan ke layanan. Ini menyediakan fitur seperti routing lalu lintas, penemuan layanan, pemantauan, dan keamanan.

Service Mesh populer meliputi:

  1. Istio: Service Mesh sumber terbuka.
  2. Linkerd: Service Mesh ringan.
  3. Consul Connect: Bagian dari Consul, solusi penemuan layanan.

10. Kesimpulan

Dalam panduan ini, kita telah membahas langkah-langkah untuk menjalankan aplikasi voting microservices ter-Dockerisasi. Kita telah membahas persiapan lingkungan, membangun dan menjalankan container, memverifikasi fungsionalitas aplikasi, dan mempertimbangkan skalabilitas, pemantauan, keamanan, dan peningkatan lanjutan. Dengan mengikuti langkah-langkah ini, Anda dapat berhasil menyebarkan dan mengelola aplikasi microservices ter-Dockerisasi.

Microservices dan Docker menawarkan banyak manfaat dalam hal skalabilitas, fleksibilitas, dan ketahanan. Namun, mereka juga menghadirkan tantangan baru dalam hal kompleksitas, pemantauan, dan keamanan. Dengan memahami arsitektur, proses penyebaran, dan praktik terbaik, Anda dapat secara efektif memanfaatkan kekuatan microservices dan Docker untuk membangun aplikasi yang kuat dan scalable.

“`

omcoding

Leave a Reply

Your email address will not be published. Required fields are marked *