TUGAS 6 - PERANCANGAN PERANGKAT LUNAK (A)
TUGAS 6 - PERANCANGAN PERANGKAT LUNAK (A)
Low Level Design (LLD)
Low Level Design (LLD) adalah tahap dalam pengembangan perangkat lunak di mana konsep-konsep yang telah diidentifikasi dalam High Level Design (HLD) diimplementasikan menjadi rancangan teknis yang lebih mendetail. Biasanya, tahap ini dilakukan setelah spesifikasi fungsional telah ditetapkan dan menjelaskan secara rinci bagaimana setiap fitur atau komponen akan diwujudkan. Fokus utama dalam desain tingkat rendah adalah pada aspek teknis dan implementasi konkret dari perangkat lunak yang sedang dikembangkan. Ini mencakup pemecahan masalah teknis seperti pemilihan struktur data yang tepat, algoritma yang akan digunakan, desain antarmuka yang akan dibangun, dan implementasi rinci dari fitur-fitur yang telah direncanakan pada tahap desain tingkat tinggi. Pada pertemuan mata kuliah ini, kami diberi tugas untuk berlatih dalam pembuatan desain tingkat tinggi (HLD) dan desain tingkat rendah (LLD) dalam dokumen pengembangan perangkat lunak.
Low Level Design Instagram
Pemilihan Database
Dalam memilih arsitektur database yang sesuai, sistem manajemen basis data relasional (RDBMS) seperti SQL digunakan untuk tabel-tabel yang mengandung informasi kritis, seperti detail pengguna, postingan, dan komentar. Pilihan ini dibuat karena kebutuhan akan konsistensi tinggi, yang memastikan refleksi yang cepat dan akurat terhadap setiap perubahan, seperti perubahan detail pengguna atau komentar pada postingan.
Kepatuhan SQL terhadap properti ACID (Atomicity, Consistency, Isolation, Durability) membuatnya sangat cocok untuk menjaga integritas data dan memastikan keandalan dalam skenario-skenario semacam ini.
Sebaliknya, untuk data yang memerlukan persyaratan konsistensi yang lebih santai, seperti jumlah like dan jumlah tampilan, basis data NoSQL adalah pilihan yang bijaksana.
NoSQL, yang ditandai dengan properti BASE (Basically Available, Soft state, Eventually consistent), sejalan dengan sifat dataset ini. Ini memungkinkan fleksibilitas yang lebih besar, mengakomodasi sifat dinamis dan non-kritis dari informasi tersebut, di mana konsistensi yang langsung dan ketat bukanlah perhatian utama.
Pendekatan hibrida ini memanfaatkan kekuatan kedua basis data SQL dan NoSQL, menyesuaikan arsitektur database dengan kebutuhan khusus dan karakteristik data yang dikelola.
Komunikasi dengan Server
Menggunakan API RESTful untuk Sistem Manajemen Instagram membuktikan keunggulan karena kesederhanaan, antarmuka yang seragam, dan keadaan tanpa keadaan (statelessness). Desain REST yang langsung, dengan menggunakan metode-metode standar HTTP, memfasilitasi kemudahan penggunaan dan pengembangan, mempromosikan interoperabilitas di berbagai platform dan bahasa pemrograman.
Pendekatan yang berpusat pada sumber daya cocok dengan entitas-entitas dalam sistem, dan keadaan tanpa keadaan memungkinkan skalabilitas horizontal, yang penting untuk menangani lalu lintas tinggi yang diantisipasi dalam sistem manajemen Instagram. Selain itu, API RESTful mendukung fleksibilitas dalam format data, penanganan kesalahan yang terstandarisasi melalui kode status HTTP, dan mekanisme caching, yang berkontribusi pada komunikasi yang efisien, identifikasi kesalahan, dan peningkatan kinerja secara keseluruhan.
Microservices yang Digunakan
Klien Pengguna menginisiasi permintaan ke pengimbang beban untuk berbagai layanan, seperti pendaftaran pengguna, pengunggahan konten, dan interaksi sosial. Selain itu, admin sistem menggunakan pengimbang beban untuk mengirim permintaan otentikasi atau pengelolaan konten.
Pengimbang Beban Komponen penting ini memantau kesehatan server, mengalihkan lalu lintas dalam kasus kegagalan untuk memastikan waktu tidak aktif minimal. Tidak hanya meningkatkan keamanan dengan mengurangi serangan DDoS, tetapi juga memainkan peran krusial dalam penskalaan aplikasi. Tersedia dalam bentuk perangkat keras, perangkat lunak, dan berbasis cloud, pengimbang beban bertindak sebagai pengatur lalu lintas, mengarahkan aliran dalam infrastruktur TI modern.
Layanan API Melayani dua fungsi utama, layanan API mengelola otentikasi pengguna, memastikan hanya pengguna yang diotorisasi yang mengakses sistem. Setelah diotentikasi, layanan ini bertindak sebagai perantara untuk komunikasi dengan berbagai mikro layanan seperti pengunggahan konten, interaksi sosial, dan pencarian. Sebagai contoh, implementasi Kafka untuk antrian pesan memastikan komunikasi yang handal antar mikro layanan.
Layanan Otentikasi Menyediakan fungsionalitas otentikasi pengguna dan pendaftaran pengguna yang kuat, layanan ini penting untuk keamanan dan proses penerimaan pengguna baru. Proses pendaftaran menetapkan ID pengguna unik dan menyimpan dengan aman informasi penting pengguna, termasuk nama, alamat, dan detail kontak dalam database sistem.
Layanan Media Menawarkan berbagai opsi pengunggahan konten, Layanan Media memastikan fleksibilitas dan kemudahan untuk menyimpan foto dan video. Mereka memvalidasi konten yang diunggah, memastikan format dan ukuran sesuai dengan kebijakan sistem. Sebagai contoh, integrasi dengan sistem penyimpanan cloud seperti AWS S3 atau Google Cloud Storage meningkatkan kapasitas penyimpanan dan aksesibilitas.
CDN Khusus dalam menyimpan aset statis seperti foto dan video, CDN mengurangi beban pada server utama, meningkatkan aksesibilitas konten. Terletak secara strategis, CDN memastikan pengambilan data yang cepat, meminimalkan laten, dan mempercepat pengiriman konten. Sebagai contoh, menggunakan Akamai atau Amazon CloudFront untuk layanan CDN mengoptimalkan waktu muat halaman konten, meningkatkan pengalaman pengguna secara keseluruhan.
Layanan Pencarian Memungkinkan pengguna untuk mencari konten berdasarkan kriteria seperti tagar, akun, dan lokasi, layanan ini memanfaatkan ElasticSearch untuk pengambilan data yang cepat dalam database terdistribusi. Sebagai contoh, pengguna dapat dengan mudah menemukan postingan terkait topik tertentu dengan memanfaatkan kemampuan pencarian kuat ElasticSearch.
Layanan Interaksi Sosial Mengelola siklus hidup interaksi sosial secara keseluruhan, layanan ini memberikan informasi kepada pengguna dan memperbarui status interaksi. Antrian Interaksi memfasilitasi komunikasi dengan layanan media sosial, sementara permintaan pengiriman notifikasi melibatkan interaksi dengan Layanan Notifikasi. Implementasi Apache Kafka sebagai pialang pesan memastikan pemrosesan interaksi yang efisien dan komunikasi antar layanan.
Layanan Notifikasi Menyediakan pemberitahuan real-time kepada pengguna, layanan ini memungkinkan interaksi yang lebih mendalam dengan konten dan pengguna lain. Menggunakan teknologi seperti Firebase Cloud Messaging, layanan ini memastikan pengiriman notifikasi yang cepat dan andal.
Cache Menyimpan permintaan yang sedang berlangsung untuk akses cepat, cache menyediakan akses cepat kepada pelanggan dan mikro layanan lainnya. Misalnya, cache Redis secara efisien menyimpan dan mengambil data yang sering diakses, meningkatkan kinerja sistem secara keseluruhan.
Database Menyimpan data pengguna, informasi konten, dan interaksi sosial, database ini dibagi dan direplikasi di berbagai server. Sharding horizontal, seperti yang ditunjukkan oleh MySQL untuk konsistensi tinggi dalam data pengguna dan konten, disertai dengan NoSQL untuk metadata non-kritis seperti jumlah like dan jumlah tampilan. Sebagai contoh, MongoDB dapat digunakan karena fleksibilitasnya dalam menangani data tidak terstruktur seperti metadata konten dan interaksi sosial.
Alur Kerja Sistem
Berikut adalah proses langkah demi langkah:
- Pengguna memulai proses pendaftaran melalui layanan pendaftaran, memberikan semua detail yang diperlukan dan menerima ID pengguna unik.
- Pengguna yang kembali menggunakan layanan otentikasi untuk verifikasi.
- Selanjutnya, pengguna menjelajahi konten menggunakan layanan pencarian, memilih dari konten yang disimpan di CDN.
- Setelah memilih, Layanan Media menangkap spesifikasi konten, termasuk jenis dan ukuran. Pengguna kemudian mengunggah konten yang diverifikasi oleh sistem.
- Layanan Media mengirimkan konten ke Antrian Media, yang selanjutnya diambil oleh Layanan Penyimpanan untuk disimpan di penyimpanan cloud.
- Layanan Interaksi Sosial mengelola interaksi pengguna dengan konten, seperti like, komentar, dan share, menyimpan detail interaksi dalam database.
- Layanan Notifikasi mengirimkan pemberitahuan real-time kepada pengguna tentang interaksi baru atau konten terbaru melalui Antrian Notifikasi.
Berikut adalah proses langkah demi langkah untuk pengiriman konten:
- Pengguna mengunggah konten melalui Layanan Media.
- Layanan Media memvalidasi konten dan mengirimnya ke penyimpanan cloud.
- Konten yang disimpan diakses melalui CDN untuk memastikan pengambilan data yang cepat.
- Layanan Notifikasi memberi tahu pengikut pengguna tentang konten baru yang diunggah.
- Pengguna lain dapat berinteraksi dengan konten, mengirim like, komentar, atau membagikan konten, yang dikelola oleh Layanan Interaksi Sosial.
- Data interaksi disimpan dalam database dan dapat diakses melalui layanan pencarian.
Optimalisasi Lebih Lanjut untuk Sistem
Untuk meningkatkan efisiensi Sistem Manajemen Instagram lebih lanjut, beberapa optimalisasi dapat dipertimbangkan:
- Strategi caching: Mengimplementasikan Content Delivery Network (CDN) untuk aset statis seperti foto dan video dapat signifikan meningkatkan waktu respons dan mengurangi beban server.
- Pemrosesan asinkron: Tugas-tugas yang tidak sensitif waktu, seperti notifikasi interaksi, dapat dilakukan secara asinkron untuk meningkatkan respons sistem.
- Indeksasi database: Indeksasi yang efisien, strategi sharding, dan replikasi harus diimplementasikan untuk memastikan pengambilan data cepat dan ketersediaan tinggi.
- Pengimbang beban dinamis: Pengimbang beban harus dioptimalkan secara dinamis untuk mendistribusikan lalu lintas secara efektif, dan sistem harus mencakup langkah-langkah keamanan yang menyeluruh, termasuk enkripsi untuk data sensitif dan titik akhir API yang aman.
- Pemantauan kinerja: Pemantauan kinerja secara teratur dan analisis akan membantu mengidentifikasi dan mengatasi bottleneck potensial, memastikan optimalisasi berkelanjutan dari Manajemen Instagram.
Berikut adalah rincian komponen utama dan interaksi untuk desain tingkat rendah Instagram:
Layanan Pengguna:
- Menangani pendaftaran pengguna, login, otentikasi, dan manajemen profil.
- Menyimpan data pengguna seperti nama pengguna, email, bio, foto profil, dll.
- Terintegrasi dengan penyedia otentikasi sosial (misalnya, Facebook, Google).
Layanan Postingan:
- Menangani unggahan foto dan video, pengeditan, dan penghapusan.
- Menyimpan metadata posting seperti caption, hashtag, lokasi, timestamp, dll.
- Memproses media yang diunggah untuk resizing, filtering, dan pembuatan thumbnail.
- Mengelola transcoding foto dan video untuk perangkat dan resolusi yang berbeda.
Layanan Feed:
- Menghasilkan feed berita yang dipersonalisasi untuk setiap pengguna berdasarkan siapa yang mereka ikuti, like, aktivitas, dan keterlibatan.
- Memanfaatkan sistem terdistribusi seperti Apache Kafka atau RabbitMQ untuk pembaruan real-time dan notifikasi.
- Menggunakan lapisan cache seperti Redis untuk pengambilan feed yang cepat dan mengurangi beban database.
Layanan Penyimpanan:
- Menyimpan foto dan video yang diunggah dengan efisien dan andal.
- Memanfaatkan solusi penyimpanan objek yang dapat diskalakan seperti Amazon S3, Google Cloud Storage, atau Azure Blob Storage.
- Menerapkan mekanisme redundansi dan pemulihan bencana untuk perlindungan data.
Layanan Pencarian:
- Memungkinkan pencarian pengguna, hashtag, dan lokasi.
- Mengindeks pengguna, posting, dan hashtag berdasarkan parameter yang relevan.
- Menggunakan algoritma pengindeksan dan pencarian yang efisien untuk hasil yang cepat dan akurat.
Layanan Komentar:
- Menangani penambahan, pengeditan, dan penghapusan komentar pada posting.
- Melacak thread komentar dan hubungan parent-child.
- Memberitahu pengguna tentang komentar baru pada posting mereka sendiri atau komentar yang mereka ikuti.
Layanan Notifikasi:
- Memberi tahu pengguna tentang peristiwa yang relevan seperti like, komentar, mention, dan follow.
- Mendorong notifikasi ke perangkat mobile melalui platform seperti Firebase Cloud Messaging atau Amazon SNS.
- Memanfaatkan sistem antrian untuk pengiriman notifikasi secara asinkron.
Layanan Analitik:
- Melacak keterlibatan pengguna, kinerja posting, dan penggunaan platform secara keseluruhan.
- Mengumpulkan data tentang tampilan, like, komentar, share, dan klik.
- Memberikan wawasan untuk meningkatkan pengalaman pengguna, mengoptimalkan rekomendasi konten, dan menargetkan iklan.
Mengapa kita memerlukan caching untuk menyimpan data?
- Cache data untuk menangani jutaan permintaan baca. Ini meningkatkan pengalaman pengguna dengan mempercepat proses pengambilan.
- Kami juga akan memilih lazy loading, yang meminimalkan waktu tunggu klien.
- Ini memungkinkan kami untuk memuat konten saat pengguna menggulir dan dengan demikian menghemat bandwidth dan fokus pada pemuatan konten yang sedang dilihat pengguna. Ini meningkatkan latensi untuk melihat atau mencari foto atau video tertentu di Instagram.
Komentar
Posting Komentar