Desain Sistem, setiap pengembang di dunia pasti melalui istilah ini sebelum mengembangkan arsitektur atau desain untuk perangkat lunak. Desain sistem adalah proses mendesain elemen-elemen sistem seperti arsitektur, modul dan komponen, antarmuka yang berbeda dari komponen-komponen tersebut, dan data yang melewati sistem tersebut.
Desain Sistem, setiap developer di dunia pasti pernah melewati istilah ini sebelum mengembangkan arsitektur atau desain untuk perangkat lunak.
Desain sistem adalah proses mendesain elemen-elemen sistem seperti arsitektur, modul, dan komponen, antarmuka yang berbeda dari komponen-komponen tersebut, dan data yang melewati sistem tersebut.
Tujuan dari proses Desain Sistem adalah untuk menyediakan data dan informasi rinci yang cukup tentang sistem dan elemen sistemnya untuk memungkinkan implementasi yang konsisten dengan entitas arsitektur seperti yang didefinisikan dalam model dan pandangan arsitektur sistem.
Elemen-elemen sistem
- Arsitektur - Ini adalah model konseptual yang mendefinisikan struktur, perilaku, dan lebih banyak pandangan dari sebuah sistem. Kita dapat menggunakan diagram alir untuk merepresentasikan dan mengilustrasikan arsitektur.
- Modul - Ini adalah komponen yang menangani satu tugas tertentu dalam sebuah sistem. Kombinasi dari modul-modul tersebut membentuk sistem.
- Komponen - Ini menyediakan fungsi tertentu atau kelompok fungsi terkait. Komponen ini terdiri dari modul-modul.
- Antarmuka - Ini adalah batas bersama di mana komponen-komponen sistem bertukar informasi dan berhubungan.
- Data - Ini adalah pengelolaan informasi dan aliran data.
Tugas utama yang dilakukan selama proses desain sistem
Inisialisasi definisi desain.
- Merencanakan dan Mengidentifikasi teknologi yang akan menyusun dan mengimplementasikan elemen-elemen sistem dan antarmuka fisiknya.
- Tentukan teknologi dan elemen sistem mana yang memiliki risiko untuk menjadi usang atau berevolusi selama tahap operasi sistem. Rencanakan potensi penggantinya.
- Mendokumentasikan strategi definisi desain, termasuk kebutuhan dan persyaratan sistem, produk, atau layanan yang memungkinkan untuk melakukan desain.
Menetapkan karakteristik desain
- Tetapkan karakteristik desain yang berkaitan dengan karakteristik arsitektur dan periksa apakah karakteristik tersebut dapat diimplementasikan.
- Tentukan antarmuka yang tidak didefinisikan oleh proses Arsitektur Sistem yang perlu didefinisikan saat detail desain berkembang.
- Mendefinisikan dan mendokumentasikan karakteristik desain setiap elemen sistem.
- Menilai alternatif untuk mendapatkan elemen sistem
Menilai opsi desain.
- Pilih alternatif yang paling tepat.
- Jika keputusan dibuat untuk mengembangkan elemen sistem, sisa proses definisi desain dan proses implementasi digunakan. Jika keputusannya adalah membeli atau menggunakan kembali elemen sistem, proses akuisisi dapat digunakan untuk mendapatkan elemen sistem.
Mengelola desain
- Menangkap dan mempertahankan alasan untuk semua pilihan di antara alternatif dan keputusan untuk desain, karakteristik arsitektur.
- Menilai dan mengendalikan evolusi karakteristik desain.
Tugas utama yang dilakukan selama proses desain sistem
Inisialisasi definisi desain
- Merencanakan dan Mengidentifikasi teknologi yang akan menyusun dan mengimplementasikan elemen-elemen sistem dan antarmuka fisiknya.
- Tentukan teknologi dan elemen sistem mana yang memiliki risiko untuk menjadi usang atau berevolusi selama tahap operasi sistem. Rencanakan potensi penggantinya.
- Mendokumentasikan strategi definisi desain, termasuk kebutuhan dan persyaratan sistem, produk, atau layanan yang memungkinkan untuk melakukan desain.
Menetapkan karakteristik desain
- Tetapkan karakteristik desain yang berkaitan dengan karakteristik arsitektur dan periksa apakah karakteristik tersebut dapat diimplementasikan.
- Tentukan antarmuka yang tidak ditentukan oleh prosesor Arsitektur Sistem yang perlu disempurnakan seiring dengan berkembangnya detail desain.
- Mendefinisikan dan mendokumentasikan karakteristik desain setiap elemen sistem.
Menilai alternatif untuk mendapatkan elemen sistem
- Menilai opsi desain.
- Pilih alternatif yang paling tepat.
- Jika keputusan dibuat untuk mengembangkan elemen sistem, sisa proses definisi desain dan proses implementasi digunakan. Jika keputusannya adalah membeli atau menggunakan kembali elemen sistem, proses akuisisi dapat digunakan untuk mendapatkan elemen sistem.
Mengelola desain
- Menangkap dan mempertahankan alasan untuk semua pilihan di antara alternatif dan keputusan untuk desain, karakteristik arsitektur.
- Menilai dan mengendalikan evolusi karakteristik desain.
Langkah-langkah dasar untuk merancang sistem
Memperjelas dan menyepakati ruang lingkup sistem
Kasus pengguna
- Deskripsi urutan kejadian yang, jika digabungkan, akan menghasilkan sistem yang melakukan sesuatu yang berguna
- Siapa yang akan menggunakannya?
- Bagaimana mereka akan menggunakannya?
Kendala
- Terutama mengidentifikasi lalu lintas dan kendala penanganan data dalam skala besar.
- Skala sistem seperti permintaan per detik, jenis permintaan, data yang ditulis per detik, data yang dibaca per detik)
- Persyaratan sistem khusus seperti multi-threading, berorientasi baca atau tulis.
Desain arsitektur tingkat tinggi (Desain abstrak)
- Membuat sketsa komponen penting dan hubungan di antara mereka, tetapi tidak membahas secara detail.
- Lapisan layanan aplikasi (melayani permintaan)
- Buat daftar berbagai layanan yang dibutuhkan.
- Lapisan Penyimpanan Data
Contoh: Biasanya, sistem yang dapat diskalakan mencakup server web (penyeimbang beban), layanan (partisi layanan), basis data (klaster basis data master/slave), dan sistem caching.
Desain komponen
- Komponen + API spesifik yang diperlukan untuk masing-masing komponen.
- Desain berorientasi objek untuk fungsionalitas.
- Memetakan fitur-fitur ke dalam modul-modul: Satu skenario untuk satu modul.
- Pertimbangkan hubungan antar modul:
- Fungsi tertentu harus memiliki instance yang unik (Singletons)
- Objek inti dapat terdiri dari banyak objek lain (komposisi).
- Satu objek adalah objek lain (pewarisan)
- Desain skema basis data.
Memahami kemacetan
- Mungkin sistem Anda membutuhkan penyeimbang beban dan banyak mesin di belakangnya untuk menangani permintaan pengguna. * Atau mungkin datanya sangat besar sehingga Anda perlu mendistribusikan database Anda ke banyak mesin. Apa saja kerugian yang terjadi jika melakukan hal tersebut?
- Apakah basis data terlalu lambat dan apakah perlu cache dalam memori?
Menskalakan desain abstrak Anda
Penskalaan vertikal
Anda menskalakan dengan menambahkan lebih banyak daya (CPU, RAM) ke mesin yang sudah ada.
Penskalaan horizontal
Anda menskalakan dengan menambahkan lebih banyak mesin ke dalam kumpulan sumber daya.
Caching
- Penyeimbangan beban membantu Anda menskalakan secara horizontal di seluruh jumlah server yang terus meningkat, tetapi caching akan memungkinkan Anda untuk menggunakan sumber daya yang sudah Anda miliki dengan lebih baik, serta membuat persyaratan produk yang sebelumnya tidak dapat dicapai menjadi layak.
- Caching aplikasi membutuhkan integrasi eksplisit dalam kode aplikasi itu sendiri. Biasanya, ini akan memeriksa apakah sebuah nilai ada di dalam cache; jika tidak, ambil nilai tersebut dari database.
- Caching basis data cenderung “gratis”. Ketika Anda mengaktifkan database Anda, Anda akan mendapatkan beberapa tingkat konfigurasi default yang akan memberikan beberapa tingkat caching dan kinerja. Pengaturan awal tersebut akan dioptimalkan untuk kasus penggunaan umum, dan dengan menyesuaikannya dengan pola akses sistem Anda, Anda biasanya dapat memperoleh banyak peningkatan kinerja.
- Cache dalam memori adalah yang paling ampuh dalam hal kinerja mentah. Hal ini karena cache menyimpan seluruh kumpulan data dalam memori dan akses ke RAM jauh lebih cepat dibandingkan akses ke disk. Misalnya, Memcached atau Redis.
- misalnya, Hasil prakalkulasi (misalnya, jumlah kunjungan dari setiap domain yang dirujuk pada hari sebelumnya),
- misalnya, Pra-menghasilkan indeks yang mahal (misalnya, cerita yang disarankan berdasarkan riwayat klik pengguna)
- misalnya, Menyimpan salinan data yang sering diakses di backend yang lebih cepat (misalnya, Memcached, bukan PostgreSQL.
Penyeimbangan beban
- Server publik dari layanan web yang dapat diskalakan tersembunyi di balik penyeimbang beban. Penyeimbang beban ini mendistribusikan beban (permintaan dari pengguna Anda) secara merata ke grup/kelompok server aplikasi Anda.
- Jenis: Klien pintar (sulit untuk membuatnya sempurna), Penyeimbang beban perangkat keras ($$$ tetapi dapat diandalkan), Penyeimbang beban perangkat lunak (hibrida - berfungsi untuk sebagian besar sistem)
Replikasi basis data
Replikasi database adalah penyalinan data secara elektronik yang sering dilakukan dari database di satu komputer atau server ke database di komputer atau server lain sehingga semua pengguna memiliki informasi yang sama. Hasilnya adalah database terdistribusi di mana pengguna dapat mengakses data yang relevan dengan tugas mereka tanpa mengganggu pekerjaan orang lain. Implementasi replikasi database untuk tujuan menghilangkan ambiguitas data atau ketidakkonsistenan di antara para pengguna dikenal sebagai normalisasi.
Partisi basis data
Partisi data relasional biasanya mengacu pada penguraian tabel Anda baik berdasarkan baris (horizontal) atau kolom (vertikal).
Mengurangi Peta (Map-Reduce)
- Untuk sistem yang cukup kecil, Anda sering kali dapat menggunakan query ad-hoc pada database SQL, tetapi pendekatan tersebut mungkin tidak dapat ditingkatkan secara sepele setelah jumlah data yang disimpan atau beban tulis memerlukan sharding database Anda dan biasanya akan membutuhkan slave khusus untuk tujuan melakukan query ini (pada titik ini, mungkin Anda lebih suka menggunakan sistem yang dirancang untuk menganalisis data dalam jumlah besar, daripada melawan database Anda).
- Menambahkan layer pengurangan peta memungkinkan untuk melakukan data dan/atau operasi yang intensif dalam jumlah waktu yang masuk akal. Anda dapat menggunakannya untuk menghitung pengguna yang disarankan dalam grafik sosial, atau untuk menghasilkan laporan analitik. misalnya, Hadoop, dan mungkin Hive atau HBase.
Lapisan platform (Layanan)
- Memisahkan platform dan aplikasi web memungkinkan Anda untuk menskalakan bagian-bagiannya secara independen. Jika Anda menambahkan API baru, Anda dapat menambahkan server platform tanpa menambahkan kapasitas yang tidak perlu untuk tingkat aplikasi web Anda.
- Menambahkan lapisan platform dapat menjadi cara untuk menggunakan kembali infrastruktur Anda untuk beberapa produk atau antarmuka (aplikasi web, API, aplikasi iPhone, dll.) tanpa menulis terlalu banyak kode boilerplate yang berlebihan untuk menangani cache, database, dll.
Pertimbangan desain sistem aplikasi web
- Keamanan (CORS)
- Menggunakan CDN
- Jaringan pengiriman konten (CDN) adalah sistem server terdistribusi (jaringan) yang mengirimkan halaman web dan konten Web lainnya kepada pengguna berdasarkan lokasi geografis pengguna, asal halaman web, dan server pengiriman konten.
- Layanan ini efektif dalam mempercepat pengiriman konten situs web dengan lalu lintas tinggi dan situs web yang memiliki jangkauan global. Semakin dekat server CDN dengan pengguna secara geografis, semakin cepat konten dikirimkan ke pengguna.
- CDN juga memberikan perlindungan dari lonjakan lalu lintas yang besar.
- Pencarian Teks Lengkap
- Menggunakan Sphinx/Lucene/Solr - yang mencapai respons pencarian cepat karena, alih-alih mencari teks secara langsung, ia mencari indeks sebagai gantinya.
- Dukungan offline/Peningkatan progresif
- Pekerja Layanan
- Pekerja Web
- Perenderan Sisi Server
- Pemuatan aset secara asinkron (Lazy load item)
- Meminimalkan permintaan jaringan (Http2 + bundling/sprite, dll.)
- Produktivitas pengembang/Peralatan
- Aksesibilitas
- Internasionalisasi
- Desain responsif
- Kompatibilitas browser
Desain sistem diperlukan untuk pengembangan perangkat lunak, desain sistem memberi tahu kami persyaratan dan mengisi kesenjangan besar antara pengembang dan pengguna. Desain sistem adalah sumber kebenaran tunggal untuk pengalaman produk Anda.
Disadur dari: segwitz.com