Kamu sukanya tipe yang mana ? Yang pengertian, perhatian, dan penyayang saja deh.

– Suara hati jomblo

Kenapa microservice perlu dikelompokkan berdasarkan tipe ?

Alasannya sederhana, hanya untuk melihat microservice secara lebih terstruktur saja. Pengelompokan ini sebenarnya natural karena pikiran kita akan lebih mudah berfikir dalam bentuk yang struktural. Hai ini juga dapat membuat kita bisa membandingkan dengan microservice yang kita punyai. Tipe microservice ini banyak, cuma kita mau melihat dan menggolongkannya berdasarkan atribut umum dan yang sering kita temui.

Microservice idealnya dibuat per business purpose. Tapi seberapa tahu seseorang itu terhadap business purpose sebuah product ?

Yang tahu tentunya tim dan product owner. Kebutuhan teknis bisa juga dianggap sebagai salah satu kebutuhan business. Membuat sebuah microservice khusus untuk logging, auditing, atau integrasi dengan aplikasi lain lebih condong kepada kebutuhan teknis, daripada kebutuhan bisnis. Tetapi kita bisa menjadikannya masing-masing menjadi satu microservice tersendiri.

Yang tahu context/batasan dari sebuah kebutuhan bisnis adalah tim dan product owner, sehingga belum tentu context/batasan bisnis dari sebuah tim sama dengan batasan bisnis di tim lain. Akibatnya ukuran dan pilihan microservicenya bisa jadi berbeda pula.

Skip, Lanjoot…

Kalau dikelompokkan, maka akan ada 6 kelompok besar tipe microservice :


Tipe 1 : Tipe yang fungsinya untuk bisnis

Microservice ini adalah yang paling umum. Isinya berkaitan dengan alur dan bisnis. Ciri-cirinya :

  1. Spesifik terhap sebuah flow bisnis.
  2. Biasanya mempunyai public API untuk dikonsumsi oleh service atau komponen lain.
  3. Berisikan data bisnis ketika servicenya dipanggil.

Tipe 2 : Tipe yang fungsinya untuk membantu infrastruktur aplikasi

Maksudnya apa infrastruktur aplikasi ?

Infrastuktur aplikasi adalah semua jenis operasi dan komponen dalam aplikasi yang dibutuhkan untuk mendukung development, deployment, dan monitoring dari aplikasi

Contohnya : logging, auditing, service monitoring, job scheduler, dll

Ciri-cirinya :

  1. Biasanya bersifat private API, tidak ditujukan untuk bisa diakses dari luar perusahaan atau entitas.
  2. Beberapa diantaranya digunakan oleh banyak service yang lain untuk hal-hal yang umum, seperti logging, auditing, job scheduler dll.
  3. Bersifat teknis dan digunakan untuk fungsi-fungsi internal aplikasi, seperti data farming, data metrik, logging, auditing, dll.

Tipe 3 : Tipe yang fungsinya untuk menampilkan kelompok data umum.

Kelompok data ini boleh kita sebut mungkin sebagai “master data”. Biasanya dalam sebuah aplikasi terdapat data bersama yang kita butuhkan, misalnya data konfigurasi produk, data untuk menu aplikasi, data kode pos dari elastic searh, dll.

Ciri-cirinya :

  1. Dipakai oleh banyak service yang lain, biasanya untuk kebutuhan data-data umum.
  2. Karena sering dipanggil, biasanya akan menggunakan strategi cache.
  3. Sebenarnya merupakan wrapper untuk query ke database atau datasource yang lain.

Permasalahannya :

  1. Kalau service ini mati, dan banyak service lain yang tergantung dengan service ini, maka akan jadi penghambat di service lain. Jadi tingkat fault tolerance nya tinggi, dan bisa menjadi salah satu single point of failure.

Tipe 4 : Tipe yang fungsinya untuk adaptasi/koneksi/integrasi dengan sistem lain.

Pastinya sebuah aplikasi tidak bisa berdiri sendiri. Terkadang harus terkoneksi dengan sistem lain, seperti email, otp sms, pembayaran/payment gateway, otentikasi dengan identity management, integrasi dengan sistem lain di luar atau di dalam entitas, dll.

Biasanya akan dibuat satu service khusus untuk hal ini. Sehingga ada service email, service otp, service-payment, service-identity, service-kode-pos (untuk kasus integrasi aplikasi dengan sistem yang mensuplai kode pos), dll.


Tipe 5 : Tipe yang fungsinya untuk orkestrasi.

Service orkestrasi adalah service yang secara otomatis akan melakukan konfigurasi, manajemen, dan koordinasi antara komponen dalam sebuah aplikasi.

Orkestrasi di dalam sebuah aplikasi lebih kepada konfigurasi, otomatisasi dan koordinasi.

Contohnya : di dalam sebuah aplikasi e-commerce, ada proses membeli barang/checkout, didalamnya terdapat proses yang banyak, seperti :

  1. mencek ketersediaan barang.
  2. membuat catatan/record pemesanan di database.
  3. mengirimkan tagihan ke payment-gateway/sistem pembayaran.
  4. mengirimkan pesanan ke layanan delivery.
  5. mengirimkan email informasi ke pengguna.
  6. menghapus data pesanan dari keranjang pemesanan.
  7. dst.

Sebuah service orkestrasi akan melakukan koordinasi dan konfigurasi terhadap kasus diatas. Service orkestrasi tidak melakukan itu sendirian, tetapi akan menggunakan service lain sebagai yang dikoordinasi olehnya. Koordinasinya bisa secara sinkronous yang harus menunggu proses by proses selesai, atau secara asynchronous/messaging/event yang bisa paralel.

Ciri-cirinya :

  1. Service ini memiliki konfigurasi yang banyak tergantung dari skenarionya. Biasanya ada file/database yang memuat konfigurasi tersebut sebagai acuannya.
  2. Biasanya digunakan untuk mengatur flow dari sebuah alur bisnis. (alur bisnis bisa saja terdiri dari alur teknikal)
  3. Mempunyai API yang biasanya punya satu interface yang sama, dengan pembedanya adalah nilai parameternya.

Tipe 6 : Tipe yang fungsinya untuk aggregasi.

Aggregasi adalah proses untuk melakukan kompilasi dari data agar dapat ditampilkan/dihasilkan data dalam bentuk yang lebih ringkas.

Kalau ada yang tahu fungsi COUNT(*), GROUPING_BY, MAX, MIN di sql, maka itu termasuk salah satu bentuk aggregasi.

Atau kalau pernah mengenal ETL (Extract, Transform, Load) nya di datawarehousing, maka itu termasuk aggregasi. BI (Business Intelligent) dashboard, Data Engineering aggregation juga termasuk contoh aggregasi.

Kembali ke microservice. Service aggregasi ini juga melakukan hal yang sama. Meringkas data yang sebelumnya bertebaran dimana-mana untuk nanti bisa ditampilkan dalam bentuk yang lebih sederhana.

CQRS (Command Query Responsibility Segregation) adalah salah satu design pattern yang mengadopsi konsep aggregasi ini. Bagian untuk transaksi dibuat terpisah dengan bagian untuk menampilkan laporan transaksinya. Kenapa ? karena sebuah transaksi bisa beranak pinak, mempunyai acuan ke tempat/database/service lain, dan bisa berisikan banyak data yang kemungkinan tidak diperlukan waktu orang ingin melihat ringkasannya.

Akibatnya harus ada service yang melakukan aggregasi dari banyak data tersebut, agar waktu ingin dilihat ringkasannya, tidak perlu lagi melakukan pencarian di banyak tempat.

Ciri-ciri service tipe ini :

  1. Merupakan koleksi/pump data dari banyak tempat/database.
  2. Mengelola duplikasi data yang diringkas, berasal dari data-data di table lain.
  3. Dapat digunakan untuk kasus permintaan data spesifik dan keperluan tertentu.

Setiap microservice bisa saja digolongkan menjadi 1, 2 atau 3 tipe diatas, tergantung batasan yang didefinisikan oleh tim dan product owner.

Demikianlah secara umum penggolongan tipe microservice yang penulis bisa simpulkan. Semoga bermanfaat.

Sumber :

Application Infrastructure Orchestration Aggregation