Giriş Giriş Giriş

Açık uçlu sistem tasarım soruları, özellikle üst düzey mühendislik rolleri için teknik röportajların bir temelidir.Tek bir doğru cevabı olan algoritmasal sorunlardan farklı olarak, bu sorular mimara karmaşık bir sistem tasarımının belirsiz kısıtlamalar altında olduğunu değerlendirmektedir. Başarının anahtarı mükemmel bir çözüm değil, ancak yapılandırılmış bir şekilde, esnek bir düşünce sürecine işaret ediyor.Bu kılavuz herhangi bir sistem tasarım senaryosuna adapte edebileceğiniz kanıtlanmış bir çerçeveden geçiyor, bir URL kısası tasarlarken gerçek zamanlı sohbet uygulaması için.

Bu yaklaşımın ustalığı sadece röportaj performansını artırmak değil, aynı zamanda gerçek dünya tasarım becerilerini de keskinleştirecektir. Her adıma beton örnekler ve en iyi uygulamalarla atlayalım.

Soruyu Tam Olarak Anlayın

Kutuları ve okları çizmeye başlamadan önce, sorunu derinden anlamanız gerekir. Çoğu aday bir çözüme acele eder, ancak kritik bağlamı kaçırdıklarını fark etmek için. Görüşmecinin beklentilerini karşılayarak soruları açıklayarak başlayın.

Clarify Scope ve Hedefler

Soruları sorun: Kullanıcılar kim? Sistemin birincil amacı nedir? Belirli bir özellike odaklanmalıyız (örneğin, bir tweet) veya tüm platforma mı? Örneğin, bir sürüş paylaşımı uygulamasını tasarlamanız istenirse, gerçek zamanlı eşleştirme, ödeme işleme ve fiyatlandırmaya ihtiyacınız olup olmadığını doğrulayın, ya da sadece eşleştirme motoruna odaklanmanız gerekir.

Constraints Tanımları

Tasarımınızı şekillendirecek kısıtlamaları anlayın: beklenen sayıda kullanıcı (örneğin, milyonlarca vs. binlerce), veri hacmi, coğrafi dağıtım, bütçe ve zaman piyasa. 10.000 kullanıcı ile bir başlangıç için bir sistem, düşük gecikme için optimize ederseniz, yüksek kesinti veya güçlü tutarlılık için bir sistem.

Başarı Metriklerini Onaylayın

Başarının neye benzediğini sorun: Sistem yukarı saat (99.99), 200ms altında yanıt süresi veya belirli bir okuma yazma oranıyla başa çıkma yeteneği? Bu, doğru ticarete öncelik vermenizi sağlar.

Problemi Sormak

Açık bir resminiz olduğunda, sistemi yönetilebilir modüllere devre dışı bırakmak. Bu sizi boğulur ve tüm önemli yönleri kapsamanıza yardımcı olur.

Temel Bileşenleri Tanımlamak

Çoğu sistem müşteri, API'ler, uygulama sunucuları, veritabanı, önbellekler, kuyruklar ve depolama içerir. Basit bir liste ile başlayın: kullanıcı yönetimi, içerik ingestion, arama, feeds, bildirimler, vs. Bir video akış platformu için, temel bileşenler yükleme hattı, transkript hizmeti, içerik teslimat ağı (CDN), oyun geri yükleme API ve öneri motoru.

Map Data Flow

Sketch the primary data flow: Bir kullanıcı önemli bir eylem gerçekleştirdiğinde ne olur? Müşteriden sunucuya veritabanına ve geri gönderme yolu izleyin. Veriler nerede oluşturulur, depolanır, işlenir ve tüketilir. Bu daha sonra veritabanı ve iletişim modellerini seçiminizi bilgilendirecektir.

Etkileşimleri ve Bağımlılıkları Tanımlayın

Bir ödeme hizmetine bağlı olarak bir sipariş servisi gibi, bir ödeme hizmetine bağlı olarak, hataların ve dayanıklılığın etkisine bağlı olarak, bir sipariş servisine bağlı olarak, bir sipariş servisine bağlı olarak nasıl etkilendiğini unutmayın.

Gereksinimler ve Kıtlamalar

Açıklamada hem işlevsel hem de işlevsel olmayan gereksinimleri ifade etmektedir. Bu, sistemin nasıl performans göstermesi gerektiğini ayrılayabileceğinizi gösterir.

Fonksiyonel Gereksinimler

Sistem desteklenmelidir.For a file storage service like Dropbox, these include: upload, download, share, senkronizasyon cihazlar ve sürüm tarihi.Öncelikle iyi-neden fazla.

Non-Functional Gereksinimler

Bunlar sistemin kalitesi özellikleridir. Commons şunları içerir:

  • [FONT:0)Scalability): Sistem kullanıcılarda veya verilerde büyüme nasıl çalışır?
  • [FONT=0)Availability): Uptime yüzdesi (e.g.,% 99.9 kullanılabilir).
  • [FONT=0)Latency[[Dönetici: Kabul edilebilir yanıt süreleri (örneğin, 300ms altında p99).
  • [FONT:0]İstecilik[Dönetici: Güçlü vs. eventual consistency trade-offs.
  • [FONT:0) Güvenlik): Kimlik doğrulama, yetkilendirme, şifreleme.
  • [FONT:0]Cost[[DÜDÜT:1): altyapı ve operasyonel yük için bütçe.

Örneğin, bir bankacılık uygulaması geç saatlerde tutarlılık ve güvenlik önceliklerini önceliklendirir, ancak sosyal medya beslemesi daha düşük gecikme için olaysal tutarlılığı kabul edebilir.

Önceki Özellikler

Tüm özellikler eşit değildir. Tasarım çabalarınızı odaklanmanın önemine göre onları sıralamak basit bir matrix kullanın:

  • [FONT:0]Must-have[[Dönetici: Sistem işe yaramazsa, mesaj almak, depolama tarihi, bildirim almak ve almak.
  • [FONT:0]Nice-to-have[DÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜDÜ: Gelişmiş deneyim ama makullar, mesaj reaksiyonları veya video çağrıları okumak için ertelenebilir.

Görüşmeler sırasında, zorunlu olanlarla başlayın. Zaman izinleri varsa, tasarıma güzel-to-have özellikleri için nasıl uzatacağınızı tartışabilirsiniz.Bu, ticaret ve artışla başa çıkabilirsiniz.

Yüksek Mimarlık Tasarım

Bu, gereksinimleri somut bir sistem mavi baskıya çevirebileceğiniz yerdir. Büyük bileşenleri ve bağlantılarını gösteren bir blok diyagramı ile başlayın.

Mimari Stil seçin

Monolithic, mikroservices, event-güdümlü veya tabakalı mimari arasında karar verin. ölçeklenebilir sistemler için mikro hizmet yaygındır, ancak karmaşık uygulamalar için, açık modül sınırları ile monolithic bir yaklaşım yeterli olabilir.

Anahtar Teknolojileri Seç

Tam ürünleri seçmen gerek olmasa da, kategorilerden bahsedin:

  • Teknoloji seçenekleri için neden: Güçlü tutarlılık için SQL, NoSQL esnek şemalar için, statik içerik için mesaj kuyrukları.
  • Sadece şartlara dayanarak. Örneğin, PostgreSQL'i işlemsel veriler ve Redis'i caching için kullanın, çünkü sistem hem tutarlı hem de hıza ihtiyaç duyar.

Bir Diagram ile Illustrate

Verbally ne çizeceğinizi tarif edin: "Kullanıcılar web sunucularına giden bir yük dengelemek için vurdu. Web sunucuları, kullanıcı hizmetine giden bir API ağ geçidi çağırıyor, posta servisi ve bildirim servisi. Hizmetlerimiz kendi veritabanıyla konuşuyor ve Kafka'ya bir işleme için mesajlar yayınlar."

En iyi uygulamaların farkındalığını göstermek için AWS Well-Architected Framework) tarafından ortak desenleri referans edebilirsiniz.

Data Storage and Management

Data Continuence genellikle sistem tasarımının en kritik parçasıdır. Mağazayı nasıl ziyaret ettiğinizi ve verileri korumak.

Veritabanı Type seçin

  • [FONT=0)SQL (relational)[Dönetici: Veriler yapılandırılmış, ilişkiler konusu olduğunda ve ACID uyumluluğu gereklidir (örneğin finansal işlemler).
  • [FONT=0) HayırSQL[DÜDÜDÜDÜDÜDÜDÜŞÜNÜSÜŞÜNÜSÜŞÜNÜ: 0: 0: 3 (PamD)))))))))))))))Yüksek yazı yükleri, esnek şemalar veya belge odaklı veriler. Tipler: belge mağazaları (MongoDB), anahtar değer (Redis, DynamoDB), geniş bant (Cassandra), grafik (Neo4j).

In many large systems, you use a hybrid approach: SQL for core entities, NoSQL for fast lookups or analytics. Explain your choice with reasoning like "We store user profiles in PostgreSQL for relational queries, but use DynamoDB for session tokens because we need high availability and low latency."

Data Schema ve Modeling

Alanlarla ve ilişkilerle ilgili büyük masaları/koleksiyonları tanımlamak. Sosyal medya beslemesi için masaları olabilir: Kullanıcı, Post, Like, Follow. fast reading vs normalize edilmiş arkadaş listelerini nasıl saklayabilirsiniz.

Replication, Backup, and Disaster Recovery

Kullanılabilirlik sağlamak için, bölgeler arasındaki veri çoğaltmasını tartışmak (multi-master vs. single-master) Mention yedekleme stratejileri (günlük anlık görüntüler, yaz-ahead logs) ve kurtarma noktası hedefleri (RPO) / kurtarma zamanı hedefleri (RTO) kritik sistemler için, başarısız zamanı azaltmak için aktif-aktif replikasyon kullanın.

Data Partitioning (Sharding)

Bir sunucu verileri ele geçiremediğinde, kafaları bölmek için bölmek (örneğin, kullanıcı id hash) verileri dağıtmak ve sıcak noktalardan kaçınmak.Köpçeler gibi zorluklarla ilgili sorunlarla ilgili sorunlarla ilgili sorunlarla ilgili olarak tartışın (örneğin, uygulama düzeyindeki bir dizinle katılmak veya ayrı bir indeksleme hizmeti kullanmak).

Scaling ve Performans

Scalability, sistemin bozulmadan büyümeyi sağlayabilir. Her iki hesaplama ve veri katmanını da kapsar.

yatay vs. Dikey Scaling

Dikey ölçeklendirme (bigger servers) daha basit ama sınırları vardır. yatay ölçeklendirme (daha fazla düğümler) elastiklik sağlar ancak devlet dağıtımında karmaşıklık sağlar. Devletsiz hizmetler için yatay tercih edin (databases), yatay ölçeklendirme genellikle sharding veya replikasyon gerektirir.

Caching Strategies

Sık sık geçncy ve veritabanı yükünü azaltmak için verilere erişilir:

  • [FONT:0)CDN[DÜT:1]: Statik varlıklar için (görüler, CSS, videolar).
  • [FONT:0)Uygulama önbellek[[Döncükler: Redis veya Memcached for API response or session data.
  • [FONT=0)Database sorgu önbellek[[[Dönetici: veritabanı seviyesindeki kılavuz ortak sorgular (ama geçersizlik ile dikkatli).

Önbellekli geçersizlikleri tartışın: TTL, yazı yoluyla, yazı-behind. Örnek: "Yeni bir posta oluşturulduğunda, posterin takipçileri için önbellekleri geçersiz kılıyoruz."

Yük Balancing ve yatay Scaling

Birden çok tierse yük dengelemek: API sunucularına müşteri, API sunucularına hizmet örneklerini ve mikro hizmetle ilgili algoritmaları tartışmak (toplama, en azından bağlantı, oturum açma için tutarlı olan). küresel ölçek için DNS tabanlı yük dengeleme (Herhangi bir miktar) veya küresel bir yük dengeleme (her şey) kullanmak (her şey)

Database Scaling Techniques

  • [FONT:0)Kaynaklar [[Döneticiler)[[[Dönler:0) Okutucular[Döneticiler için sorgular.Yazlar birincil olarak geri döner, kopyalara (asynchronous replication Faydalı).
  • [FONT=0)Connection havuzu[[Dönetici: Uygulama veya proxy katmanında onları havuzlayarak veritabanı bağlantılarının yükünü azaltın (örneğin PgBouncer).
  • [FONT:0)Query optimizasyonu[[Dönetici: Indexing, query refaksiyon, denormalizasyon.

Adres Potansiyel Challenges

Her sistem başarısızlık noktalarına sahiptir. Proaktif olarak onları tanımlar ve mitigations önerebilir.

Şişencks ve Throughput Issues

Common şişenler veritabanı yazma kapasitesi, tek işlem senkronizasyonu ve ağ bant genişliği içerir. Çözümleri: bölüm verileri, asynchronous işleme (queues) kullanın ve I/O. Örneğin, veritabanı yaz hızı yetersizse, buffer bir kuyruk ve onlarla yazar.

Güvenlikle ilgili

Kontrollü (OAuth2, JWT), izin (RBAC), geri bildirimde şifreleme (AES-256) ve transit (TLS), ve ortak saldırılara karşı koruma (SQL enjeksiyonu, DDoS, XSS) UseASIFLT:0)OWASP yönergeleri) bir referans olarak. Örneğin, "All API uç noktaları geçerli bir JWT gerektirir ve kötüye kullanılması önlemek için oranı sınırlamaktayız."

Başarısızlık ve Red dışılık

Parça hataları için plan:

  • [FONT:0)Hizmetten vazgeçin: Yük dengesinin arkasındaki çok kopyaları çalıştırın.
  • [FONT=0)Database başarısızover: Otomatik promosyon veya multi-region aktif-aktif olan birincil enerjik kullanın.
  • [FONT:0)Circuit breakers[Dönetici: altta hizmet yavaş olduğunda hatalarını önlemek (bakınız:2)Martin Fowler'in DevreBreaker modeli).
  • [FONT:0)Graceful deme[[[Dönetici: Öneri servisi başarısız olursa, hata sayfaları yerine genel içeriğe hizmet eder.

İzleme ve gözlemlenebilirlik

Mention log (yapılan loglar), metrikler (değerlendirme, hata oranları, CPU/memory), ve traksiyon (Jaeger veya Zipkin gibi ağla) Örneğin, "Prometheus'u panmetrikler için kullanıyoruz, Grafana'yı günlük analiz için kullanıyoruz."

Açıkça ve açık bir şekilde iletişim kurmak

Tasarımınız sadece bunu açıklamak için yeteneğiniz kadar iyidir. Röportajcılar düşünce sürecinizi değerlendirir, sadece son diyagramı değil.

Sizin Sebepinizi Keşfedin

Örneğin bir başka yaklaşımı neden seçtiniz: “Devrimiçi olmayan bir katılımcıyla son derece yüksek yaz bekliyoruz ve lineer ölçeklenebilirliğe ihtiyacımız var, bu yüzden elastik arama hizmeti kullanarak ayrı bir arama hizmeti oluşturacağız.”

Analoglar ve Gerçek Dünya Örnekleri

Bilinen sistemlere yeniden bakın: “Bu, Twitter'ın tweetlerini nasıl ele aldığına benzer – aktif kullanıcılar ve fanout-on-okuyucuları daha az aktif olanlar için yazacağız.”

Geri bildirim için adaptasyon

Eğer röportajcı yeni bir kısıtlama getirirse (örneğin, “Kullanıcılarımız sadece iki bölgede yoğunlaşır), tasarımınızı mükemmel bir şekilde ayarlamanız ve değişimin daha önceki kararlarınızı nasıl etkilediğini açıklamanız. Flexability is a sign of experience.

Görsel Aids Kullanın

Eğer röportaj beyaz bir tahta veya sanal beyaz tahta üzerindeyse, diyagramlar artacaktır. Etiket bileşenleri açıkça ifade eder.Eğer bu sözcüyse, zihinsel bir resim sunar: "Üç tiers -web, API ve veriler - yatay olarak ölçeklendi."

Düzenli olarak Uygulama

Sistem tasarımı, kasıtlı uygulama ile gelişen bir yetenektir. İşte uygulamanızı nasıl yapılandırın.

Çalışma Ortak Tasarım Sorunları

Klasik sorunlarla çalışmak: URL kısa, Twitter feed, Uber, YouTube, Dropbox, WhatsApp, vb. Her biri için yukarıdaki çerçeveyi uygulayın. Çözümünüzü yazın ve bilinen referanslarla karşılaştırın.

Mock Röportajları

Bir partnerle veya kullanım platformlarını DÖRT:0)Pramp[DÜT:1) veya [[Üye Olmayanlar Arası Röportajlar) veya [[Döncüler:2|görüşme.io[DÜye Olmayanlar, Tarifler ve derinlikler hakkında geri bildirim alın.

Read Architecture Case Studies

Netflix, Uber, Amazon ve Stripe gibi şirketlerden mühendislik bloglarını okuyun. Genellikle sistemlerinin gerçek dünya ticaretlerini ve evrimlerini paylaşıyorlar.TheurFLT:0) Yüksek Scalability blog mükemmel bir kaynaktır.

Zaman Kendinizi Kendine Zaman Zaman Zaman Zaman Zaman

Görüşmelerde, genellikle bir tasarım sorusu için 40-60 dakikanız var. Tam bir tasarım (bu anda ticaretle ilgili gereklilikleri açıklayarak) tamamlamak için bir zamanlayıcı kullanın. kaliteli ödün vermeden hız oluşturmak için zamanlayıcı kullanın.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

Açık uçlu sistem tasarım soruları, "doğru" cevabı bulmak ve daha fazla yapısal, adapte edilebilir ve iyi dünya sistemlerinin nasıl geliştiğini öğrenmekle ilgilidir.Bu çerçeveyi takip ederek - öncelikler, mimar, adres zorlukları tanımlamak ve açıkça iletişim kurmakla ilgilidir - düzenli olarak herhangi bir tasarımla pratik yapmayı unutmayın, geri bildirim arayabilir ve gerçek dünya sistemlerinin nasıl geliştiğini merakla öğrenebilirsiniz.