Prinsip dalam pilar pengoptimalan performa di Google Cloud Well-Architected Framework ini memberikan rekomendasi untuk membantu Anda mempromosikan desain modular. Komponen modular dan antarmuka yang jelas dapat memungkinkan penskalaan yang fleksibel, update independen, dan pemisahan komponen di masa mendatang.
Ringkasan prinsip
Pahami dependensi antara komponen aplikasi dan komponen sistem untuk mendesain sistem yang skalabel.
Desain modular memungkinkan fleksibilitas dan ketahanan, terlepas dari apakah arsitektur monolitik atau microservice awalnya di-deploy. Dengan menguraikan sistem menjadi modul independen yang terdefinisi dengan baik dan memiliki antarmuka yang jelas, Anda dapat menskalakan setiap komponen untuk memenuhi permintaan tertentu.
Penskalaan yang ditargetkan dapat membantu mengoptimalkan pemanfaatan resource dan mengurangi biaya dengan cara berikut:
- Menyediakan hanya resource yang diperlukan untuk setiap komponen, dan mengalokasikan lebih sedikit resource untuk komponen yang kurang menuntut.
- Menambahkan lebih banyak resource selama periode traffic tinggi untuk mempertahankan pengalaman pengguna.
- Menghapus resource yang kurang dimanfaatkan tanpa mengorbankan performa.
Modularitas juga meningkatkan kemudahan pemeliharaan. Unit yang lebih kecil dan mandiri lebih mudah dipahami, di-debug, dan diupdate, sehingga dapat mempercepat siklus pengembangan dan mengurangi risiko.
Meskipun modularitas menawarkan keuntungan yang signifikan, Anda harus mengevaluasi potensi trade-off performa. Peningkatan komunikasi antar-modul dapat menyebabkan latensi dan overhead. Berusahalah untuk menyeimbangkan modularitas dan performa. Desain yang sangat modular mungkin tidak cocok secara universal. Jika performa sangat penting, pendekatan yang lebih terintegrasi mungkin lebih tepat. Desain sistem adalah proses iteratif, di mana Anda terus meninjau dan menyempurnakan desain modular Anda.
Rekomendasi
Untuk mempromosikan desain modular, pertimbangkan rekomendasi di bagian berikut.
Desain untuk pengaitan longgar
Rancang arsitektur yang dikaitkan secara longgar. Komponen independen dengan dependensi minimal dapat membantu Anda membangun aplikasi yang skalabel dan tangguh. Saat merencanakan batasan untuk layanan, Anda harus mempertimbangkan persyaratan ketersediaan dan skalabilitas. Misalnya, jika satu komponen memiliki persyaratan yang berbeda dari komponen Anda yang lain, Anda dapat mendesain komponen tersebut sebagai layanan mandiri. Terapkan rencana untuk kegagalan yang lancar untuk subproses atau layanan yang kurang penting yang tidak memengaruhi waktu respons layanan utama.
Desain untuk konkurensi dan paralelisme
Desain aplikasi Anda untuk mendukung beberapa tugas secara bersamaan, seperti memproses beberapa permintaan pengguna atau menjalankan tugas latar belakang saat pengguna berinteraksi dengan sistem Anda. Pecah tugas besar menjadi bagian-bagian yang lebih kecil yang dapat diproses secara bersamaan oleh beberapa instance layanan. Dengan konkurensi tugas, Anda dapat menggunakan fitur seperti penskalaan otomatis untuk meningkatkan alokasi resource dalam produk seperti berikut:
Menyeimbangkan modularitas untuk alokasi resource yang fleksibel
Jika memungkinkan, pastikan setiap komponen hanya menggunakan resource yang diperlukan (seperti memori, penyimpanan, dan daya pemrosesan) untuk operasi tertentu. Alokasi berlebih resource dapat menimbulkan biaya yang tidak perlu, sedangkan alokasi kurang resource dapat mengorbankan performa.
Menggunakan antarmuka yang jelas
Pastikan komponen modular berkomunikasi secara efektif melalui antarmuka yang jelas dan standar (seperti API dan antrean pesan) untuk mengurangi overhead dari lapisan terjemahan atau dari traffic yang tidak relevan.
Menggunakan model stateless
Model stateless dapat membantu memastikan bahwa Anda dapat menangani setiap permintaan atau interaksi dengan layanan secara terpisah dari permintaan sebelumnya. Model ini memfasilitasi skalabilitas dan pemulihan, karena Anda dapat memperbesar, memperkecil, atau memulai ulang layanan tanpa kehilangan data yang diperlukan untuk permintaan atau proses yang sedang berlangsung.
Memilih teknologi pelengkap
Pilih teknologi yang melengkapi desain modular. Evaluasi bahasa, framework, dan database pemrograman untuk dukungan modularitasnya.
Untuk informasi selengkapnya, lihat referensi berikut: