This page needs JavaScript activated to work correctly !

This page will be redirect in 3 second !

Architecture: Monolithic Vs Microservices Vs SOA - Programming | IDRaya.com

Architecture: Monolithic Vs Microservices Vs SOA

Triawan PROGRAMMING 18/06/2021 0 Discuss 145 Views

Arsitektur software dapat didefenisikan sebagai proses dasar untuk membuat struktur aplikasi dengan mempertimbangkan berbagai aspek penting seperti peforma, kehandalan, pengembangan, dan keamanan. Pentingnya mendefenisikan struktur aplikasi yang dibangun utamanya bertujuan untuk mendefisisikan serta menyusun solusi dari berbagai permasalahan yang ada agar memenuhi persyaratan tekknis, operasional dan bisnis itu sendiri. Umumnya arsitekur software yang banyak digunakan sebagai blueprint untuk membangun aplikasi menggunakan arsitektur Monolithic, arsitektur SOA (service-oriented architecture) dan yang sedang populer sekarang ini menggunakan Microservices.

Arsitektur Monolithic

Model aplikasi yang dibangun dengan arsitektur Monolithic menggunakan pendekatan satu kesatuan (single-unit), dengan kata lain disini seluruh komponen aplikasi saling berhubungan dan saling bergantung, sehingga setiap komponen satu dengan yang lain harus berfungi agar dapat dieksekusi atau dikompilasi dengan baik, dan biasanya hanya menggunakan satu codebase. Secara umum pada arsitektur ini, proses bisnis aplikasi yang dibangun merupakan satu domain utuh.

Arsitektur Monolithic Gambar Monolithic Architecture.(Sumber: https://www.pngkit.com/bigpic/u2e6t4u2i1y3o0t4/)

Pada Gambar Monolithic Architecture diatas, komponen-komponen atau fungsi direpresentasikan kedalam berbagai bentuk persegi berwarna yang dibungkus sebagai satu domain utuh. Kemudian pada gambar, aplikasi untuh dibangun secara horizontal menggunakan platform bahasa pemrograman Java sebagai source code lengkap atau disebut dengan codebase (single bundle of solutions).

Komunikasi setiap komponen pada arsitekur Monolithic dilakukan dalam batasan satu aplikasi tunggal, dan biasanya tidak menggunakan pemformatan data. Contoh sederhana ketika fungsi login dipanggil maka fungsi tersebut langsung menjalankan query tertentu ke dalam database, dan biasanya menghasilkan nilai balik berupa true atau false sebagai raw data/data mentah.

Arsitektur Microservice

Aplikasi yang dibangun dengan arsitektur microservices menggunakan pendekatan modular, artinya komponen-komponen aplikasi akan dikelompokan menjadi beberapa komponen yang independen sebagai service (fine-grained) untuk menjalankan setiap proses aplikasi. Secara umum pada arsitektur ini, dapat dikatakan proses bisnis aplikasi yang dibangun terdiri dari beberapa sub-domain yang dianggap sebagai service. Sehingga setiap service yang dibangun sangat memungkinkan menggunakan bahasa pemrograman yang berbeda-beda, menggunakan penyimpanan data yang berbeda, dan hanya melayani satu fungsi yang spesifik.

Arsitektur Monolithic Gambar Monolithic Architecture.(Sumber: https://www.pngkit.com/bigpic/u2e6t4u2i1y3o0t4/)

Pada Gambar Monolithic Architecture diatas, berbagai komponen atau fungsi direpresentasikan kedalam berbagai bentuk lingkaran berwarna dan saling terhubung secara langsung maupun tidak langsung serta dianggap sebagai sub-domain. Setiap lingkaran bewarna tersebut bersifat idependen sebagai service yang spesifik, dan dibangun secara vertikal dengan menggunakan codebase yang berbeda-beda.

Pada arsitektur ini, komunikasi dilakukan secara remote yang dikenal dengan metode RPI (Remote Procedural Invocation) atau disebut juga dengan RPC (Remote Procedural Call). Komunikasi antar service dilakukan melalui endpoint yaitu berupa alamat URL (Uniform Resource Location) contoh "https://api.idraya.com", dan untuk interaksinya (mengakses fungsinya) menggunakan API (Application Programming Interface) yang diimplementasikan kedalam REST (Representional State Transfer) API/RESTfull API. Pada arsitektur Microservice, format pertukaran data antara aplikasi umumnya menggunakan JSON (JavaScript Object Notation)).

Arsitektur SOA

Salah satu arsitektur lainnya untuk membangun aplikasi yang masih banyak digunakan terutama di perusahaan-perusahaan besar yaitu menggunakan SOA (service-oriented architecture). Istilah SOA sering digunakan tidak hanya dalam konteks pembuatan aplikasi, namun dengan arti yang berbeda-beda. Meskipun demikian secara umum SOA dapat diartikan membuat sistem atau aplikasi dengan cara menguraikannya menjadi beberapa bagian atau disebut dengan service dan kebanyakan menggunakan protocol HTTP serta XML (Extensible Markup Language) sebagai pemformatan datanya.

Arsitektur Monolithic SOA Microservices Gambar Pola Architecture Aplikasi.

Pada SOA service dianggap sebagai subsistem atau tingkatan yang memiliki beberapa tugas, sehingga disebut dengan corase-grained atau memiliki pola yang kasar. Namun karena pendekatan ini, arsitektur Microservices dikatakan berasal dari SOA, serta SOA dianggap sebagai arsitektur service-oriented yang tradisional, sedangan Microservices adalah arsitektur service-oriented yang lebih maju/advanced karena setiap service memiliki tugas yang spesifik sehingga pola arsitekturnya lebih halus (fine-grained).

Pro & Kontra Monolithic dengan Microservies

Berikut beberapa poin mengenai pro dan kontra antara arsitektur Monolithic dengan Microservices khusunya pada saat proses development serta deployment aplikasi yang dibangun.

Development

Aplikasi Monolithic relatif lebih mudah dibangun terutama aplikasi yang tidak memiliki kompleksitas yang tinggi. Selain hanya memerlukan satu codebase, untuk komunikasi antar komponen tidak diperlukan hal teknis yang rumit, dan tidak diperlukan tim developer yang banyak (aspek cost). Namun pada saat melakukan peningkatan/upgrade, karena arsitektur ini menggunakan pendekatan vertical scale, saat aplikasi yang dibangun sudah cukup besar/kompleks, maka akan sangat sulit dilakukan karena suatu perubahan dapat mempengaruhi aplikasi secara menyeluruh. Kemudian ketika aplikasi ingin di release atau ke tahap operasi yang berhubungan langsung dengan client, maka diperlukan kehati-hatian yang tinggi dan biasanya jika akan terjadi perubahan dilakukan di waktu trafik penggunaan sistem sedang rendah, serta diinformasikan ke pengguna.

Aplikasi Microservices bersekala besar atau dengan kompleksitas tinggi mudah untuk dibangun dengan penekatan ini, serta dapat menggunakan berbagai codebase, namun dibutuhkan banyak developer dengan keahlian khusus. Karena menggunakan pendekatan horizontal scale, maka pada saat terjadi perubahan tidak mempengaruhi seluruh aplikasi atau hanya pada service tertentu maupun dari sisi Container atau sistem yang menjalankan servicenya, sehingga hal ini menjadikan high scalability.

Deployment

Pada aplikasi Monolithic cukup meletakkan/upload satu bundle dari source code yang dibangun (develop) ke Server dengan langsung melakukan penyesuaian berdasarkan perubahan yang terjadi. Tetapi jika pada tahapan ini terdapat kesalahan yang fatal, umumnya akan mengakibatkan kegagalan seluruh komponen aplikasi (aplikasi menjadi malfungsi atau tidak dapat beroperasi).

Pada aplikasi Microservies membutuhkan banyak pekerjaan sebelum aplikasi disebar (deploy) untuk beroperasi. Hal ini karena microservice harus berjalan secara independen, sehingga membutuhkan keahlian dibidang DevOps (Development and Operation) yang bermakna sebagai operasional pengembang yang memahami tentang Container/seperti Virtual Machine namun dengan pendekatan isolated environement contonya dengan menggunakan Docker atau Kubernetes. Para DevOps sendiri bertanggung jawab atas deployement, build, and testing secara otomatis menggunakan teknik CI/CD (Continuous Integration and Continuous Delivery). Sisi baiknya jika terdapat kesalahan saat melakukan deployment, hanya akan mempengarui satu service itu saja dan mudah dikembalikan (rollback) ke state normal.

Insight

Karena kondisi tertentu arsitektur Monolithic bukanlah arsitektur kuno yang harus ditinggalkan, justru Monolithic dapat sangat ideal untuk membangun aplikasi khususnya yang tidak memiliki kompleksitas yang tinggi atau hanya dipergunakan disatu ruang lingkup suatu organisasi saja (masalah dipandang sebagai satu domain). Demikian juga penerapan arsitektur Microservice dalam kasus ini tidak sepenuhnya menjadi solusi terbaik karena memandang masalah menjadi beberapa sub-domain, apalagi dengan menggunakan bahasa pemrograman yang berbeda-beda tentu membutuhkan sumber daya yang lebih banyak. Sejahu ini tidak ada aturan baku untuk menentukan proses bisnis dari aplikasi yang dibangun masuk dalam satu domain atau sub-domain, atau dengan kata lain ditentukan oleh developer beserta stackholder terkait.

Masih banyak aspek lainnya yang perlu dipertimbangkan untuk memilih arsitektur aplikasi khususnya antara Monolithic dengan Microservices, sperti aspek Maintenance, Reliability, Cost, Security, Resource yang tersedia, dan lain sebagainya.

References

  1. https://martinfowler.com/articles/microservices.html
  2. https://jelvix.com/blog/monolith-vs-microservices-architecture
  3. https://insights.daffodilsw.com/blog/monolithic-vs-microservices-which-is-the-better-architecture-for-ecommerce-app-development
  4. https://docs.microsoft.com/en-us/dotnet/architecture/microservices/architect-microservice-container-applications/service-oriented-architecture
  5. https://www.dotnettricks.com/learn/microservices/architecture-example-advantages
  6. https://smartbear.com/solutions/microservices/

Agus Triawan/Triawan

 matriawan@gmail.com

Triawan is just an ordinary person, founder idraya[dot]com who just a little bit knows also likes try and error about devices, networks and programming/applications to solve challenges related to information technology.

If there is question, please discuss below. Very welcome and expected to provide corrections, criticisms, and suggestions.


We'll not share/display your email.
Example: Say <b>Hello</b> &lt;?php echo 'World'; ?&gt;
Output: Say Hello <?php echo 'World'; ?>
Words can come true for you, so be wise in speaking.

Be the first :D