Daftar Isi[Bersembunyi][Menunjukkan]
- 1. Apa yang dimaksud dengan desain sistem?
- 2. Apa karakteristik terpenting dari perancang sistem?
- 3. Apa sebenarnya teorema CAP?
- 4. Apa yang anda pahami tentang load balancing?
- 5. Apa perbedaan antara pemrograman asinkron dan pemrograman paralel?
- 6. Apa perbedaan antara penskalaan horizontal dan vertikal?
- 7. Apa sebenarnya yang Anda maksud dengan latensi, throughput, dan ketersediaan sistem?
- 8. Apa itu sifat ACID?
- 9. Apa sebenarnya sharding itu?
- 10. Apa itu CDN?
- 11. Mengapa menggunakan CDN?
- 12. Apa perbedaan antara sharding dan partisi?
- 13. Apa sebenarnya caching itu?
- 14. Apa itu server tepi CDN?
- 15. Apa saja pola Konsistensi yang berbeda untuk desain sistem?
- 16. Apa yang Anda maksud dengan penguncian optimis?
- 17. Apa sebenarnya yang Anda maksud dengan “pemilihan pemimpin”?
- 18. Apa pendekatan Anda untuk merancang layanan pemendekan URL seperti TinyURL?
- 19. Apa pendekatan Anda dalam mendesain twitter?
- 20. Buat sistem umpan berita untuk Facebook
- 21. Apa yang dimaksud dengan properti BASE sistem?
- 22. Apa itu Load Balancing Dengan Teknik Afinitas Alamat IP?
- 23. Apa sebenarnya algoritma Penggantian Cache (atau Kebijakan Penggusuran) itu?
- 24. Apa sebenarnya yang Anda maksud dengan transaksi terdistribusi?
- 25. Apa sebenarnya kelaparan itu?
- Kesimpulan
Sebelum Anda mulai, kami sarankan untuk membaca panduan pengantar tentang Desain Sistem untuk menyegarkan pengetahuan dasar Anda.
Saat wawancara untuk posisi yang membutuhkan pengetahuan desain sistem, Anda memiliki kesempatan untuk berbicara tentang latar belakang Anda dan menunjukkan kemampuan Anda untuk mengembangkan sistem yang rumit.
Saat berbicara dengan calon pemberi kerja, cara Anda mengekspresikan keahlian Anda dapat membantu Anda menunjukkan bahwa Anda adalah kandidat yang kompeten untuk posisi tersebut.
Anda dapat mempersiapkan wawancara kerja dengan mempelajari konsep desain dasar dan memikirkan bagaimana Anda akan menanggapi pertanyaan tentangnya. Kami akan membahas beberapa pertanyaan dan jawaban wawancara desain sistem yang khas dalam posting ini untuk membantu Anda mempersiapkan wawancara berikutnya.
1. Apa yang dimaksud dengan desain sistem?
Proses pembentukan karakteristik sistem termasuk modul, arsitektur, komponen, dan antarmuka mereka, dan data berdasarkan kriteria yang telah ditentukan dikenal sebagai desain sistem.
Ini adalah proses mendefinisikan, menciptakan, dan merancang sistem untuk memenuhi tujuan dan sasaran khusus perusahaan atau organisasi. Desain sistem lebih tentang analisis sistem, pola arsitektur, API, pola desain, dan merekatkan semuanya daripada tentang pengkodean.
2. Apa karakteristik terpenting dari perancang sistem?
- Interaksi pengguna
- Panggilan API eksternal
- Proses offline
3. Apa sebenarnya teorema CAP?
Menurut teorema CAP (Consistency-Availability-Partition Tolerance), sistem terdistribusi tidak dapat memastikan C, A, dan P semua pada waktu yang sama. Itu hanya dapat memberikan dua dari tiga jaminan paling banyak. Mari kita gunakan sistem database terdistribusi untuk membantu kita memahami hal ini.
- Konsistensi: Ini menentukan bahwa data harus tetap konsisten setelah transaksi database selesai. Misalnya, semua kueri harus mengembalikan respons yang sama setelah pembaruan basis data.
- Ketersediaan: Basis data harus tersedia dan responsif setiap saat.
- Toleransi Partisi: Bahkan jika komunikasi menjadi bermasalah, sistem database harus terus bekerja.
4. Apa yang anda pahami tentang load balancing?
Penyeimbang beban adalah proses penyebaran lalu lintas masuk secara efisien di antara satu set server backend. Ini disebut sebagai kumpulan server. Situs web modern dibuat untuk menangani jutaan pertanyaan dari pelanggan dan menanggapinya dengan cepat dan andal. Lebih banyak server akan dibutuhkan untuk menangani tuntutan ini.
Dalam hal ini, penting untuk membagi lalu lintas permintaan secara efisien di antara setiap server untuk menghindari membebani mereka. Penyeimbang beban berfungsi sebagai polisi lalu lintas, mencegat permintaan dan merutekannya di antara server yang tersedia sehingga tidak ada server yang terbebani, berpotensi menurunkan kinerja aplikasi.
5. Apa perbedaan antara pemrograman asinkron dan pemrograman paralel?
Ketika Anda menjalankan sesuatu secara tidak sinkron, itu berarti Anda tidak perlu menunggu sampai selesai sebelum Anda dapat melanjutkan ke hal lain. Paralelisme mengacu pada eksekusi simultan dari banyak tugas.
Ketika Anda dapat membagi pekerjaan menjadi beberapa bagian kerja yang berbeda, paralelisme bekerja secara efektif. Async dan Callback adalah sarana (alat atau mekanisme) untuk mewakili konkurensi, yaitu sekelompok entitas yang dapat berkomunikasi dan berbagi sumber daya.
6. Apa perbedaan antara penskalaan horizontal dan vertikal?
Penambahan peralatan komputasi baru ke jaringan yang menyebarkan pemrosesan dan permintaan memori di seluruh jaringan perangkat yang tersebar disebut sebagai penskalaan horizontal. Sederhananya, instance server baru ditambahkan ke kumpulan saat ini, dan beban lalu lintas secara efisien tersebar di antara perangkat ini.
Penskalaan vertikal mengacu pada gagasan untuk memperluas kapasitas sumber daya satu komputer dengan menambahkan RAM, CPU yang efisien, atau bermigrasi ke mesin baru dengan kapasitas yang lebih tinggi. Fungsionalitas server dapat ditingkatkan tanpa memerlukan perubahan pemrograman apa pun.
7. Apa sebenarnya yang Anda maksud dengan latensi, throughput, dan ketersediaan sistem?
Performa adalah aspek penting dari desain sistem karena berkontribusi pada kecepatan dan keandalan layanan kami. Tiga ukuran kinerja yang paling penting adalah sebagai berikut:
- Waktu yang diperlukan untuk mengirimkan satu pesan dalam milidetik disebut latensi.
- Jumlah data yang berhasil ditransfer melalui sistem dalam periode waktu tertentu disebut sebagai throughput. Bit per detik digunakan untuk mengukurnya.
- Jumlah waktu sistem tersedia untuk bereaksi terhadap kueri ditentukan oleh ketersediaannya. System Uptime / (System Uptime+Downtime) adalah rumus untuk menghitungnya.
8. Apa itu sifat ACID?
- Atomicity: Ini memastikan bahwa perubahan basis data semuanya atau tidak sama sekali.
- Konsistensi: Nilai data dalam database konsisten.
- Isolasi: Ini mengacu pada pemisahan dua transaksi.
- Daya tahan: Data dipertahankan bahkan jika server gagal.
9. Apa sebenarnya sharding itu?
Sharding adalah teknik membagi kumpulan data logis yang sangat besar ke dalam banyak basis data. Ini juga mengacu pada pemisahan data horizontal karena data akan disimpan di beberapa komputer. Akibatnya, database bersama dapat menangani lebih banyak kueri daripada satu komputer besar.
10. Apa itu CDN?
Jaringan pengiriman konten adalah jaringan komputer di seluruh dunia yang berkolaborasi untuk menyediakan informasi Internet dengan cepat. Ini memungkinkan pengiriman cepat elemen seperti halaman HTML, file JavaScript, stylesheet, gambar, dan video yang diperlukan untuk memuat konten Internet.
11. Mengapa menggunakan CDN?
- Mengingat sumber daya statis membentuk sekitar 80% dari sebuah situs web, mengadopsi CDN mengurangi ketegangan pada server asal secara signifikan.
- Karena jarak tempuh yang lebih dekat, informasi akan diberikan lebih cepat kepada pemilik situs web yang memiliki pengunjung dari banyak wilayah geografis.
- Pengguna CDN juga mendapat manfaat dari kapasitas untuk menaikkan dan menurunkan skala dengan cepat sebagai respons terhadap lonjakan lalu lintas.
12. Apa perbedaan antara sharding dan partisi?
Database Sharding – Database sharding adalah metode mempartisi satu set data menjadi banyak database sehingga dapat disimpan di workstation yang berbeda. Kumpulan data yang lebih besar dapat dipecah menjadi potongan-potongan yang lebih kecil dan disimpan di beberapa node data, sehingga meningkatkan kapasitas penyimpanan total sistem.
Dengan menyebarkan data ke banyak mesin, database bersama dapat menangani lebih banyak kueri daripada satu sistem.
Partisi Basis Data adalah proses membagi objek basis data yang disimpan (tabel, indeks, dan tampilan) menjadi bagian-bagian terpisah. Untuk meningkatkan pengendalian, kinerja, dan ketersediaan, objek database besar dipartisi.
Dalam beberapa kasus, mempartisi dapat meningkatkan kecepatan saat mengakses data yang dipartisi. Partisi dapat mengurangi ukuran indeks dan meningkatkan kemungkinan menemukan indeks yang paling dibutuhkan dalam memori dengan bertindak sebagai kolom terdepan dalam indeks.
13. Apa sebenarnya caching itu?
Caching adalah teknik menyimpan salinan file di area penyimpanan sementara yang dikenal sebagai cache, yang mempercepat akses data dan mengurangi latensi situs. Hanya sejumlah data tertentu yang dapat disimpan dalam cache.
Akibatnya, menentukan teknik pembaruan cache yang paling cocok untuk tujuan bisnis sangat penting.
14. Apa itu server tepi CDN?
Server CDN yang menyimpan materi yang diperoleh dari server asal atau cluster penyimpanan Anda dikenal sebagai server tepi. Point of presence adalah istilah yang sering digunakan untuk menggambarkan edge server (POP).
Server tepi secara fisik diposisikan pada POP. Pada POP itu, informasi mungkin di-cache oleh banyak server edge.
Kemampuan untuk menyediakan bagian situs web dari beberapa tempat mengurangi jarak antara pengunjung dan server web, sehingga menghasilkan latensi yang lebih rendah. Server tepi CDN mencapai tujuan yang tepat ini.
15. Apa saja pola Konsistensi yang berbeda untuk desain sistem?
Setiap permintaan baca harus mengambil data tertulis terbaru, menurut teorema CAP. Ketika banyak salinan data dapat diakses, menyinkronkannya sehingga pelanggan menerima data baru secara terus menerus menjadi suatu kesulitan. Berikut ini adalah pola konsistensi yang mungkin:
- Konsistensi yang lemah: Setelah penulisan data, permintaan baca mungkin atau mungkin tidak dapat memperoleh data yang diperbarui. Tingkat stabilitas ini ideal untuk aplikasi waktu nyata seperti VoIP, obrolan video, dan permainan multipemain.
- Konsistensi akhirnya: Pembacaan pada akhirnya akan melihat data terbaru dalam milidetik setelah data ditulis. Data diduplikasi secara tidak sinkron dalam kasus ini. DNS dan sistem email adalah contohnya. Ini bekerja secara efektif dalam sistem dengan ketersediaan tinggi.
- Konsistensi yang kuat: Setelah penulisan data, pembaca selanjutnya akan melihat data terbaru. Data disalin secara sinkron dalam kasus ini. Ini dapat diamati di RDBMS dan sistem file, yang sesuai untuk transfer data.
16. Apa yang Anda maksud dengan penguncian optimis?
Penguncian optimis adalah mekanisme di mana Anda membaca catatan, mencatat nomor versi (cara alternatif termasuk tanggal, stempel waktu, atau checksum/hash), dan kemudian periksa kembali apakah versi tidak berubah sebelum menulisnya kembali.
Saat Anda menulis kembali catatan, Anda menggunakan versi untuk memfilter pembaruan untuk memastikan itu atomik. (yaitu, belum diubah antara saat Anda memeriksa versi dan saat Anda menulis catatan ke disk) dan memperbarui semuanya sekaligus.
17. Apa sebenarnya yang Anda maksud dengan “pemilihan pemimpin”?
Dalam sistem terdistribusi dengan banyak server yang berkontribusi pada ketersediaan aplikasi, ada kalanya hanya satu server yang bertanggung jawab untuk memperbarui API pihak ketiga, karena beberapa server dapat menyebabkan masalah saat menggunakan API.
Server ini dikenal sebagai server utama, dan prosedur pemilihannya dikenal sebagai pemilihan pemimpin. Ketika server pemimpin gagal dalam sistem terdistribusi, server harus memperhatikan kegagalan dan memilih pemimpin baru. Menggunakan teknik konsensus, pendekatan ini paling cocok untuk ketersediaan tinggi dan aplikasi konsistensi yang kuat.
18. Apa pendekatan Anda untuk merancang layanan pemendekan URL seperti TinyURL?
TinyURL mengubah URL panjang menjadi satu URL pendek yang unik. Teknologi ini juga dapat menerima URL pendek dan mengembalikan URL lengkap.
Apa saja kualitas penting?
- Buatlah URL yang lebih pendek dari aslinya.
- Simpan URL yang lebih panjang dan ganti dengan yang lebih pendek.
- Izinkan pengalihan dalam URL pendek.
- URL pendek dengan nama khusus didukung.
- Menangani beberapa pertanyaan sekaligus.
Apa masalah yang paling umum?
- Bagaimana Anda melacak penyimpanan database?
- Apa yang terjadi jika beban pengguna melebihi harapan?
- Bagaimana jika dua orang menggunakan URL khusus yang sama?
Pertimbangkan saran berikut:
- Hashing adalah gagasan yang dapat digunakan untuk menghubungkan URL lama dan baru.
- SISA API dapat digunakan untuk menangani komunikasi front-end dan menyeimbangkan beban berat.
- Multithreading adalah gagasan yang memungkinkan Anda menangani beberapa permintaan sekaligus.
- URL asli disimpan dalam database NoSQL.
19. Apa pendekatan Anda dalam mendesain twitter?
Persyaratan yang Diberikan:
- Mengirim tweet
- Mengikuti pengguna lain
- Umpan Tweet/umpan berita
- Sistem dapat diskalakan
- Memuat dengan cepat
- Sistem dapat diandalkan
Anda dapat mulai memikirkan desain API Twitter setelah Anda menetapkan kriteria. Ini adalah bagaimana hal itu akan muncul:
Untuk memulai, kita akan membuat sketsa titik akhir kunci API. Berikut adalah beberapa contoh:
- kirimTweet(pesan)
- ikutiPengguna(ID pengguna)
- berhenti mengikutiPengguna(ID pengguna)
- getFeed(halaman)
Arsitektur yang memungkinkan karakteristik ini kemudian dapat dibuat sketsanya. Kita bisa mulai dengan pengguna yang mengajukan permintaan server. Kami dapat memasang server API tambahan di belakang penyeimbang beban untuk membantu mengarahkan tingkat lalu lintas yang lebih besar guna memenuhi kebutuhan skalabilitas. Kita perlu menambahkan database untuk menyimpan tweet kita sekarang.
Penting untuk diingat bahwa API yang kami sediakan harus dapat diskalakan. Untuk membuat layanan ini skalabel, kami dapat meminta salah satu server API kami membaca dari cache terpisah untuk umpan berita kami. Saat melakukannya, kita juga harus menggunakan penyedia feed untuk menjaga agar cache feed kita tetap mutakhir.
20. Buat sistem umpan berita untuk Facebook
Umpan berita di Facebook memungkinkan pengguna untuk melihat apa yang terjadi di lingkaran teman, halaman favorit, dan organisasi yang telah mereka ikuti.
Apa sajakah beberapa karakteristik penting itu?
- Buat umpan berita berdasarkan posting dari entitas sistem lain yang diikuti pengguna.
- Teks, gambar, audio, dan video semua dapat digunakan dalam posting Newsfeed.
- Secara real-time, tambahkan konten baru ke umpan berita pengguna.
Apa saja masalah yang paling umum?
- Bagaimana jika postingan baru membutuhkan waktu lama untuk muncul di news feed?
- Bisakah algoritme mengelola lonjakan aktivitas pengguna?
- Postingan apa yang harus ditampilkan pertama kali di news feed?
Pertimbangkan saran berikut:
- Periksa mekanisme fanout untuk mendistribusikan posting ke pengikut.
- Periksa bagaimana sharding dapat digunakan untuk menangani beban pengguna yang tinggi secara efisien.
- Data umpan pengguna tidak boleh diduplikasi di banyak server. Sharding malah dapat dilakukan berdasarkan ID pengguna.
21. Apa yang dimaksud dengan properti BASE sistem?
Fitur BASE ada di mana-mana di database NoSQL yang baru saja muncul. Sebuah sistem BASE tidak memberikan konsistensi, menurut teorema CAP. Ini adalah akronim yang dibuat-buat yang sesuai dengan properti teorema CAP dari suatu sistem:
- Istilah "pada dasarnya tersedia" berarti bahwa sistem akan tersedia setiap saat.
- Keadaan lunak berarti bahwa keadaan sistem dapat bervariasi dari waktu ke waktu, bahkan jika tidak ada input yang diberikan. Hal ini sebagian besar disebabkan oleh konsistensi model pada akhirnya.
- Mengingat bahwa sistem tidak menerima masukan selama periode tersebut, konsistensi akhirnya berarti bahwa sistem akan menjadi konsisten dari waktu ke waktu.
22. Apa itu Load Balancing Dengan Teknik Afinitas Alamat IP?
Metode lain yang menonjol dari load balancing adalah afinitas alamat IP. Alamat IP klien terhubung dengan node server dalam metode ini. Satu node server menangani semua permintaan dari alamat IP klien.
Metode ini mudah diterapkan karena alamat IP selalu dapat diakses di header permintaan HTTP dan tidak diperlukan pengaturan lebih lanjut. Jika klien Anda cenderung menonaktifkan cookie, bentuk penyeimbangan beban ini dapat bermanfaat.
23. Apa sebenarnya algoritma Penggantian Cache (atau Kebijakan Penggusuran) itu?
Algoritme cache (juga dikenal sebagai algoritme penggantian cache, kebijakan penggantian cache, atau kebijakan pengusiran cache) adalah instruksi pengoptimalan, atau algoritme, yang dapat digunakan oleh program komputer atau struktur perangkat keras untuk mengelola cache data yang disimpan di komputer.
Caching meningkatkan kecepatan dengan menyimpan data yang baru-baru ini digunakan atau sering diakses di wilayah memori yang lebih cepat atau lebih murah untuk diakses daripada penyimpanan memori tradisional. Ketika cache penuh, algoritme harus memutuskan item mana yang akan dihapus untuk menggantikan yang baru.
24. Apa sebenarnya yang Anda maksud dengan transaksi terdistribusi?
Transaksi terdistribusi adalah setiap keadaan di mana satu peristiwa menyebabkan perubahan dua atau lebih sumber data yang berbeda yang tidak dapat dilakukan secara atomik.
Ini menjadi jauh lebih rumit di dunia layanan mikro karena setiap layanan adalah unit kerja, dan sebagian besar waktu banyak layanan harus berkolaborasi untuk membuat bisnis sukses.
25. Apa sebenarnya kelaparan itu?
Ketika sebuah utas tidak dapat memperoleh akses reguler ke sumber daya bersama, itu dikatakan kelaparan. Ini terjadi ketika utas "rakus" atau utas dengan "prioritas" lebih tinggi membuat sumber daya bersama tidak dapat diakses untuk jangka waktu yang lama.
Pertimbangkan objek yang menyediakan metode tersinkronisasi yang sering kembali terlambat. Jika satu utas berulang kali memanggil metode ini, utas lain yang memerlukan akses tersinkronisasi yang sering ke objek yang sama akan sering diblokir.
Kesimpulan
Sesi brainstorming adalah semua yang dibutuhkan oleh wawancara desain sistem. Kami telah menjawab pertanyaan wawancara Desain Sistem yang paling umum di posting ini.
Pemahaman yang komprehensif tentang metode yang Anda ambil saat membuat sistem tertentu sangat penting untuk lulus wawancara Desain Sistem.
Tinggalkan Balasan