2.08.2017

Pengenalan Microservices


Pertama kali saya mendengar istilah Microservices adalah ketika berdiskusi tentang bagaimana arsitektur sistem itu seharusnya dibuat. Dan alhamdulillah, beberapa hari dari diskusi itu, muncul kebutuhan diperusahaan tempat saya bekerja untuk mencoba membuat sistem dengan konsep Microservices, dan saya pun diberi kesempatan untuk eksplorasi lebih jauh tentang itu.

Setelah sekian lama tidak menulis diblog, saya pikir ini topik yang bagus untuk ditulis. Karena dengan menulis, apa yang kita pelajari akan lebih mudah diingat.

Baca juga Seberapa Kecil Microservices yang Harus Dibuat?

Microservices


Microservices adalah sebuah service dimana service tersebut difokuskan untuk fungsi tertentu. Kumpulan service-service ini bila saling berkomunikasi dapat menjadi sebuah sistem yang besar.

Dalam implementasinya, secara sederhana kita harus memecah aplikasi yang ingin kita buat secara spesifik/rinci dari sisi fungsionalitasnya. Setiap fungsi harus mampu bekerja secara independent, dan fungsi-fungsi tersebut dapat dibangun menggunakan teknologi yang berbeda-beda sesuai dengan kebutuhan. Sehingga sangat memungkinkan akan terdapat banyak teknologi dalam satu aplikasi besar.

Sebagai contoh, saya akan coba mengambil diagram yang saya dapatkan di situs nginx.com.

Diagram Contoh Aplikasi Taxi Online
Pada diagram tersebut, terlihat jelas bahwa setiap fungsi yang ada pada aplikasi ini dilakukan oleh microservices-nya sendiri. Selain itu, aplikasi Web dapat dibagi menjadi satu set aplikasi web yang sederhana, yaitu aplikasi web untuk Passenger/Penumpang dan Driver/Pengemudi. Hal ini dapat memudahkan dalam mengembangkan 'user experience' aplikasi yang berbeda untuk penumpang dan pengemudi.

Setiap backend difasilitasi oleh REST API dan setiap service dapat saling berkomunikasi melalui REST API-nya masing-masing. Sebagai contoh, misalnya Driver Management menggunakan REST-API-nya Notification untuk mengirimkan daftar pengemudi yang available untuk sebuah perjalanan.


Manfaat Microservices


Arsitektur Microservices memiliki beberapa manfaat, yang pertama adalah Arsitektur Microservices dapat menurunkan tingkat kompleksitas suatu sistem. Dengan membagi-bagi setiap fungsi secara spesifik, kita sebagai pengembang dapat fokus kepada fungsi-fungsi spesifik tersebut, atau dengan kata lain, kita dapat memperkecil scope yang kita kerjakan.

Kedua, developer akan lebih fleksibel dalam menentukan tools yang lebih tepat untuk digunakan oleh suatu microservice.

Ketiga, pembagian tim atau team splitting akan lebih mudah. Satu tim akan fokus terhadap satu microservice, setiap tim tidak berbagi source code dengan tim lain, dan hanya terikat oleh interface yang didefinisikan di dalam service-service tersebut.

Keempat, microservices memungkinkan pembedaan profil satu service dengan service lainnya, terutama yang berhubungan dengan scaling up.

Masih banyak manfaat-manfaat lain yang tidak disebutkan, tetapi kurang lebih itu manfaat utama dari Arsitektur Microservices. Semoga bermanfaat.

Baca juga Seberapa Kecil Microservices yang Harus Dibuat?

Sumber bacaan:
- https://www.nginx.com/blog/introduction-to-microservices/
- https://indosystem.com/blog/microservices-konsep-dan-implementasi/
- http://www.geekyblogger.com/2014/07/tentang-microservices.html

10 comments:

  1. Kalau security enaknya dibuat microservices juga atau satu instance tunggal yg mencakup semua microservices yah?

    ReplyDelete
    Replies
    1. Menurut saya sih, security itu salah satu fungsionalitas yang spesifik, jadi kayaknya dibuat satu microservice lagi khusus untuk menangani security/keamanan..

      CMIIW

      Delete
    2. *Fungsionalitas = Fungsi, sorry typo :D

      Delete
  2. This comment has been removed by the author.

    ReplyDelete
  3. dr yg sy tangkap mengenai Microservice seperti ini. misal ada 3 fungsi utama pada website misal fungis A,B dan C nah masing2 funsi dibuat dalam bahasa yang berbeda/sama bergantung tp masih dlm satu domain. misal saat akses www.tes.com maka itu d handle fungsi A, tp saat akses www.tes.com/search maka d handle fungsi B dst begini kan?. nah untuk database sendiri apakah lebih baik dibuat micro juga jd ke-3 fungsi itu akan memiliki database yg sama atau berbeda2? nah lalu untuk pengaturan routingnya sendiri itu gimana yah?

    ReplyDelete
    Replies
    1. routing nya bisa di handle sama API Gateway bisa pake ini https://konghq.com/ atau yang lainnya / buat sendiri jg bisa.
      kalo database emang tiap service memiliki databasenya sendiri2 jadi terpisah dengan yang lainnya, jadi Microservice A db A (Pake Mongo) Microservice B db B (pake PostgreSQL) dll.
      CMIIW

      Delete
    2. Betul kata zaky..
      saya sendiri pernah pake api-gateway (getkong.org) buat routing nya

      Delete
    3. Mau sekalian nanya nih Gan, kalo misalkan satu fitur membutuhkan 2 Microservice itu nanti di olahnya di backend apa di frontend nya ya ?
      mengingat gateway hanya jembatan saja untuk routing.

      Delete
    4. jadi misal Fitur A itu hasil dari Microservice X dan Y, nah microservice yang menjadi Parents/Utama nya MS X , apakah X itu nanti yang akan get data ke MS Y ?
      atau dari keduanya di get terlebih dahulu nanti di Proses lagi di frontend ?

      Delete
    5. Oh itu, kalo gitu sih kayaknya ada 'kesalahan' dari pembagian microservices nya, jadinya kurang independent... tp kalopun misal memang seperti itu, bisa jadi bikin 1 fungsi entah itu di Ms X atau Ms Y, tergantung fungsi itu lebih berat kemana..

      cmiiw

      Delete