Arsitektur Perangkat Lunak dan Docker

Muhammad Nurkholish
6 min readJun 7, 2021

--

Kita akan membahas arsitektur perangkat lunak (software architecture) dan docker. Simak ya!

sumber: https://www.infoq.com/i18n/software-architecture-trends-2019/styles/illustration.svg

Apa itu Software Architecture?

Apa yang kita harapkan dari sebuah rumah? Aman, nyaman, kuat, dan lebih bersyukur lagi kalau tampilannya bagus. Agar memenuhi kriteria itu, maka rumah perlu dibangun dengan baik, mulai dari bahan bangunannya hingga ke teknik pembangunannya. Hal ini berlaku juga dalam pengembangan Perangkat Lunak.

Software architecture adalah proses perwujudan karakteristik perangkat lunak seperti flexibility, scalability, feasibility, reusability, dan security kedalam suatu rancangan solusi terstruktur yang memenuhi kebutuhan teknis dan bisnis. Dan software architecture merupakan suatu proses untuk mendefinisikan struktur dari suatu aplikasi yang dapat memenuhi seluruh kriteria dari sisi teknis dan juga operasional.

Kenapa Software Architecture Penting?

Software Architecture dibutuhkan untuk memastikan terpenuhinya kebutuhan teknis dan bisnis. Perangkat lunak dengan rancangan yang buruk selain dapat menghambat terpenuhinya kebutuhan operasional juga dapat menghambat developer dalam mengembangkan software. Berikut beberapa poin yang membuat software architecture penting.

  1. Arsitektur menjadi kerangka sebuah sistem
    Setiap sistem memiliki sebuah arsitektur, secara sadar atau pun tidak sadar pengembang memilihnya. Setiap arsitektur memiliki keunggulannya masing-masing. Oleh karena itu kita harus memilih kerangka yang sesuai.
  2. Arsitektur mempengaruhi quality attributes
    Quality attributes adalah properti yang terlihat secara eksternal, berupa security, usability, latency atau modifiability. Kerangka yang berbeda dapat mempermudah ataupun mempersulit dalam menangani suatu permasalahan. Dengan demikian memiliki arsitektur yang tepat dapat mempermudah kita dalam mencapai kualitas yang diinginkan
  3. Sebagian arsitektur adalah ortogonal terhadap fungsionalitas.
    Hal ini mungkin untuk membuat sistem yang sama dengan arsitektur yang berbeda. Jika arsitektur yang digunakan tidak cocok dengan fungsionalitas, developer akan kesulitan dalam mengembangkannya
  4. Arsitektur membatasi sistem
    Arsitektur adalah seni dalam menentukan batasan yang cukup sehingga sistem memiliki quality attributes yang diinginkan. Contohnya, sebuah desain yang menjamin scalability memerlukan beberapa komponen harus stateless agar scalability dapat didapat.

Beberapa Pola Software Architecture

Pola arsitektur membantu menentukan karakteristik dasar dan perilaku suatu aplikasi yang membuat sebuah aplikasi berbeda dengan aplikasi lainnya.

  • Layered Architecture (Arsitektur berlapis)
    Seluruh komponen yang ada dalam arsitektur berlapis dibuat ke dalam bentuk horizontal, dimana setiap lapisan melakukan peran tertentu dalam sebuah aplikasi. Salah satu kelebihan dibanding arsitektur lain adalah arsitektur berlapis memisahkan kepentingan antar komponen (yang berada di layer yang berbeda). Pemisahan komponen di layer berbeda memudahkan membangun peran yang efektif, mudah untuk dikembangkan, diperbaharui, dan dapat menghubungkan komponen dengan baik.
Layered Architecture
  • Event-Driven Architecture (arsitektur berbasis acara)
    Arsitektur berbasis acara relatif kompleks dan sulit untuk diterapkan karena sifatnya yang didistribusikan secara tidak sinkron. Untuk menerapkan arsitektur ini, harus mempertimbangkan ketersediaan proses jarak jauh, kurangnya respon, dan koneksi ulang ketika terjadi kegagalan. Salah satu kesulitan penerapan arsitektur ini adalah penciptaan awal arsitektur, pemeliharaan, dan pengelolaan komponen.
Event-Driven Architecture
  • Microkernel Architecture
    Arsitektur microkernel (kadang disebut sebagai arsitektur plug-in) adalah pola untuk menerapkan aplikasi berbasis produk yang mana dikemas dan tersedia untuk diunduh dalam versi produk pihak ketiga. Arsitektur microkernel terdiri dari dua jenis komponen arsitektur, yaitu sistem inti dan plug-in module. Sistem inti dari pola arsitektur microkernel hanya berisi fungsionalitas minimal yang diperlukan untuk membuat sistem operasional.
Microkernel Architecture

Modul plug-in adalah komponen independen yang berisi pemrosesan khusus, fitur tambahan dan kode khusus yang diperuntukkan untuk meningkatkan sistem inti. Anda dapat merancang plug-in yang independen, namun juga dapat berupa plug-in yang membutuhkan plug-in lainnya. Dalam bentuk apa pun, komunikasi tiap plug-in harus dibuat seminimal mungkin untuk menghindari masalah ketergantungan.

  • Microservices Architecture Pattern
    Konsep dari pola ini adalah unit yang dikelola secara terpisah, yang mana setiap komponen arsitektur digunakan sebagai unit yang terpisah dan memungkinkan untuk penyebaran yang lebih mudah, meningkatkan skalabilitas, dan tingkat aplikasi yang tinggi.
Microservices Architecture Pattern
  • Space-Based Architecture (arsitektur berbasis ruang)
    Pola arsitektur berbasis ruang (terkadang disebut sebagai cloud architecture pattern atau pola arsitektur awan) dirancang khusus untuk mengatasi dan memecahkan masalah skalabilitas yang ekstrem dan konkurensi. Pola ini juga berguna untuk aplikasi yang volume penggunanya tidak dapat diprediksi. Pola ini dinamakan berdasar pada konsep tuple space dimana menggunakan shared memory yang terdistribusi.
Space-Based Architecture

Docker Orchestration

sumber: https://www.docker.com/sites/default/files/d8/2019-07/horizontal-logo-monochromatic-white.png

Docker merupakan sebuah tool yang berguna untuk membangun, mendeploy, dan menjalankan aplikasi dengan mudah melalui sebuah container. Container itu sendiri berguna untuk mengemas sebuah aplikasi dengan semua bagian yang dibutuhkannya, seperti libraries dan dependencies. Docker ini open source yang biasa digunakan untuk menyatukan beberapa file dalam sebuah program software. File-file pendukung disebut juga image dan dikumpulkan dalam sebuah wadah yang dinamakan container.

Simulasi Docker Orchestration dalam Kubernetes

Cara kerja Docker orchestrator seperti yang ada di gambar di atas adalah, pod IP address bertugas untuk menyimpan container-container yang dipakai oleh host tersebut, lalu di kontainer tersebut, interaksi antar kontainer dalam docker orchestration dijalankan via service third party, sehingga service tersebut dapat meregulasi usage image file dalam kontainer.

Apa manfaat Docker?

Docker membuat developer lebih mudah untuk memodifikasi dan memperbarui program yang ada, mengirimkan kode lebih cepat, menstandardisasi operasi aplikasi, memindahkan kode dengan lancar, dan menghemat uang dengan meningkatkan pemanfaatan sumber daya. Tujuan digunakannya Docker adalah untuk membuat aplikasi menjadi portable dan simpel.

Lalu, apa bedanya Docker dengan Virtual Machine?

Virtual machine (VM) merupakan hal yang membuat pengguna dapat membagi resource hardware dari satu hardware fisik menjadi beberapa sistem komputer. Berbeda dengan VM, container adalah virtualisasi OS yang dapat membungkus suatu aplikasi beserta dependency dan environment-nya. Setiap container memiliki proses yang terisoalasi sehingga tidak mengganggu host OS ataupun container yang lainnya. Dapat disimpulkan, bahwa perbedaan antara Docker dan VM adalah VM merupakan teknologi virtualisasi pada level hardware, sedangkan Docker merupakan teknologi virtualisasi yang berada pada level sistem operasi.

sumber: https://www.docker.com/blog/containers-replacing-virtual-machines/

Arsitektur Docker

sumber: https://beril.id/pengertian-dari-docker-serta-cara-penggunaannya/

Berikut ini penjelasannya beserta beberapa istilah pada Docker,

  • Docker Daemon: berfungsi untuk membangun, mendistribusikan, dan menjalakan container Docker.
  • Docker Image: dasar template untuk Docker container. Berisi instruksi yang di-define pada file Dockerfile. Template yang bersifat read-only. Satu docker images dapat digunakan untuk membuat banyak docker container.
  • Docker Container: berada di atas image. Setiap perubahan yang disimpan pada container akan menyebabkan terbentuknya layer baru di atas base image. Docker container dibuat menggunakan Docker daemon.
  • Docker Registry: tempat image disimpan. Berisikan kumpulan Docker image yang dapat diakses melalui Docker hub. Melalui docker registry juga dapat menggunakan Docker image yang telah dibuat oleh developer lain.

Docker Orchestration

Banyak perusahaan yang memiliki ratusan aplikasi dan mungkin memiliki container yang banyak. Hal ini tidak mungkin diatur satu per satu karena tentunya akan memakan waktu yang sangat banyak. Sehingga diperlukan Docker Orchestration, Docker Orchestration adalah hal yang dibutuhkan untuk melakukan deploy dari container individual pada single host ke multi container apps pada banyak mesin. Pada saat container sudah berjalan pada host, orchestration akan melakukan perintah-perintah sesuai dengan konfigurasi. Contoh dari Docker Orchestration adalah Kubernetes, Swarm, dan Apache Meos.

Flow Deployment

  1. Build app, pada direktori yang sama dengan Dockerfile, jalankan perintah
docker build --tag=<nama_image>

2. Tag image, jika sudah membuat image, maka lakukan proses deployment selanjutnya, yaitu tag image, jalankan perintah

docker tag <nama_image> <link_registry>/<nama_repository>:<tag>

3. Push image ke registry dengan menjalankan perintah

docker push <link_registry>/<nama_repository>:<tag>

Untuk command selengkapnya mengenai docker bisa diakses di sini.

Sayangnya, pada artikel kali ini saya belum bisa memberikan contoh implementasinya pada proyek PPL kelompok saya dikarenakan proyek yang kelompok saya kerjakan merupakan proyek aplikasi mobile yang tidak dijalankan pada Docker container melainkan langsung di smartphone. Kelompok saya juga sudah diberikan API oleh partner, sehingga untuk saat ini kami belum membutuhkan penggunaan Docker ini, namun tentunya bisa saja untuk kedepannya Docker ini akan sangat berguna dan akan kami gunakan, ditunggu ya update-nya! Sekian semoga bermanfaat dan terima kasih.

referensi:

--

--

No responses yet