Rencana
Sangat penting untuk memilikinya. Bahkan jika Anda membuat kesalahan di suatu tempat dan salah jalan dalam penalaran Anda, pendekatan terstruktur secara keseluruhan akan bermain di tangan Anda. Pada awalnya, Anda bisa cukup blak-blakan dan bertanya kepada orang yang diwawancarai tentang detailnya, tetapi mulai dari titik tertentu (yang dalam rencana saya di bawah ini sesuai dengan poin 3) Anda harus memiliki inisiatif sepenuhnya dan yang terbaik adalah tidak melepaskannya sampai akhir. Rencanaku adalah seperti ini:
- Kumpulkan daftar fitur utama dan tuliskan di sudut papan. Trik sederhana ini akan membantu Anda mengingat kendala atau asumsi penting.
- Memahami karakteristik teknis apa yang harus dimiliki sistem: RPS yang diharapkan, rentang waktu respons yang dapat diterima, ekspektasi dalam hal konsistensi dan keandalan.
- Buat solusi satu mesin paling sederhana yang entah bagaimana akan berfungsi. Tidak perlu memulai dengan 20 pusat data di seluruh dunia, jauh lebih baik untuk melakukannya secara bertahap.
- Temukan satu titik kegagalan atau hambatan kinerja.
- Tawarkan satu atau lebih pilihan untuk memecahkan masalah, jelaskan dengan jelas pro dan kontra dari masing-masing pilihan
- Pilih salah satu opsi dan lanjutkan ke langkah 4, jika masih ada waktu, dan jika waktu berakhir, lanjutkan ke item berikutnya
- Perkirakan ukuran penyimpanan, jumlah server, bandwidth jaringan, tulis semuanya dengan cermat
- Bonus: berbicara tentang fitur tambahan, penerapan ML, metrik produk, eksperimen
Pengendalian waktu sangat penting. Saya mencoba menghabiskan 5-10 menit pada dua poin pertama dan 5 menit pada dua poin terakhir.
Pengorbanan
Mereka perlu diucapkan, meskipun terlihat jelas. Setelah memperkenalkan bagian baru, penting untuk mengatakan sesuatu seperti "kami menambahkan elemen baru, ini akan menyelesaikan masalah ini dan itu, tetapi kami akan membayarnya." Pengorbanan bisa menjadi seperti ini:
- Setiap komponen sistem baru atau peningkatan jumlah suku cadang yang ada menyelesaikan masalah kecepatan beban / respons, tetapi menambah sakit kepala dengan dukungan dan penerapan.
- Sharding menyelesaikan batasan beban dan ruang, tetapi menambahkan masalah sharding ulang di masa mendatang.
- Penyimpanan yang direplikasi memecahkan masalah pemuatan dan keandalan, tetapi dalam kasus replika baca dan tulis, itu membuat Anda berpikir tentang nilai-nilai yang busuk dan oposisi dari ketersediaan dan konsistensi
- Cache menyelesaikan masalah pemuatan, tetapi membuat Anda berpikir tentang nilai tengik dan koherensi cache.
- Solusi Anda sendiri dapat dengan mudah dimodifikasi dan dioptimalkan untuk kebutuhan Anda, tetapi Anda harus menulisnya terlebih dahulu.
- Hal yang baik tentang solusi yang ada adalah bahwa solusi tersebut sudah ada, tetapi Anda harus mencari tahu.
Angka
Semua orang tahu tentang nomor latensi yang harus diketahui oleh setiap programmer , tetapi angka pada tautan, menurut saya, tidak terstruktur dengan cara yang paling nyaman dan saya memformatnya ulang dalam proses persiapan untuk memudahkan menghafal.
Pada akhirnya, hal-hal berikut ini penting:
- Ketahui waktu yang dihabiskan untuk membaca data dari berbagai tingkat cache prosesor, memori, SSD, HDD, dan jaringan.
- Ingat waktu perjalanan bolak-balik di dalam pusat data dan di seluruh dunia, serta latensi minimum yang dianggap seseorang sebagai kelambatan (~ 100 md).
- Untuk dapat dengan cepat mengubah byte menjadi gigabyte, nanodetik menjadi detik, dll., Saya mengembangkan keterampilan ini dengan sendirinya dalam proses latihan.
Praktek
Saya membeli papan tulis, menggunakan layanan yang sudah ada dan mencoba mencari cara bagaimana saya membuatnya dari awal. Saya menggambar diagram di papan tulis, menghitung beban dan sumber daya yang diperlukan, mencari titik lemah dalam desain saya. Saya juga memiliki teman baik dengan siapa kami mengatur pseudo-section dan melatih satu sama lain - itu adalah pengalaman yang sangat berharga. Setelah latihan, Anda dapat online dan mencari tahu bagaimana sebenarnya pelaksanaannya, lalu coba lagi. Setelah 10-20 putaran dengan layanan yang berbeda, set pencerahan masuk dan bagian berulang individu dalam sistem yang ada mulai terlihat jelas. Sparepart bisa, misalnya:
- Cari (sebaiknya dengan kemampuan untuk memperbarui indeks secara real time)
- (gfs, haystack)
- kv- (cassandra, dynamo)
- Message queue pub-sub (kafka)
- (twitter, instagram, facebook)
- , , - (whatsapp, telegram, battle.net)
- , - (skype, twitch, youtube)
- Grokking the system design interview. , , .
- System design primer. , .
- ( ). . , , .
- Banyak pilihan Skalabilitas Tinggi
- Nah, sumber yang paling penting adalah teman dan kenalan Anda yang mengetahui cara kerja sistem mereka dan dapat memberi tahu Anda tentang mereka.
Beberapa video dan saluran bagus
1. Skalabilitas
2. Pengenalan Arsitektur dan Desain Sistem Wawancara
3. Empat Pola Arsitektur Sistem Terdistribusi
4. Dropbox pada 2012
5. Slack
6. Twitter
7. Reddit
8. Instagram
9. Youtube pada 2007
10. Saluran tentang Desain Sistem dari rekan senegaranya
11 . saluran lain
12. Dan saluran lain
Jika Anda tidak memiliki kerangka waktu yang sulit, tetapi prospek wawancara sudah di depan mata, taktik yang paling tepat adalah terus membaca / melihat sesuatu di latar belakang tentang subjek sistem besar. Ini sama dengan teka-teki algoritmik: lebih baik menyelesaikannya secara berkala dan selalu dalam kondisi yang baik daripada mencoba menguasai seluruh kode cahaya pada akhir pekan sebelum wawancara. Namun, persiapan intensif untuk bagian arsitektural dalam waktu singkat membuat saya menjadi spesialis yang jauh lebih baik.