Mengenal Arsitektur Perangkat Lunak dan Docker

Darin Amanda Zakiya
Inside PPL B7
Published in
6 min readMay 12, 2020
sumber gambar: https://xaltrennutrition.com/

Apa itu Software Architecture?

Dalam membangun sebuah bangunan atau khususnya rumah, tentu yang diinginkan adalah rumah yang nyaman, kokoh, aman, dan juga memiliki tampilan yang bagus. Agar dapat mencapai hal-hal tersebut, tentunya rumah perlu dibangun dengan baik, mulai dari bahan bangunan yang digunakan hingga ke teknik saat pembangunannya. Konsep seperti ini juga berlaku pada pengembangan Perangkat Lunak atau software.

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

Mengapa Software Architecture Penting?

sumber gambar: http://www.guidanceshare.com/wiki/Application_Architecture_Guide_-_Chapter_1_-_Fundamentals_of_Application_Architecture

Dalam pembuatan perangkat lunak, user, business, dan system merupakan komponen utama yang seakan tidak dapat dipisahkan dan saling berkaitan satu sama lain, bisnis menjawab kebutuhan pengguna dengan menggunakan sistem perangkat lunak. Seperti yang tadi sudah saya jelaskan, software architecture adalah sebuah proses untuk mendefinisikan struktur dari suatu aplikasi yang dapat memenuhi seluruh kriteria dari sisi teknis, bisnis, dan juga operasional.

Seiring berkembangnya waktu, biasanya dalam pengembangan software akan terdapat banyak perubahan untuk mengikuti kemauan pengguna, kebutuhan bisnis, dan juga sistem untuk pengembangan. Misalnya terdapat sebuah kebutuhan bisnis baru, hal tersebut akan memengaruhi sisi user yang akan berubah (misal tampilan), dan juga sistem yang harus mampu untuk memenuhi perubahan tersebut. Sehingga, di sinilah peran penting software architecture yaitu tentu sangat perlu untuk dipersiapkan dengan baik sehingga akan siap jika harus dilakukan perubahan-perubahan di masa yang akan datang. Software yang baik harus memiliki scalability yang baik. Jika arsitektur tidak dipersiapkan dan dibuat dengan baik, bisa saja nantinya software tidak dapat dikembangkan lagi karena hambatan teknologi.

Beberapa Software Architecture

Terdapat banyak software architecture, berikut ini merupakan 10 yang paling umum ditemukan atau digunakan,

  • Layered pattern
sumber: https://www.oreilly.com/library/view/software-architecture-patterns/9781491971437/ch01.html
  • Client-server pattern
sumber: https://subscription.packtpub.com/book/application_development/9781789809770/6/ch06lvl1sec68/understanding-the-client-server-pattern
  • Master-slave pattern
sumber: https://towardsdatascience.com/10-common-software-architectural-patterns-in-a-nutshell-a0b47a1e9013
  • Pipe-filter pattern
sumber: http://www.dossier-andreas.net/software_architecture/pipe_and_filter.html
  • Broker pattern
sumber: https://towardsdatascience.com/10-common-software-architectural-patterns-in-a-nutshell-a0b47a1e9013
  • Peer-to-peer pattern
sumber: https://www.btm-forum.org/boks/wikis/uam/UAM/guidances/reusableassets/uam_pattern_p2p_144410EC.html
  • Event-bus pattern
sumber: https://towardsdatascience.com/10-common-software-architectural-patterns-in-a-nutshell-a0b47a1e9013
  • Model-view-controller pattern
sumber: https://www.tutorialsteacher.com/mvc/mvc-architecture
  • Blackboard pattern
sumber: http://www.dossier-andreas.net/software_architecture/blackboard.html
  • Interpreter pattern
sumber: https://towardsdatascience.com/10-common-software-architectural-patterns-in-a-nutshell-a0b47a1e9013

Apa itu Docker?

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.

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 gambar: 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>

Berikut ini beberapa commands Docker

sumber: https://phoenixnap.com/kb/list-of-docker-commands-cheat-sheet

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

--

--