Arsitektur terbaik untuk MVP: monolith, SOA, microservices atau serverless? .. Bagian 1

Pada bulan November, OTUS meluncurkan program pendidikan baru "Arsitek Perangkat Lunak" , sehubungan dengan ini kami telah menyiapkan serangkaian publikasi untuk siswa masa depan kursus dan pembaca blog kami.




Menciptakan produk baru selalu berisiko. Dan memilih arsitektur yang tepat adalah langkah penting menuju kesuksesan. Jika Anda memilih antara arsitektur monolitik, berorientasi layanan, microservice dan serverless, pos ini akan membantu Anda membuat pilihan yang tepat.

Arsitektur monolitik


Monolith adalah kata kuno yang menunjukkan balok batu besar. Meskipun istilah ini banyak digunakan saat ini, pandangannya tetap sama di semua bidang. Dalam rekayasa perangkat lunak, model monolitik mengacu pada satu unit tak terpisahkan. Konsep perangkat lunak monolitik adalah bahwa berbagai komponen aplikasi digabungkan menjadi satu program pada platform yang sama. Biasanya, aplikasi monolitik terdiri dari database, antarmuka pengguna klien, dan aplikasi server. Semua bagian dari perangkat lunak disatukan, dan semua fungsinya dikelola di satu tempat. Mari kita lihat struktur perangkat lunak monolitik secara terperinci.



Arsitektur monolitik mudah digunakan untuk grup kecil, sehingga banyak startup memilih pendekatan ini saat membuat aplikasi. Komponen perangkat lunak monolitik saling berhubungan dan saling tergantung, yang membantu perangkat lunak mandiri. Arsitektur ini adalah solusi tradisional untuk membangun aplikasi, tetapi beberapa pengembang menganggapnya usang. Namun, kami percaya bahwa arsitektur monolitik adalah solusi ideal dalam beberapa keadaan.

Terlepas dari kenyataan bahwa kami memiliki pengalaman positif menggunakan layanan mikro di Google, kami [di Scaylr] menempuh rute monolitik, karena memiliki satu server monolitik menyiratkan lebih sedikit pekerjaan bagi kami sebagai dua insinyur.
Stephen Cherwinski, Kepala Desain, Scaylr


Untuk mengetahui apakah solusi ini cocok untuk bisnis Anda, mari kita lihat pro dan kontra.

Kelebihan arsitektur monolitik


Pengembangan dan penyebaran yang disederhanakan


Ada banyak alat yang dapat Anda integrasikan untuk memfasilitasi pengembangan. Selain itu, semua tindakan dilakukan dengan satu direktori, yang menyederhanakan penyebaran. Berkat kernel monolitik, pengembang tidak perlu menggunakan perubahan atau pembaruan secara terpisah, karena mereka dapat melakukannya segera dan menghemat banyak waktu.

Kurang masalah lintas sektoral


Sebagian besar aplikasi bergantung pada banyak tugas lintas-komponen, seperti jalur audit, logging, pembatasan kecepatan, dll. Aplikasi monolitik jauh lebih mudah untuk memperhitungkan masalah ini karena basis kode mereka yang umum. Lebih mudah untuk menghubungkan komponen ke tugas-tugas ini ketika semuanya bekerja dalam satu aplikasi.

Performa terbaik


Ketika dirakit dengan benar, aplikasi monolitik biasanya lebih produktif daripada aplikasi berbasis microservice. Misalnya, aplikasi dengan arsitektur layanan mikro mungkin perlu membuat 40 panggilan API untuk 40 layanan microser yang berbeda untuk memuat setiap layar, yang jelas mengarah pada kinerja yang buruk. Aplikasi monolitik, pada gilirannya, memberikan komunikasi yang lebih cepat antara komponen perangkat lunak karena kode dan memori yang sama.

Kontra arsitektur monolitik


Basis kode menjadi rumit dari waktu ke waktu


Seiring waktu, sebagian besar produk terus dikembangkan dan diperluas, dan strukturnya menjadi kabur. Basis kode mulai terlihat sangat besar dan menjadi sulit untuk dipahami dan diubah, terutama untuk pengembang baru. Semakin sulit menemukan efek samping dan kecanduan. Ketika basis kode tumbuh, kualitas memburuk dan IDE menjadi kelebihan beban.

Sulit untuk memperkenalkan teknologi baru


Jika Anda perlu menambahkan beberapa teknologi baru ke aplikasi Anda, pengembang mungkin menghadapi hambatan untuk implementasi. Menambahkan teknologi baru berarti menulis ulang seluruh aplikasi, yang mahal dan memakan waktu.

Fleksibilitas terbatas


Dalam aplikasi monolitik, setiap pembaruan minor memerlukan pemindahan lengkap. Dengan demikian, semua pengembang harus menunggu sampai ini selesai. Ketika beberapa tim mengerjakan proyek yang sama, fleksibilitas dapat dikurangi secara signifikan.

Pada akhirnya


Model monolitik tidak ketinggalan zaman, dan dalam beberapa kasus masih berfungsi dengan baik. Beberapa perusahaan raksasa, seperti Etsy, tetap monolitik, meskipun kini ada layanan mikro yang populer. Arsitektur perangkat lunak monolitik dapat bermanfaat jika tim Anda berada pada tahap awal, Anda membuat produk yang tidak diverifikasi dan tidak memiliki pengalaman dengan layanan-layanan microser. Monolith sangat ideal untuk pemula yang perlu menjalankan produk secepat mungkin. Namun, beberapa masalah yang disebutkan di atas berjalan seiring dengan arsitektur monolitik.

SOA


Arsitektur berorientasi layanan (SOA) adalah gaya arsitektur perangkat lunak yang melibatkan aplikasi modular yang terdiri dari agen perangkat lunak terpisah dan diskrit yang melakukan fungsi spesifik. SOA membagi komponen menjadi dua peran utama: penyedia layanan dan konsumen. Kedua peran ini dapat dimainkan oleh agen perangkat lunak. Konsep SOA adalah ini: aplikasi dapat dirancang dan dibangun sedemikian rupa sehingga modul-modulnya mudah diintegrasikan dan dapat dengan mudah digunakan kembali.

Pro SOA


Penggunaan kembali layanan


Karena sifat komponen fungsional yang otonom dan longgar dalam aplikasi berorientasi layanan, komponen ini dapat digunakan kembali dalam beberapa aplikasi tanpa mempengaruhi layanan lain.

Cahaya disertai


Karena setiap layanan perangkat lunak adalah unit independen, mudah untuk memperbarui dan memelihara tanpa mempengaruhi layanan lainnya. Misalnya, aplikasi perusahaan besar lebih mudah dikelola ketika mereka dipecah menjadi layanan.

Keandalan yang lebih tinggi


Layanan lebih mudah untuk di-debug dan diuji daripada sejumlah besar kode, seperti pada monolit. Ini, pada gilirannya, membuat produk berbasis SOA lebih dapat diandalkan.

Pengembangan paralel


Karena arsitektur berorientasi layanan berlapis, mendukung konkurensi dalam proses pengembangan. Layanan independen dapat dikembangkan secara paralel dan diselesaikan pada saat yang sama.

Kekurangan SOA


Kesulitan dalam mengelola


Kelemahan utama dari arsitektur berorientasi layanan adalah kompleksitasnya. Setiap layanan harus menyediakan pengiriman pesan tepat waktu. Jumlah pesan ini dapat melebihi satu juta sekaligus, yang membuatnya sulit untuk mengelola semua layanan.

Biaya investasi tinggi


Pengembangan SOA membutuhkan investasi awal yang signifikan dalam sumber daya manusia, teknologi, dan pengembangan.

Beban tambahan


Dalam SOA, semua input divalidasi sebelum satu layanan berinteraksi dengan layanan lain. Saat menggunakan beberapa layanan, ini meningkatkan waktu respons dan mengurangi kinerja secara keseluruhan.

Pada akhirnya


SOA paling cocok untuk sistem perusahaan yang kompleks seperti perbankan. Sistem perbankan sangat sulit untuk dibagi menjadi layanan-layanan mikro. Tetapi pendekatan monolitik juga tidak cocok untuk sistem perbankan, karena satu bagian dapat merusak seluruh aplikasi. Solusi terbaik adalah dengan menggunakan pendekatan SOA dan mengatur aplikasi yang kompleks menjadi layanan yang terpisah dan independen.

Ini menyimpulkan bagian pertama dari terjemahan, dan kita akan berbicara tentang microservices dan arsitektur serverless di bagian kedua dari materi.

Source: https://habr.com/ru/post/id476024/


All Articles