Lompat ke konten Lompat ke sidebar Lompat ke footer

Bagaimana Mempersiapkan Wawancara Desain Sistem Pada Tahun 2022



Bagi banyak insinyur perangkat lunak, Wawancara Desain Sistem tetap menjadi tantangan misterius.

Sebagian besar insinyur tidak pernah benar-benar bekerja pada sistem skala besar sebelumnya, jadi harus menjelaskan cara membuatnya tampak menakutkan. Dan karena pertanyaan wawancara desain sistem bisa sangat terbuka, sulit untuk mengetahui cara yang tepat untuk mempersiapkannya.

Sebelum saya menghabiskan delapan tahun bekerja pada sistem terdistribusi di Microsoft dan Facebook, saya benar-benar merasakan hal ini. Tapi sekarang, sebagai seseorang yang telah berpartisipasi dalam ratusan wawancara desain sistem, saya dapat meyakinkan Anda bahwa ada jalan keluarnya.

Pada postingan kali ini saya akan membahas tentang :

Latar belakang pribadi saya dalam Desain Sistem

Pada April 2008, saya bergabung dengan tim internal di Microsoft yang mengerjakan proyek skala besar yang membangun solusi penyimpanan terdistribusi.

Amazon telah meluncurkan Layanan Penyimpanan Sederhana mereka pada tahun 2006, dan Google meluncurkan solusi PaaS mereka Google App Engine pada bulan yang sama saya bergabung dengan tim, jadi kami berada di awal penguasaan komputasi awan. Kurang dari dua tahun kemudian, proyek itu diluncurkan ke dunia sebagai kategori produk baru: Microsoft Azure.

Ketika saya bergabung dengan tim Azure, saya berasal dari bekerja di Exchange. Saya memahami penyimpanan server dan manajemen klien, tetapi tidak pada skala ini, dan tentu saja tidak didistribusikan ke seluruh dunia. Itu membutuhkan banyak pembelajaran di tempat kerja.

Hari ini, pelajaran yang saya dan insinyur cloud lainnya pelajari di masa-masa awal itu dikodifikasikan ke dalam disiplin Desain Sistem. Sekarang bagi banyak perusahaan, Wawancara Desain Sistem berperan penting dalam proses wawancara pengembang – yang berarti sangat penting untuk mendapatkan pekerjaan dan menetapkan karier Anda pada lintasan yang baik.

Apa yang saya pelajari melalui ratusan Wawancara Desain Sistem

Pada saat saya memulai Edukasi, saya telah berpartisipasi dalam ratusan putaran wawancara baik sebagai orang yang diwawancarai maupun sebagai pewawancara. Seiring dengan meningkatnya skala Education, saya telah berpartisipasi dalam ratusan lainnya.

Pengalaman bekerja pada sistem skala web di Facebook dan Microsoft mengajari saya dua keterampilan utama untuk mendekati Wawancara Desain Sistem:

  1. Bagaimana mempelajari dasar-dasar sistem terdistribusi dengan cepat dan menerapkan prinsip-prinsip ini dalam memecahkan masalah dunia nyata
  2. Bagaimana mengevaluasi kandidat saat wawancara untuk Desain Sistem

Inilah bagian yang berlawanan: dalam Wawancara Desain Sistem, perusahaan sebenarnya tidak mencoba menguji pengalaman Anda dengan Desain Sistem.

Kandidat yang berhasil jarang memiliki banyak pengalaman bekerja pada sistem skala besar, dan pewawancara mengetahui hal ini. Sekali lagi, ini adalah disiplin yang baru ada selama sekitar lima belas tahun, dan seperti yang lainnya dalam rekayasa perangkat lunak, ini berkembang pesat.

Kuncinya adalah mempersiapkan SDI dengan maksud untuk menerapkan pengetahuan itu.

Bagaimana Anda mempersiapkan diri untuk Wawancara Desain Sistem?

Dalam Wawancara Desain Sistem, pewawancara meminta kandidat untuk merancang aplikasi skala web. Misalnya, mereka mungkin meminta Anda untuk mendesain Instagram , mendesain Netflix , atau mendesain backend Uber .

Tidak seperti pertanyaan wawancara pengkodean, Wawancara Desain Sistem adalah diskusi bentuk bebas, dan tidak ada jawaban benar atau salah. Sebaliknya, pewawancara mencoba mengevaluasi kemampuan kandidat untuk mengadakan percakapan tentang berbagai aspek sistem dan menilai solusi berdasarkan persyaratan yang mungkin berkembang selama percakapan.

Cara terbaik untuk memikirkan percakapan tersebut adalah dengan membayangkan bahwa Anda dan seorang kolega diminta untuk merancang sebuah sistem berskala besar, dan Anda menuliskan detailnya di papan tulis. Anda memahami persyaratan, ruang lingkup, dan batasan sebelum mengusulkan solusi.

Jadi bagaimana Anda merancang sistem dalam sebuah wawancara jika Anda belum pernah membangunnya dalam kehidupan nyata? Untuk memecahkan wawancara desain sistem Anda, Anda harus mempersiapkan dalam tiga bidang:

  1. Dasar-dasar sistem terdistribusi
  2. Arsitektur aplikasi web skala besar
  3. Merancang sistem terdistribusi

Masing-masing dimensi ini mengalir ke dimensi berikutnya.

Dasar-dasar sistem terdistribusi

Seperti dengan hal lain, penting untuk memulai dengan dasar-dasar. Dasar-dasar sistem terdistribusi dapat memberi Anda kerangka kerja tentang apa yang mungkin dan apa yang tidak dalam sistem tertentu.

Anda dapat memahami batasan arsitektur tertentu dan pertukaran yang harus Anda lakukan untuk mencapai tujuan tertentu (misalnya konsistensi vs. throughput tulis). Pada tingkat paling dasar, Anda harus mulai dengan kekuatan, kelemahan, dan tujuan dari sistem terdistribusi. Mampu berbicara tentang topik seperti:

Daya Tahan dan Konsistensi Data

Ketahui perbedaan dan dampak tingkat kegagalan solusi penyimpanan dan tingkat korupsi dalam proses baca-tulis.

Replikasi

Kunci untuk membuka kunci daya tahan dan konsistensi data; replikasi berkaitan dengan pencadangan data, tetapi juga mampu mengulangi proses dalam skala besar.

Partisi

Juga disebut pecahan, partisi membagi data di berbagai node dalam sistem Anda. Saat replikasi mendistribusikan data di seluruh node, partisi mendistribusikan proses di seluruh node. Ini mengurangi ketergantungan pada replikasi murni.

Konsensus

Salah satu node Anda ada di Seattle; lainnya di Lahore; lainnya di London. Ada permintaan sistem pada pukul 07:05 waktu Pacific Daylight. Bisakah ini direkam dan disinkronkan dengan benar di node jarak jauh, mengingat waktu tempuh paket data, dan dapatkah itu disetujui? Ini adalah masalah konsensus yang sederhana – semua node harus setuju, yang akan mencegah proses yang salah berjalan dan memastikan konsistensi dan replikasi data dan proses di seluruh sistem.

Transaksi Terdistribusi

Setelah Anda mencapai konsensus, sekarang transaksi dari aplikasi perlu dilakukan di seluruh basis data, dengan pemeriksaan kesalahan oleh setiap sumber daya yang terlibat. Komunikasi dua arah dan tiga arah untuk membaca, menulis, dan melakukan dibagikan di seluruh node peserta.


Untuk mempelajari topik ini lebih dalam, saya merekomendasikan jalur pembelajaran Skalabilitas & Desain Sistem untuk Pengembang dari Educative . Jika Anda sudah bekerja di ruang angkasa, Anda mungkin ingin melihat Sistem Terdistribusi untuk Praktisi .

Design Twitter
Newsfeed
Design
Uber
Design
Instagram
N-Tier Applications
CDNs
Caching
HTTP & REST
Consensus
Partitioning
Replication
Durability
Designing Large Scale Systems
Architecture of Scalable Web Applications
Distributed System Fundamentals
System Design Interview
Mempersiapkan Wawancara Desain Sistem

Arsitektur aplikasi web skala besar

Kita sudah tahu bahwa sebagian besar aplikasi berskala besar adalah aplikasi web. Meskipun bukan raksasa konsumen seperti Netflix, Twitter, dan Amazon, perusahaan beralih dari sistem lokal seperti Exchange ke solusi cloud dari Microsoft, Google, dan AWS. Itulah mengapa ada baiknya untuk memahami arsitektur sistem seperti itu.

Anda harus belajar tentang topik-topik seperti:

Aplikasi N-Tier

Pemrosesan terjadi pada berbagai tingkatan dalam sistem terdistribusi. Beberapa proses ada di klien, beberapa di server, dan lainnya di server lain - semuanya dalam satu aplikasi. Lapisan pemrosesan ini disebut tingkatan, dan memahami bagaimana tingkatan tersebut berinteraksi satu sama lain dan proses spesifik yang menjadi tanggung jawabnya adalah bagian dari desain sistem untuk web.

HTTP dan REST

HTTP adalah satu-satunya API yang menjalankan seluruh Internet – ini adalah sistem yang kami gunakan untuk mengirim setiap email, streaming setiap film Netflix, dan menelusuri setiap daftar Amazon. REST adalah seperangkat prinsip desain untuk berinteraksi langsung dengan API yaitu HTTP, memungkinkan sistem yang efisien dan terukur dengan komponen yang diisolasi dari asumsi masing-masing. Menggunakan prinsip-prinsip ini dan API terbuka memudahkan orang lain untuk membangun pekerjaan Anda atau memperluas kemampuan Anda dengan ekstensi ke aplikasi dan layanan mereka sendiri.

DNS dan Load Balancing

Jika Anda memiliki 99 pengguna secara bersamaan, penyeimbangan beban melalui perutean DNS dapat memastikan bahwa server A, B, dan C masing-masing menangani 33 klien, bukan server A yang kelebihan beban dengan 99 dan server B dan C tidak digunakan. Mengarahkan permintaan klien ke server yang tepat, tingkat yang tepat di mana pemrosesan terjadi, membantu memastikan stabilitas sistem. Anda perlu tahu bagaimana melakukan ini.

Caching

Cache berfungsi agar data dan aplikasi Anda yang paling sering diminta dapat diakses oleh sebagian besar pengguna dengan kecepatan tinggi. Pertanyaan untuk aplikasi web Anda adalah apa yang perlu disimpan dalam cache; bagaimana kita mengarahkan lalu lintas ke cache; dan apa yang terjadi ketika kita tidak memiliki apa yang kita inginkan dalam cache?

Pemrosesan Aliran

Pemrosesan aliran menerapkan proses yang seragam ke aliran data. Jika suatu aplikasi memiliki data yang terus menerus dan konsisten melewatinya, maka pemrosesan aliran memungkinkan penggunaan sumber daya lokal secara efisien dalam aplikasi.


Edukatif menawarkan kursus yang berguna tentang Aplikasi Web dan Arsitektur Perangkat Lunak yang mencakup topik-topik ini dan lainnya yang penting untuk desain sistem, termasuk AJAX, arsitektur monolitik dan layanan mikro, frontend, dan database.

Merancang sistem terdistribusi

Ini bisa tampak seperti banyak, tetapi sejujurnya hanya membutuhkan beberapa minggu persiapan — lebih sedikit jika Anda memiliki dasar yang kuat untuk dibangun.

Setelah Anda mengetahui dasar-dasar Sistem Terdistribusi dan Arsitektur Web, sekarang saatnya untuk menerapkan pembelajaran ini dan merancang sistem dunia nyata. Menemukan dan mengoptimalkan solusi potensial untuk masalah ini akan memberi Anda alat untuk mendekati wawancara desain sistem dengan percaya diri.

Setelah Anda siap untuk melatih keterampilan Anda, Anda dapat mengambil beberapa contoh masalah dari wawancara dunia nyata – bersama dengan tip dan pendekatan untuk membangun sepuluh layanan web yang berbeda. Saya telah menulis tentang beberapa pertanyaan wawancara desain sistem teratas di blog lain.

Jika Anda merasa siap untuk terjun ke fase wawancara, tidak ada sumber daya persiapan yang lebih baik selain Grokking Wawancara Desain Sistem . Itu diperiksa dan divalidasi oleh Uber, Lyft, Microsoft, dan insinyur Google yang membantu merancang dan membangun sistem aktual yang ditanyakan oleh perusahaan-perusahaan itu dalam wawancara mereka.

Menutup pikiran

Dunia lebih terhubung dari sebelumnya.

Konsumen dan bisnis sama-sama online, dan bahkan program lama bermigrasi ke cloud. Sistem terdistribusi adalah masa kini dan masa depan dari disiplin rekayasa perangkat lunak. Dan karena pertanyaan Wawancara Desain Sistem merupakan bagian yang lebih besar dari wawancara pengembang, memiliki pengetahuan tentang sistem terdistribusi akan membayar dividen dalam karir Anda.

Selamat belajar!

– Fahim

Jika Anda tidak mengetahui dasar-dasarnya, Anda tidak akan siap untuk merancang sebuah layanan; jika Anda tidak tahu cara menggabungkan sistem tersebut, Anda tidak akan dapat merancang solusi khusus; setelah Anda merancang sistem skala besar, Anda dapat mengambil pelajaran dan mengintegrasikannya ke dalam pengetahuan dasar Anda.

Mari kita lihat masing-masing dimensi ini secara berurutan.