Apa sih microservices itu? Sepertinya tidak ada definisi yang baku. Sebagian orang mengaitkannya dengan SOA (Service Oriented Architecture). Kalau saya pribadi lebih suka menggunakan term "SOA a la UNIX" untuk mendefinisikannya. Maksudnya disini adalah setiap service akan fokus pada satu fungsionalitas tertentu. Satu service dan service lainnya saling berkomunikasi untuk menghasilnya business value yang sesungguhnya.
Sedikit latar belakang, saya bukan ahli dalam bidang ini. Hanya kebetulan topik ini sedang banyak didiskusikan, seperti yang dituliskan juga di report Technology Radar 2014nya ThoughtWorks. Reportnya bisa dilihat di sini: http://thoughtworks.fileburst.com/assets/technology-radar-july-2014-en.pdf.
Kalau diskusi tentang microservices, sepertinya tidak lengkap kalau tidak dimulai dari arsitektur monolitik. Arsitektur monolitik, seperti namanya, punya arti bahwa semua fungsionalitas berada pada satu unit saja. Unit ini menangani segalanya, business logic, database access, templating, dll. Dalam kasus web application, struktur aplikasi monolitik biasanya terdiri dari client-side, server-side, dan database. Arsitektur monolitik ini tentunya punya kelemahan-kelamahan yang solusinya bisa dialamatkan oleh microservices.
Apa saja kekuatan microservices dibandingkan dengan monolitik?
Yang pertama, microservices memberikan fleksibilitas bagi developer untuk menentukan tools yang akan digunakan untuk implementasi sebuah service tanpa harus memaksakan tools tersebut untuk digunakan pada service-service lainnya. Hal ini sangat memungkinkan karena antara satu service dan service lainnya tidak tightly coupled. Komunikasi antara satu service di microservices dengan service lainnya umumnya dilakukan via messaging atau web service. Keduanya bisa diimplementasi dengan menggunakan teknologi yang berbeda.
Kedua, microservices memungkinkan team splitting dilakukan dengan lebih mudah. Satu tim yang menangani sebuah microservice bisa dengan mudah memisahkan diri dari tim lainnya karena, mereka tidak berbagi code base dan hanya terikat dengan interface yang didefinisikan di dalam service-service tersebut.
Ketiga, memisahkan fungsionalitas dalam service-service terpisah menjadikan service-service tersebut terisolasi satu sama lain. Dengan kata lain, resiko dan problem dalam satu service akan lebih mudah dilokalisir. Termasuk di dalamnya adalah permasalahan dengan legacy system. Salah satu contohnya adalah website The Guardian yang mulai dengan aplikasi monolitik dan kemudian berevolusi menjadi microservices. Aplikasi yang dikembangkan di awal tetap dapat dipertahankan meskipun sudah menjadi legacy dan tidak fleksibel.
Keempat, microservices memungkinkan pembedaan profil satu service dengan service lainnya, terutama yang berhubungan dengan scaling up.
Masih banyak keunggulan microservices yang tidak saya sebutkan disini, terutama karena empat poin yang saya sebutkan di atas adalah major concern yang saya rasakan selama bekerja sebagai software engineer. Yang perlu diingat, selain punya kekuatan, seorang sofware architect juga harus menyadari tantangan yang dihadapi dalam mengimplementasikan sistem dengan arsitektur microservices. Tapi mungkin ini bahasan di posting yang lain :)
Sedikit latar belakang, saya bukan ahli dalam bidang ini. Hanya kebetulan topik ini sedang banyak didiskusikan, seperti yang dituliskan juga di report Technology Radar 2014nya ThoughtWorks. Reportnya bisa dilihat di sini: http://thoughtworks.fileburst.com/assets/technology-radar-july-2014-en.pdf.
Kalau diskusi tentang microservices, sepertinya tidak lengkap kalau tidak dimulai dari arsitektur monolitik. Arsitektur monolitik, seperti namanya, punya arti bahwa semua fungsionalitas berada pada satu unit saja. Unit ini menangani segalanya, business logic, database access, templating, dll. Dalam kasus web application, struktur aplikasi monolitik biasanya terdiri dari client-side, server-side, dan database. Arsitektur monolitik ini tentunya punya kelemahan-kelamahan yang solusinya bisa dialamatkan oleh microservices.
Apa saja kekuatan microservices dibandingkan dengan monolitik?
Yang pertama, microservices memberikan fleksibilitas bagi developer untuk menentukan tools yang akan digunakan untuk implementasi sebuah service tanpa harus memaksakan tools tersebut untuk digunakan pada service-service lainnya. Hal ini sangat memungkinkan karena antara satu service dan service lainnya tidak tightly coupled. Komunikasi antara satu service di microservices dengan service lainnya umumnya dilakukan via messaging atau web service. Keduanya bisa diimplementasi dengan menggunakan teknologi yang berbeda.
Kedua, microservices memungkinkan team splitting dilakukan dengan lebih mudah. Satu tim yang menangani sebuah microservice bisa dengan mudah memisahkan diri dari tim lainnya karena, mereka tidak berbagi code base dan hanya terikat dengan interface yang didefinisikan di dalam service-service tersebut.
Ketiga, memisahkan fungsionalitas dalam service-service terpisah menjadikan service-service tersebut terisolasi satu sama lain. Dengan kata lain, resiko dan problem dalam satu service akan lebih mudah dilokalisir. Termasuk di dalamnya adalah permasalahan dengan legacy system. Salah satu contohnya adalah website The Guardian yang mulai dengan aplikasi monolitik dan kemudian berevolusi menjadi microservices. Aplikasi yang dikembangkan di awal tetap dapat dipertahankan meskipun sudah menjadi legacy dan tidak fleksibel.
Keempat, microservices memungkinkan pembedaan profil satu service dengan service lainnya, terutama yang berhubungan dengan scaling up.
Masih banyak keunggulan microservices yang tidak saya sebutkan disini, terutama karena empat poin yang saya sebutkan di atas adalah major concern yang saya rasakan selama bekerja sebagai software engineer. Yang perlu diingat, selain punya kekuatan, seorang sofware architect juga harus menyadari tantangan yang dihadapi dalam mengimplementasikan sistem dengan arsitektur microservices. Tapi mungkin ini bahasan di posting yang lain :)