Diantara berbagai pola dan gaya arsitektur perangkat lunak (software architecture), microservice termasuk dalam kategori pola yang paling banyak dipakai oleh software developer. Microservice banyak diaplikasikan pada organisasi dan bisnis yang perlu kelincahan dan skalabilitas lebih besar.
Di microservice, setiap fitur dibangun terpisah dan independen dari fitur lainnya. Fitur yang terpisah memungkinkan untuk dikembangkan secara individu tanpa berkaitan dengan seluruh codebase. Komunikasi antar service menggunakan HTTP rest atau message bus.
Pola microservice sekilas terlihat lebih kompleks. Selain itu, developer juga perlu mengeluarkan usaha lebih besar untuk pengembangan software. Berbeda dengan monolith yang tiap fiturnya berkaitan erat dan saling mempengaruhi. Sehingga itu membuatnya lebih beresiko, proses update lebih rumit, integrasi lebih susah, dan peluang munculnya bugs lebih banyak.
Mengenai mengapa dan bagaimana implementasi microservice untuk kebutuhan bisnis, semua disampaikan pada sesi Vascomm Webinar bertema ‘Trend IT di dunia kerja’. Di akhir sesi webinar, ada beberapa pertanyaan yang diajukan oleh peserta, seperti terangkum di bawah ini:
[Q1] Untuk service yang menggunakan lumen, mana yang performanya lebih powerfull antara laravel dengan nodejs?
Karena laravel/lumen dibangun menggunakan PHP yang mana merupakan synchronous language, maka NodeJS lebih diunggulkan. Alasannya karena NodeJS berbasis Javascript dengan konsep asynchronous, sehingga membuat performa eksekusi code jadi lebih cepat. Selain itu, NodeJS juga memiliki fokus yang bisa menghandle multithreading dan parallel request.
[Q2] Mending menerapkan microservice di awal pengembangan, atau tunggu sampai users sudah banyak?
Tergantung dari tujuan pengembangan dan kebutuhan aplikasi. Jika memang ada niat menerapkan microservice, akan lebih baik kalau dilakukan di awal. Alasannya karena menghapus kebutuhan modularisasi / refactor di kemudian hari.
Nah, apa itu refactoring ? Menurut Martin Fowler, dia adalah proses mengganti software system tanpa mengubah behaviour dari kode tersebut, akan tetapi membuat struktur di dalamnya jadi lebih baik.
[Q3] Sampai berapa batasan microservice agar web kita berjalan dengan optimal? Misal kita pecah jadi 100, apakah masih worth it? Apa ada alternatif lain jika overload?
Jawabnya relatif, bergantung dengan resource dan kemampuan dari server. Semua disesuaikan kebutuhan saja. Jika terjadi overload, ya nambah resource boss hehe
Kedua, depend on traffic. Jika dirasa modul kita mengalami penurunan performa karena disebabkan traffic yang sangat tinggi , maka kita harus segera melakukan scale up sekali lagi. Tidak bagus juga kalau kita langsung memberikan resource yang sangat besar akan tetapi trafficnya kecil. Jadinya tidak efektif.
Optimalnya bukan tergantung dari banyaknya microservice, tapi jumlah aktifitas atau lalu lintas request responnya serta cara kita mengatasi massive request bersamaan. Bila overload, Kita bisa enhance di dalam code dengan melakukan optimasi task seperti multithread, chunking proses, dan sebagainya. Selain itu, enhance juga perlu dilakukan dari sisi infrastruktur, caranya dengan menambah jumlah resource untuk memaksimalkan kinerja proses.
[Q4] Saran untuk memprioritaskan kebutuhan infrastruktur atau kebutuhan bisnis?
Keduanya sama-sama penting. Poin utamanya itu yang penting bisnis jalan dan infrastruktur bisa support berlangsungnya bisnis
[Q5] Microservices memungkinkan berbagai macam database pada service berbeda. Bagaimana jika dalam pembuatan service butuh data dari service lain? Bagaimana cara mengambilnya?
Lewat API, komunikasi antar services
[Q6] Apakah kemacetan jaringan berpengaruh pada arsitektur sistem layanan microservice? Bagaimana menghindarinya?
Jelas sih. Solusinya simple, bila arsitektur jaringan diatur dengan baik dan gak terjadi bottleneck, maka layanan aman dari gangguan. Apa itu bottleneck? Dia adalah macetnya proses aliran atau transmisi data sebab alasan tertentu. Biasanya karena perbedaan antara kecepatan kerja suatu komponen dengan kecepatan bus-nya.
Untuk mengatasinya kita bisa pakai load balancing. Yaitu teknik mendistribusikan beban trafik pada dua atau lebih jalur koneksi secara seimbang. Gunanya agar trafik berjalan optimal, memaksimalkan throughput, memperkecil waktu tanggap dan menghindari overload pada salah satu jalur koneksi.