Vorbereitung auf das System | Programming Made Easy | Skillshare

Playback-Geschwindigkeit


1.0x


  • 0.5x
  • 0.75x
  • 1x (normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      Willkommen zu diesem Kurs!

      1:35

    • 2.

      Was ist Systemdesign?

      5:33

    • 3.

      Eine Vorlage für jede Frage

      7:12

    • 4.

      Der URL-Verkürzung Service

      24:22

    • 5.

      Die photo Anwendung

      19:02

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

83

Teilnehmer:innen

--

Projekte

Über diesen Kurs

Heutzutage verlangen fast alle Unternehmen in ihren System nach der Gestaltung verschiedener Systeme . Hauptsächlich die system ist für erfahrene Menschen, aber Top-Unternehmen wie die von FANG und so weiter, sind gespannt auf die Designs noch frischer zu stellen. Es gibt eine ein- bis zweistündige Runde für das Systemdesign. Die system hat mehrere Zwecke, der Interviewer möchte deine Wissensbreite kennen, sie wollen verstehen, wie du dich einem offenen Problem näherst und wie du stressige Situationen bewältigen kannst.

Systemdesign ist auch als High Level Design bekannt. Hochrangige Konstruktion ist nichts als die Entscheidung darüber, welche Komponenten wir in unserem System benötigen, wie alle Komponenten miteinander kommunizieren sowie externe Systeme und was wir in der Kapazität unseres Systems sind. Dies sind wichtige Dinge beim Entwerfen jedes Systems, um es zuverlässig, verfügbar, konsistent und effizient zu machen.

Dieser Kurs ist schrittweise gestaltet, um das Verständnis zu verstehen. Zunächst werden alle Konzepte und Komponenten des Systemdesigns diskutiert. Ein vollständiger Beweis Schritt für Schritt wird erläutert, um jedes system zu begegnen. Alle Fallstudien werden in einer umfassenden Weise vorgelegt und werden durch die Einhaltung dieser Schritte gestaltet.

Triff deine:n Kursleiter:in

Teacher Profile Image

Programming Made Easy

Software Developer

Kursleiter:in

Skills dieses Kurses

Design Sonstiges Design Set Design
Level: All Levels

Kursbewertung

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen auf Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

Transkripte

1. Willkommen zu diesem Kurs!: Hallo Leute und willkommen zu diesem Kurs zur Vorbereitung auf das Systemdesign-Interview. Mein Name ist Alex und ich bin Softwareingenieur, der Test wird durchgeführt und während meiner Zeit in Softwareunternehmen auch Systemdesign-Interviews gegeben während meiner Zeit in Softwareunternehmen auch Systemdesign-Interviews . Als ich von der Möglichkeit hörte einen Kurs zu erstellen, um mehr über dieses komplexe Interview zu erklären , war Typ II sehr begierig darauf, einen zu entwickeln. Dieser Kurs wird in vier Lektionen strukturiert sein , die praktische Schritte enthalten, die Sie unternehmen müssen, um genau zu verstehen , worauf sich die Interviewer bei der Planung dieser Typen freuen werden bei der Planung dieser Typen freuen des Interviews, das Sie zuerst weiterentwickeln werden, präsentieren Sie Ihnen, was Systemdesign ist. Und dann schauen wir uns die Vorlage an, die funktioniert, wenn es darum geht, eine Frage zum Systemdesign zu lösen. Danach werden wir auch zwei der häufigsten Interviewfragen aus diesem Bereich lösen , indem wir eine neue URL, einen Verkürzung des Dienstes und das Foto-Sharing-System entwerfen . Wenn Sie daran interessiert sind Ihre Interviewfähigkeiten für Softwareentwickler zu verbessern, sollten Sie diesen Kurs für Sie in Betracht ziehen. Es gibt keine anderen Anforderungen als eine Internetverbindung S für das Projekt dieser Klasse, es wird äußerst praktisch sein und Sie müssen die Schritte in der Kursvorlage befolgen . So können Sie auf Ihrer Reise beginnen Fragen zum Systemdesign zu lösen. Wir dachten, das Gesagte, ich glaube, wir sind bereit. Wir sehen uns in der ersten Lektion. 2. Was ist Systemdesign?: Hallo Leute und willkommen zurück im System. Hast du ihm das interviewte Tutorial erzählt. In dieser Vorlesung werden wir diskutieren, was genau Systemdesign ist, was ein Systemdesign-Interview sein soll. Wir werden uns auch einige allgemeine bewährte Praktiken ansehen , wenn es um Ihr eigenes Systemdesign-Interview geht. Möglicherweise bringen Sie sie in die Position, in der Sie versuchen, einen Job für ein Software-Engineering-Unternehmen zu finden. Und Sie haben die beiden gehört, ich werde ein Systemdesign-Interview zusammen mit den technisch orientierten Interviews führen , in denen Sie tatsächlich beschichten sollten. Im Allgemeinen dürfen Sie in Interviews mit Systemdesign nicht wirklich beschichten. Vielleicht nur ein bisschen, um Ihre Punkte in einigen Teilen zu beweisen . Jetzt beginnen Sie mit der Definition, was genau System einfach gestaltet hat. Es ist nur der Prozess der Definition verschiedener Module, Schnittstellen, Komponenten und auch die Daten für ein System, um bestimmte Anforderungen zu erfüllen , die in Ihrer Frage angegeben werden können , dass Sie eine neuer im Interview. Jetzt ist der Systementwicklungsprozess tatsächlich der Prozess , den Sie bei Ihrer Arbeit durchführen werden. Wenn Sie die Entwicklerposition landen, wo Sie das System tatsächlich erstellen oder ändern werden. Zusammen mit den Prozessen, Modellen, Methoden und auch Praktiken, die zu ihrer Entwicklung verwendet werden. Im Moment ist das Systemdesign jedoch nur der Prozess der Definition der Komponenten. Es geht also im Grunde darum, was nötig wäre wenn man versucht, ein Projekt von Grund auf neu zu entwickeln. Abgesehen von diesem Systemdesign-Interview zum Interview, das Sie möglicherweise mit dem einzigen Ziel geführt haben, den Kandidaten zu diesem Systemdesign-Interview zum Interview, das Sie möglicherweise mit dem einzigen Ziel geführt haben erlauben , die es nehmen. Wie vielleicht Programmierer, aber es können auch Ingenieure oder Designer sein. Die Möglichkeit, ihr Fachwissen auf dem Gebiet zu beweisen , auf dem sie sich bewerben. Die greifbare Anwendung von Wissen bei Lösung eines echten Problems, mit dem das Unternehmen möglicherweise konfrontiert ist. Das sind also wieder sehr große und allgemeine Probleme. Sie werden also gebeten, so etwas wie einen WhatsApp-Chat oder ähnliches zu implementieren . Wir werden in diesem Kurs auch konkrete Beispiele haben . Aber auch hier sind es große Probleme, und Sie müssen darüber sprechen und darüber nachdenken , wie Sie sie sowohl aus Sicht der Zeit- als auch der Raumkomplexität optimal umsetzen würden . Nun wird dieses Systemdesign-Interview auch später im Interviewprozess durchgeführt. Zuallererst erhalten Sie möglicherweise ein technisches Interview, in dem Sie tatsächlich aufgefordert werden, ein tatsächliches Problem zu codieren. Und später im Interviewprozess, nur so DC, haben Sie Vorkenntnisse über einige Themen und können die Dinge auch aus einer größeren Perspektive betrachten. Sie werden Ihnen auch das Systemdesign-Interview geben . In dieser Studie sollen Sie sehen, wie gut Sie in einem Team arbeiten. Und Sie nähern sich auch einer Problemlösung mit Fragen, die, wie ich bereits erwähnt habe, offen sind . Und Sie müssen nur die bestmögliche Lösung erreichen. Dieses Interview soll Ihre Verarbeitung analysieren , die Probleme lösen, Ihren Denkprozess bei der Erstellung und Gestaltung der Systeme, um eventuellen Kunden zu helfen , die Firma, in die Sie einsteigen möchten braucht. Es ist auch eine Gelegenheit für Sie dem Einstellungspersonal, entweder dem Manager oder anderen Entwicklern, mit denen Sie dieses Interview führen, zu zeigen entweder dem Manager oder anderen Entwicklern . Die beiden sind wertvoll für das Mitglied, indem sie Ihre Fähigkeiten auf diese Weise zeigen. Wenn es um Interviewfragen und Antworten im Systemdesign geht , sind sie in der Regel sehr zweideutig. Und dies soll nur die Möglichkeit geben, Ihre Qualifikationen zu demonstrieren. Aber Sie müssen sich nicht beeilen, eine Antwort zu geben , die möglicherweise falsch oder nicht einmal falsch ist, aber nicht ausreichend dokumentiert ist. Sie treffen sich auch, um Fragen zu stellen, bevor Sie auf ihre Frage antworten nur um den Umfang einzuschränken. Gib dir eine Anweisung, um auch die Erklärungen zu klären. Es ging um eine allgemeine Präsentation eines Systemdesign-Interviews. In der nächsten Vorlesung werden wir ein wenig diskutieren, wie wir jede Frage des Systemdesign-Interviews angehen können . Es gibt einen vierstufigen Prozess, der dokumentiert wurde, dass er funktioniert, um auch einen Blick darauf zu werfen. Aber im Moment vielen Dank, dass Sie bis zum Ende dieser Vorlesung bei mir geblieben sind. Und ich freue mich darauf, euch im nächsten zu sehen. 3. Eine Vorlage für jede Frage: Hallo Leute und willkommen zurück zum Systemdesign-Interview Tutorial. In dieser Vorlesung werden wir uns einige Schritte ansehen, die wir in einer Vorlage verwenden könnten , wenn wir bei einem Interview eine Frage zum Systemdesign erhalten . Diese vorübergehende Zeit, über die Sie sprechen möchten, ist eine Einheitsgröße für alle Arten von Vorlagen, wenn es um Fragen zum Systemdesign geht , es gibt nur ein paar Schritte, die Sie benötigen, um sicherzustellen, dass Sie kommen durch, wenn Systemdesign-Interview beantworten. also mit dieser Vorlage beginnen, müssen Sie als Erstes geteilt werden wenn Sie die Frage gestellt werden , dass Sie sie vollständig verstehen. Also müssen wir dieses Problem verstehen. Sie müssen den Umfang des Designs lösen und festlegen , über das Sie sprechen werden. Dies ist der Teil, in dem Sie Fragen stellen müssen nachdem Sie die vollständigen Details zu den Fragen gegeben haben. Und Sie müssen auch eventuell auftretende Einschränkungen festlegen . Sie müssen sich nicht beeilen , das Problem zu lösen, bevor alle Fakten haben und andere Dinge haben, die Ihnen möglicherweise unklar sind, vom Interviewer ausgeräumt werden. Der nächste Schritt wäre, ein hochrangiges Design vorzuschlagen. Ich sage gesagt, du musst nicht in die Implementierung einsteigen , ohne es zu bestätigen. Der Ansatz, über den Sie nachdenken erfüllt tatsächlich alle Einschränkungen, die sie wollen. Sie könnten also einen Ansatz vorschlagen, von dem Sie glauben , dass er der beste ist, um das Systemdesignproblem zu lösen. Sehen Sie, wie sie auf Ihre Herangehensweise reagieren , bevor Sie tatsächlich implementieren, wo Sie in jedem Teil Ihres Vorschlags auch weiter auf Details eingehen . Jetzt ist der dritte Teil tatsächlich am zeitaufwendigsten des Modus erledigt , nämlich das Design Deep Dive. Dies geschieht, sobald Sie mit Ihrem Interviewer bestätigt haben, dass Sie auf dem richtigen Weg sind Zu diesem Zeitpunkt müssen Sie nur auf alle Details der Anwendung eingehen alle Details der Anwendung um zu lösen, dass du dir ausgedacht hast. Und dies ist der Teil , in dem Sie ein tiefes Verständnis und ein tiefes Vokabular des Systemdesigns haben müssen. Und bei diesem Design Deep Dive gibt es wieder viele Schritte und beginnen tief zu tauchen. Die erste Frage, die Sie stellen müssen, sind die Anforderungen. Und die Anforderungen könnten funktional oder nicht funktionsfähig sein. Die funktionalen Anforderungen sind nur Funktionalitäten , die das Problem, das Sie lösen , den Benutzern zur Verfügung stellen. So gibt es zum Beispiel in Ihren sozialen Medien eine Funktionalität , mit der Sie einen Beitrag von anderen Benutzern mögen können . Dies ist eine Anforderung , die funktional ist. Sie müssen alle funktionalen Anforderungen mit Ihren Interviewern nach Kurs festlegen und durchlaufen alle funktionalen Anforderungen mit , sie auflisten und ihre Bedeutung bestätigen. Jetzt können die Anforderungen auch nicht funktionsfähig sein, und hier können einige Dinge wie die Latenz sein, nämlich die Reaktionszeit der Benutzerinteraktion. Zuverlässigkeit, was bedeutet, dass es keinen Datenverlust geben wird. Die Konsistenz, was bedeutet , dass hohe Verfügbarkeit. Jetzt zwei Dinge, die Sie auch beachten müssen, wenn Sie versuchen, Ihre Komponenten zu entwerfen . Du musst sie machen. Zuallererst fehlertolerant, was bedeutet, dass Ihr System jederzeit betriebsbereit ist , obwohl es einige Fehler oder einen Datenbank-Scratch geben kann . Und sie müssen auch skalierbare Krankheit sein. Eine weitere wichtige Tatsache, skalierbar, bedeutet nur , dass Sie mit dem wachsenden Datenverkehr auf Ihrem System umgehen müssen . Geht. Darüber hinaus zum zweiten Teil dieses Entwurfs Deep Dive. Abgesehen von den Anforderungen müssen Sie auch eine Speicherschätzung basierend auf der Datenmodalität vornehmen. Sie müssen nur eine grobe Schätzung darüber abgeben, Sie müssen nur eine grobe Schätzung darüber abgeben wie viele Daten gespeichert werden müssen. Außerdem müssen Sie über die Anzahl der Anfragen, den von Ihnen bereitgestellten Service und das Leseschreibverhältnis nachdenken . Nachdem Sie über all diese Speicherschätzungen gesprochen haben, müssen Sie über ein Datenbankdesign nachdenken. Hier finden die Aktionen statt , die Sie als Benutzer ausführen können , um mit Ihrem System zu interagieren. Sie können hier auch darüber nachdenken , welche Art von Datenbank Sie verwenden werden und warum Sie sich für SQL, NoSQL usw. entscheiden können. Sie müssen nur über jede Option diskutieren und darüber nachdenken, welche am besten zu Ihrer Lösung passt . Dann wäre ein vierter Schritt grundlegenden High-Level-Design zu beginnen, bei dem Sie über die Clients, die Server und auch die Datenbank schreiben können . Und ausgehend von diesem grundlegenden Design können Sie außerdem auf weitere Details eingehen und die Dienste isolieren, die über das Caching gesprochenen Daten und auch die Replikation der Dienste partitionieren und Datenbanken, sogar Lastenausgleich und Nachrichtenwarteschlangen. Wenn das zu Ihrem spezifischen Problem passt. Es gibt natürlich optional, welche anderen Dinge Sie denken können , abhängig dem Problem, das Ihnen gegeben wird, nämlich die Verschlüsselung einiger Nachrichten oder Passwörter. Einige Telemetrie, die sicherstellen, dass Sie Dinge im Auge behalten , die in Ihrer Anwendung am meisten verwendet werden. Einige API-Gateway-Dienstermittlung und auch d-Analysedienst , der die Anforderungen und die Benutzerbeta analysiert. Und nach diesem Design Deep-Dive, dem letzten Schritt, müssen Sie dies tun, um einfach abzuschließen, was bedeutet, dass Sie mit dem gegebenen Design aufbauen können. Wenn es sinnvoll erscheint, können Sie darüber nachdenken, einige Engpässe und Verbesserungsbereiche zu identifizieren einige Engpässe und Verbesserungsbereiche und ein wenig darüber zu sprechen. Dies ist die allgemeine Struktur, die Sie beachten müssen, bevor Ihr Systemdesign-Interview beginnen , ohne das Problem zu erhalten. In einigen zukünftigen Vorträgen werden wir uns bestimmte Fragen zum Systemdesign ansehen bestimmte Fragen zum Systemdesign wie das Entwerfen des winzigen URL-Systems, Suchmaschinen, freigegebenen Laufwerken usw. kann aus dieser genauen Vorlage sehen, wie ich all diese Schritte anwende, meine Herangehensweise bei der Lösung von DC-Problemen. Wenn das für Sie interessant klingt, freue ich mich darauf, Sie in den nächsten Vorträgen zu sehen. Vielen Dank, dass Sie bis zum Ende dieser Zeit bei mir geblieben sind. 4. Der URL: Hallo Leute und willkommen zurück zum Systemdesign-Interview Tutorial. In diesem Vortrag werden wir ein berühmtes Problem diskutieren , das oft in solchen Interviews gegeben wird. Und genauer gesagt das Entwerfen eines neuen URL-Kürzungsdienstes. Genau wie zum Beispiel haben Sie vielleicht einen winzigen URL-Punkt L gesehen und so weiter. In diesem Vortrag werde ich alle Aspekte durchgehen , die Sie berücksichtigen müssen, wenn S dieses Thema in einem Systemdesign-Interview trägt . Und nachdem Sie sich diese Vorlesung angesehen haben, werden Sie wissen, wie Sie diese Frage stellen können. Aber nicht nur das, Sie würden auch wissen, wie Sie ähnliche Problemstudien angehen können. Denn durch die Lösung dieses Problems werden wir auch die Vorlage respektieren, die wir für jede Frage des Systeminterviews verwenden sollten jede Frage des Systeminterviews verwenden , die uns gestellt wird. Beginnend mit diesem Interviewproblem müssen wir, wie gesagt, einen URL-Kürzungsdienst wie eine winzige URL entwerfen . Und diese Oberfläche wird natürlich eine kurze Lyse liefern , rote zu lange URLs. Jetzt ist die Schwierigkeit des Systemdesign-Interviews ziemlich grundlegend und oft die am meisten gegebene im Systemdesign-Interview. Es ist also sehr wichtig, dass Sie wissen, wie Sie dieses Problem lösen können. Das erste, was wir besprechen müssen, ist warum müssen wir die URL verkürzen? Hier sind mehrere Gründe und warum wir das brauchen würden. Zuallererst sparen sie viel Speicherplatz, wenn sie angezeigt werden, sagen sie voraus und so weiter. Und wenn Sie sie von Ihrer eigenen Tastatur aus eingeben möchten, neigen Sie weniger dazu, Fehler zu machen, wenn Sie sie eingeben. Es wird auch verwendet, um die Links über Geräte hinweg zu optimieren und die Leistung von Anzeigen zu messen. Das zweite, was wir ansprechen müssen die Anforderungen und Ziele unseres Systems, die wir entwerfen müssen. Bei dieser Frage erinnere ich Sie hier daran, dass Sie, wenn Sie sich in einem Systemdesign-Interview befinden, sowie andere Arten von Interviews. Und du bekommst eine Frage. Sie müssen am Anfang alle Anforderungen klären . Bevor Sie versuchen, Ihr Problem zu beantworten. Sie müssen die Frage stellen , um den genauen Umfang des Systems zu ermitteln , das Sie Interviewer berücksichtigen, und gehen Sie zu den Funktionen, die diese winzige URL-Oberfläche den Endbenutzern bereitstellen sollte. Wir haben sie in die beiden wichtigsten Kategorien von Anforderungen unterteilt , die funktional und nicht funktional sind. Wenn wir über die funktionalen Anforderungen nachdenken, können wir uns vorstellen, eine URL zu unserem Service zu geben und eine kürzere und einzigartige zurückgenerieren zu können. Und das wird als Kurzlink bezeichnet . Dieser Link, den unser Service bereitstellt, sollte ebenfalls kurz genug sein, um ihn einfach kopiert und einfügen zu können. Und wir werden später diskutieren, was kurz genug bedeutet und uns auch auf diesen Begriff einigen. Jetzt kann die zweite funktionale Anforderung sein, dass der Benutzer Kürze einen benutzerdefinierten Wert für seine URLs auswählen kann. Wenn sie also nicht wollen, dass eine zufällig von unserer Oberfläche erzeugt wird, sollten sie auch eine eigene auswählen können . Diese Verbindungen, die unsere Oberfläche bereitstellt sollten auch eine Zeitspanne nach dem Tod haben. Sie sollten gelöscht werden und laufen ebenfalls ab. Denn sonst würde unsere Datenbank irgendwann überlaufen , wenn Sie diese Links weiterhin darin haben würden. Schließlich sollte der Zugriff der Benutzer auf einen kurzen Link natürlich natürlich den ursprünglichen Link verweisen, den der kurze Link darstellt. Es gibt auch einige nicht funktionale Anforderungen für den URL-Kürzungsdienst, nämlich dass die rote Richtung in Echtzeit ohne Latenz erfolgen sollte . Stellen Sie sich vor, Sie möchten auf einen L-Y-L-Y-Link klicken und es wird ewig dauern, bis es geladen wird. Sie waren der tatsächliche Link, auf den Sie zugreifen möchten , der überhaupt nicht gut wäre. Und auch nervig. Eine weitere nicht funktionale Anforderung wäre auch , dass der verkürzte Link , der bereitgestellt wird, von einem böswilligen eventuellen Benutzer überhaupt nicht zu erraten oder vorhersehbar sein sollte . Die letzten und wichtigsten nicht funktionalen Anforderungen. Wäre, dass unser System, unser Service hoch verfügbar sein sollte. Denn wenn es ausgefallen wäre, ist die URL-Umleitung, dass sie natürlich mit ihr führen würde . Einige zusätzliche Anforderungen können hier nicht sein, dass unser Service für APIs zugänglich sein sollte. So können Dritte eine tatsächliche Anfrage an unsere Endpunkte stellen und auf die URL zurückgekürzt werden als Antwort auf die URL zurückgekürzt werden, wenn die Anfrage in Ordnung ist. Auch einige Analysen, die wir mit diesem Zitronenbaum machen können. Und sie sollten sich darum kümmern, wie oft Auferstehung stattfand und je öfter die Richtung verknüpft ist, Zugang und solche Dinge. Nachdem wir all diese Anforderungen und Kosten des Systems besprochen haben, können wir zum dritten übergehen, nämlich die Schätzung der Kapazität, die der Dienst haben sollte, und auch die zu überwindende Einschränkung. Wenn wir also über den Service nachdenken , den wir implementieren werden, wird er natürlich schwer gelesen. liegt daran, dass viele rote Richtungsanfragen im Vergleich zur neuen URL-Kürzung verfügbar sein werden. Und wir können von etwa 90 zu einem Verhältnis zwischen Lese und Schreiben ausgehen . Denn wenn Sie darüber nachdenken, generieren Sie den Link nur einmal, aber natürlich würde er viel mehr als einmal gelesen. Nun, die Verkehrsschätzungen für den Dienst, können wir davon ausgehen, dass wir über 100 oder 500 Millionen neue URL-Kürzung pro Monat haben 100 oder 500 Millionen neue URL-Kürzung werden , die erstellt werden. 500 Millionen URLs sind vielleicht Tower-Service. Mit unserem Prozentsatz des Leseschreibvorgangs können wir in diesem Monat mit rund 50 Milliarden roten Erektionen rechnen können wir in diesem Monat mit rund 50 Milliarden roten Erektionen rechnen. Wir können auch über Abfragen pro Sekunde für unser System nachdenken , um zu verhindern, dass unsere Datenbank abstürzt. Abgesehen davon müssen wir uns auch die Speicherschätzungen ansehen. Hier können wir wieder Schätzungen machen. Angenommen, wir speichern alle URL-Kürzungsanfragen für fünf Jahre. Da wir 500 Millionen neue URLs und B- und D-Objekte haben, die wir voraussichtlich speichern werden, werden etwa 30 Milliarden betragen. Und vorausgesetzt, sie haben jeweils etwa 400 bis 500 Bytes benötigt, benötigen wir ungefähr 15 Terabyte um unsere gesamten Daten zu speichern. Wir müssen auch über die Bandbreitenschätzungen nachdenken, nicht nur über die Speicherschätzung für richtig, wir können jede Sekunde mit etwa 200 bis 300 neuen URLs rechnen. Und das ist natürlich ein Top. Wir werden uns die Spitze dieses Sortiments ansehen. Die gesamten eingehenden Daten für unseren Service würden also etwa 500 Byte pro Anfrage mal zwei oder 300 neue URLs und B Sekunde betragen, also etwa 100 bis 200 Kilobyte pro Sekunde. Eine Leseanfrage. Seit jeder Sekunde erwarten wir bereits etwa 20 bis 30 Tausend URL-Richtungen , dass die gesamten ausgehenden Daten etwa zehn Megabyte pro Sekunde betragen werden. Wir können uns auch eine gewisse Speicherschätzung ansehen. Was ist, wenn wir einige unserer am häufigsten verwendeten kurzen URLs abfangen wollen , die sehr SH gesagt x sind. Nun, wir können uns die 8020-Regel ein wenig ansehen. Das heißt, dass die 20% unserer URLs 80% des Datenverkehrs generieren werden. 20% unserer generierten kurzen URLs werden also die heißen sein. Und kurz darauf können wir sehen, dass wir, wenn wir 20 bis 30 Tausend Anfragen pro Sekunde haben , etwa 1,7 bis 8 Milliarden Anfragen pro Tag erhalten werden . Um 20% davon zu erfassen, benötigen wir ungefähr 170 Gigabyte Speicher. Wie Sie bei meinem Ansatz gesehen haben, der Teil der Kapazitätsschätzung und müssen der Teil der Kapazitätsschätzung und -beschränkungen sehr einfach sein , indem Sie über das Limit nachdenken und wie viel tatsächliche Kapazität und Bandbreite schätzen wie viel tatsächliche Kapazität und Bandbreite er wird von implementierter Oberfläche übernommen. Ich sagte, wir können uns auch einige APIs ansehen und diesen Teil besprechen. Wir können einige Endpunkte zur Verfügung stellen , die unser Service für Dritte bereitstellen wird , die auf unsere Service-Anzeige zugreifen, Anfragen an unsere Endpunkte stellen und als antworte die verkürzte URL. So können wir zum Beispiel einen Endpunkt haben , der nach Osten die URL erstellen nennt. Und es kann die ursprüngliche URL als String-Parameter verwenden, der natürlich die ursprüngliche URL ist , die gekürzt werden soll. Und auch eine Art Schlüssel, der mit dem API-Entwicklerschlüssel eines Kontos verknüpft ist . Wir wissen also, wer diese Anfragen stellt und haben eine gewisse Sicherheit in diesen Teilen. Wie ich bereits sagte, an diesem Endpunkt, würden wir natürlich die erfolgreiche Einfügung zurückgeben. Würde natürlich eine Zeichenfolge mit der verkürzten URL zurückgeben , wenn die Anfrage gestellt wird. Nun, und wenn nicht, vielleicht ein Fehlercode, können wir auch einen Lösch-URL-Endpunkt haben. Was das wichtig ist, können Sie es auch erwähnen. Wir müssen auch darüber nachdenken, wie wir Missbrauch hier verhindern können. Wenn wir eine API bereitstellen, weil ein böswilliger Benutzer Sie aus dem Geschäft bringen und Ihre Dienste zerstören könnte , wenn er eine olivfarbene URL ist das aktuelle Design und füllen Ihre Datenbank aus. Wir können hier den API-Entwicklerschlüssel einschränken . Es kann auf eine bestimmte Anzahl von URL-Kreationen beschränkt sein , die zehn oder 20 Tage oder ähnliches sagen. Jetzt wäre der nächste Schritt, über das Datenbankdesign und das Schema nachzudenken . Die Definition des Schemas in den frühen Phasen des Interviews würde Ihnen wirklich helfen, den Fluss zwischen den Komponenten zu verstehen , den Fluss zwischen den Komponenten würde Sie zu einer späteren Partitionierung der Daten führen. Nun wären einige Beobachtungen hier, dass wir Milliarden von Aufzeichnungen für die Dienste speichern müssen. Wir werden eine Menge verkürzte URL haben. Aber diese Objekte werden, wie gesagt, sehr klein sein, 500 Kilobyte. Zwischen den Datensätzen gibt es keine Beziehungen. Abgesehen davon, welche Benutzer diese URL erstellt haben, können Sie hier ziemlich frei tun, was wir wollen. Und eine weitere Beobachtung bezüglich des Datenbankdesigns und Relevanz ist , dass unser Service sehr stark auf dem roten Teil sein wird. Wir benötigen, wie gesagt, zwei Tabellen, eine zum Speichern der Informationen über die URL-Zuordnungen und eine für die Daten des Benutzers, der den Kurzlink erstellt hat. Da erwarten wir, viele Zeilen zu speichern. Und wir müssen auch keine Beziehung zwischen Objekten beibehalten . Jetzt wäre die SQL-Art der Wahl hier sehr gut, da es auch sehr einfach zu skalieren ist. Also können wir uns etwas wie Dynamo DB ansehen. Ich bin hierher gekommen, während Sie lösen, wir müssen das Datenbankschema in einem Interview erstellen und darüber nachdenken welche Art von Datenbank verwendet werden sollte, und auch eines aus Ihrem eigenen Wissen vorschlagen. Der sechste Schritt hier wird das grundlegende Systemdesign und der Algorithmus sein. Hier werden wir also tatsächlich auf die Implementierung eingehen , wie unser Service hinter den Kulissen funktionieren wird. Das Problem, das wir hier lösen, besteht darin, den verkürzten eindeutigen Schlüssel zu generieren , der einem bestimmten größeren und größeren URL-SIC zugeordnet wird . In dieser Situation haben wir zwei Ansätze. Wir können diese Schlüssel der Linie mit einem Service zur Schlüsselgenerierung generieren . Und es wird vorher zufällige Strings mit sechs Buchstaben erzeugen zufällige Strings mit sechs Buchstaben und in einer neuen Datenbank speichern. Wann immer wir die URL hier verkürzen wollen, können wir eine nehmen, die bereits von der Oberfläche generiert wurde und Jahre sie jahre hat. Dieser Ansatz ist sehr einfach und schnell, aber weil wir die URL nicht codieren, müssen wir uns keine Gedanken über Doppelarbeit oder Absprachen machen. Der Service der Schlüsselgenerierung wird sicherstellen, dass alle Schlüssel eindeutig sind. Wir müssen hier auch einige Nebenläufigkeitsprobleme beachten, denn sobald ein Schlüssel verwendet wird, sollte er in unserer Datenbank markiert werden, um sicherzustellen, dass er nicht wieder verwendet wird . Und wenn es mehrere Server gibt, die diese Schlüssel gleichzeitig lesen, erhalten Sie möglicherweise ein Szenario, in dem zwei oder mehr Dienste versucht haben, aus der Datenbank zu lesen, obwohl von oben bis zum Service Endpunkte, es wäre sehr weniger wahrscheinlich. Jetzt können die Server diese Generationssysteme zum Lesen und Festzelte in einer Datenbank verwenden. Und sie können zwei Tabellen verwenden, um die Schlüssel zu speichern. Einer für die eigentlichen Schlüssel , die noch nicht verwendet werden, und einer für die Schlüssel , die bereits verwendet werden. Und sobald dieser Generationsdienst einem der Server den Schlüssel gibt, essen Sie sie und bringen Sie sie an den Tisch. Wir müssen auch darüber nachdenken, wenn unser Erzeugungssystem, das das einzige System unseres gesamten Dienstes ist, nicht schlecht wäre, wenn es sterben würde? Und das ist ein sehr guter Punkt denn wir brauchen ein Standby-Replikat, dieses Generationssystem, um einen Standby-Server zu haben übernehmen kann , um sie zu generieren, ist es einfach für den Fall, dass etwas passiert mit einem primären. Nun, ein weiterer Ansatz hier, andere tote Degeneration der Schlüssel mit dem Service. Ist auch die eigentliche URL-Codierung zu codieren. Eine tatsächliche URL kann durch Berechnen eines eindeutigen Hash erstellt werden. Entweder wenn wir über die Shot 250 Sitze oder die leeren fünf sprechen 250 Sitze oder die leeren fünf und wir die angegebene URL mit diesen Algorithmen hashen können, können diese Hashes zur Anzeige codiert werden. Und eine vernünftige Frage bei diesem Ansatz wäre, wie groß wäre der Kurzschlüssel? Es können sechs bis zu 20 gerade Zeichen sein, aber das wäre ein ziemlich langer Schlüssel. Wir können die Base 64-Codierung verwenden. Und wenn wir sechs Buchstaben lange Tasten verwenden, wird es etwa 64 bis zur Macht von sechs möglichen Strings dauern . Wenn wir acht Buchstaben lange Schlüssel erzeugen würden, werden wir etwa 280 Billionen mögliche Strings haben. Aber für unser System wäre die Buchstabennummer ziemlich hoch. Und wir können davon ausgehen, dass sechs Buchstaben für unsere Anzahl von URLs ausreichen können . Wenn wir nun den MD5-Algorithmus als Hash-Funktion verwenden, wird er natürlich, wie Sie vielleicht bereits wissen, 128-Bit-Hash-Werte bereitstellen wie Sie vielleicht bereits wissen, . Nach der Base-64-Codierung erhalten wir eine Zeichenfolge mit mehr als 21 Zeichen. Jetzt haben wir nur noch Platz für sechs oder acht Zeichen pro Kurzschlüssel. Wie wählen wir dann unseren Schlüssel aus? Nun, wir können die ersten Buchstaben nehmen, aber dies kann zu einer Schlüsselduplizierung führen. Und um das zu lösen, können wir entscheiden, einige andere Zeichen aus der Kodierung zu einige andere Zeichen aus der entfernen oder dazwischen zu tauschen , um dieses Problem ganz zu vermeiden. Wir können auch, nachdem wir die Lösung in einem Interview gegeben haben, über einige Probleme mit unserer Lösung nachdenken, wenn es sich herausstellt, dass es sich als nicht kugelsicher und diese verschiedenen Probleme herausstellt und diese verschiedenen Probleme von Ihnen und nicht von den Interviewer. Sie werden wahrscheinlich zusätzliche Punkte erhalten, da Sie sich als bewusster eventueller Mitarbeiter herausstellen. Die verschiedenen Taschentücher mit der Kodierung einer tatsächlichen URL unter Verwendung eines Hashtags. Eine eindeutige Lösung kann sein , dass mehrere Benutzer, die gleiche URL eingeben , dieselbe verkürzte URL erhalten können. Die Nebenläufigkeitsprobleme sind, dass es der Fall B war, auch der letzte Ansatz. Aber hier ist noch eins. Was ist, wenn Teile der URL, URL codiert sind? Die Problemumgehungen hier nochmal, das Anhängen einer zunehmenden Sequenznummer an jede Eingabe-URL, um sie eindeutig zu machen und ihren Hash zu generieren. Eine andere Lösung könnte darin bestehen, die Benutzer-ID anzuhängen, die eindeutig an die Eingabe-URL sein sollte. Wenn sich der Benutzer hier nicht angemeldet hat, könnte dies ein Problem sein, da wir dies benötigen würden, um die Eindeutigkeit des Schlüssels zu bestätigen. Selbst wenn nach all diesen Schritten, die wir unternommen haben, um sicher zu gehen, dass nichts wachsen könnte, haben wir immer noch einen Konflikt. Wir können den Schlüssel weiter generieren , bis wir den einzigartigen erhalten. Umschließen des Basissystems entwirft einen Algorithmus-Teil. Der zweite Teil hier wäre die Datenpartitionierung und Replikation unseres Dienstes. Um unsere Datenbank zu skalieren, müssen wir sie partitionieren, damit sie weitere Informationen speichern kann. Wir brauchen etwa Milliarden von Einträgen in unserer Datenbank. Und hier können wir einen Blick auf die beiden Arten der Partitionierung werfen, die es gibt, die den Schraubenschlüssel und die Hash-basierte Partitionierung sind . Beginnend mit der bereichsbasierten Partitionierung von Wochenendportal-URLs in separaten Partitionen basierend auf den Hash-Schlüsseln, Zeichen oder sogar einer von ihnen. So können wir alle URLs speichern, die zum Beispiel Weizen oder Buchstaben a beginnen , in einer Partition, und diejenigen , die mit dem Buchstaben B beginnen, in einer anderen speichern und so weiter. Und wenn wir uns im Gegensatz dazu die hashbasierte Partitionierung in diesem Schema ansehen, können wir den Hash des Objekts, das wir speichern, nehmen und dann basierend auf der zu verwendenden Partition berechnen. In unserem Fall können wir den Hash des Schlüssels oder die Kürzung verwenden, um die Partition zu bestimmen , mit der wir diese spezifische URL starten werden. Das nächste, worüber wir nachdenken müssen, wenn dem Systemdesignproblem nähern, ist der Cash-Teil. So können wir URLs abfangen, auf die häufig zugegriffen wird, wie wir bereits zuvor vorgeschlagen haben. Und wir können jede der Regal-Lösungen verwenden , die es beispielsweise von memcached gibt. Wir können aber auch vollständige URLs speichern. Und indem Sie das tun, speichern Sie die vollständige URL süß ihre jeweiligen Hashes in ihrem Widmungssurfer. Bevor Sie darüber nachdenken können, kann der Back-End-Speicher bei diesem Ansatz schnell prüfen, ob der Cache bereits über die Design-URL verfügt. Und so optimaler Service. Wir müssen auch darüber nachdenken, wie viel Cache-Speicher wir haben sollten. Also können wir anfangen. Etwa 20% des täglichen Datenverkehrs und basierend auf den Nutzungsmustern des Kunden passen außerdem an, wie viele Fälle Server wir benötigen. Wie oben geschätzt, benötigen wir etwa 170 Gigabyte Speicher, um 20% des Datenverkehrs einzuzahlen. Da ein moderner Dienst 256 Gigabyte Speicher haben kann , kann das gesamte Bargeld problemlos in einen Computer passen. Es ging darum mit dem Caching-Teil. Wir können auch über den Load Balancer in unserem System nachdenken, was ziemlich einfach ist. Wir können darüber nachdenken, diese Lastenausgleichsschicht an drei Stellen hinzuzufügen . Und das wäre zwischen den Clients und den Anwendungsservern zwischen Anwendungsservern und Datenbankservern und Cache-Servern. Weiter zu der Tanzsache, über die wir nachdenken müssen, wenn diese Frage zum Systemdesign uns diese Frage zum Systemdesign stellen, ist das Bereinigen oder Bereinigen der Datenbank. Der Eintrag sollte natürlich nicht ewig in unserer Datenbank bleiben , da er ihn ausfüllen und einen Absturz verursachen würde . Epoche. Ist eine festgelegte Ablaufzeit erreicht? Was sollte mit dem Link passieren? Nun, wenn wir uns dafür entscheiden, ständig nach Experimenten zu suchen, um sie zu entfernen würde dies auch viel Druck auf unsere Datenbank ausüben. Stattdessen können wir die abgelaufenen Links langsam entfernen , indem wir eine faule Bereinigung durchführen. Und die Art und Weise, wie unser Service sicherstellt , dass nur abgelaufene Links mit B gelöscht werden mit B gelöscht wenn der Benutzer versucht, auf den inspirierten Link zuzugreifen, haben wir den Zugangscode für den Benutzer gelöscht. Auf diese Weise ist das Löschen aller URLs auf einmal abgelaufen und ein Datenbankabsturz riskierte. Wir können auch eine Standardablaufzeit für jeden Link haben , soweit dieser Aspekt der Fall ist. Schließlich müssen wir auch bedenken, dass der Limit-Baum , der einige Fragen beantworten sollte wie oft es sich um eine kurze URL handelt, verwendet wurde. Wie war der Benutzerstandort? Was wäre das Datum und die Uhrzeit des Zugriffs und so weiter. Sicherheits- und Berechtigungsteil , der ein weiterer wichtiger ist. Wir können die Berechtigungsstufe speichern, wobei jede URL in der Datenbank öffentlich oder privat ist. Für die privaten können wir auch eine separate Tabelle erstellen, um Benutzer-IDs zu speichern , die Berechtigungen zum Anzeigen dieser bestimmten URL haben. Wenn es diese Berechtigung nicht hat, kann unser Endpunkt oder x natürlich in der kurzen URL ein HTTP für einen einzigen Code zurückgeben, was bedeutet, dass nicht genügend Achse ist in der kurzen URL ein HTTP für einen einzigen Code zurückgeben, was bedeutet, . Natürlich. Dies waren vor allem die Winkel, die Sie beachten müssen, wenn Sie sich einer Lösung für die Frage zur Verkürzung der URL-Oberfläche in einer Überprüfung des Systementwurfs nähern Frage zur Verkürzung der URL-Oberfläche . Ich hoffe, ihr habt wirklich etwas aus dieser Vorlesung herausgeholt. Und ich danke dir sehr bis zum Ende bei mir geblieben bist. Ich freue mich auch darauf, euch im nächsten zu sehen. 5. Die photo: Hallo Leute und willkommen zurück zum Systemdesign-Interview Tutorial in dem wir verstehen, wie wir ein Interview bestehen können, das aus C3b-Schilderfragen besteht. In diesem Vortrag werden wir ein weiteres sehr häufiges Problem besprechen , das bei diesen Interviews gegeben wird , und schauen uns genau an , wie wir sie lösen können, um, wie ich schon sagte, das Interview zu bestehen . Das Problem, das wir in dieser Vorlesung nicht betrachten werden , ist die Entwicklung eines Foto-Sharing-Dienstes. Hier können die Benutzer Fotos hochladen , um sie mit anderen Benutzern zu teilen. Und natürlich können einige ähnliche Dienste Flickr oder einige Social-Media-Plattformen sein , obwohl sie mehr Funktionen in sie integriert haben . Zunächst verwende ich bei der Annäherung dieses Problems die allgemeine Vorlage, die für jede Frage zum Systemdesign geeignet ist , die in einem Interview gegeben werden kann , über das ich in einer vorherigen Vorlesung gesprochen habe. Und der erste Schritt, nachdem Sie die Frage gründlich verstanden und andere Abfrageanwendungen gestellt haben, die Sie möglicherweise von Ihrem Interviewer haben, besteht darin , die Anforderungen und Ziele von das System, über das Sie sprechen werden. Bei der Gestaltung unserer Foto-Sharing-Anwendung möchten wir einige funktionale Anforderungen haben, darunter, dass ein Benutzer einigen anderen Benutzern folgen kann , die ein Konto auf dieser Plattform haben. Der Benutzer kann auch einige Suchen durchführen , die auf den freigegebenen Fotos basieren können. Haben Sie gesucht, können Sie auch Fotos selbst von ihrem Konto hochladen. Und das System, das wir implementieren werden , sollte auch eine Art Nachrichten-Feed generieren und anzeigen, in dem ein Benutzer, wenn er die Anwendung öffnet, die Top-Fotos von den Leuten sieht, gegen die er gekämpft hat, Bögen. Dies sind, wie gesagt, die funktionalen Anforderungen, aber wir müssen auch über die funktionalen Anforderungen nachdenken. Die nicht funktionale Anforderung Nummer eins muss sein, dass das System sehr zuverlässig sein sollte, was bedeutet, dass das Foto nicht verloren geht, sobald der Benutzer ein Foto auf unsere Oberfläche hochgeladen hat. Als nächstes muss unsere Oberfläche hochverfügbar sein, daher sind alle Fragen nicht erlaubt. Außerdem sollten wir unsere Latenz für die Regeneration der Nachrichten und ähnliches niedrig halten . Das heißt, die Zeit, die der Benutzer tatsächlich vom Start der Anwendung bis zu dem Punkt wartet , an dem er tatsächlich einige Fotos von anderen Benutzern sieht , denen er folgt. Jetzt ist der erste Schritt erledigt. Und wir definieren die Anforderungen und Ziele des Systems, das wir gerade entwerfen werden. Wir können ein paar andere Designüberlegungen treffen. Hier. Wir können damit ausgehen , dass all diese Dienste, die wir implementieren werden, ziemlich offensichtlich ist, dass sie sehr viel gelesen werden, weil Nettoverschuldung , wenn Benutzer tatsächlich Fotos hochladen, aber eine viel höhere Anzahl von Benutzern tatsächlich die Fotos sehen , die ich andere Benutzer gesehen habe. Sie können das denken, wie Sie denken würden, wenn Sie ein Foto in Ihrer Social-Media-App veröffentlichen . Sie posten sehr wenige Male, aber Sie sehen tatsächlich viele andere Funktionen im Vergleich zu sehen, wie Sie tatsächlich hochladen. Deshalb wird dieses System schwer gelesen. Aufgrund der Tatsache, dass unser Service schwer gelesen wird, müssen wir uns auf den Abruf konzentrieren. Das Foto ist sehr schnell. Jetzt können die Benutzer auch so viele Fotos wie Tageslicht hochladen. Das ist also zu beachten , da wir eine sehr effiziente Verwaltung des Speichers für diese Fotos benötigen eine sehr effiziente Verwaltung . Und auch, ich speichere gesagt, wenn ein Benutzer ein Foto hochlädt, dieses System, das wir entworfen haben, garantieren wir, dass es nicht verloren geht. Übergang ging zu einigen Schätzungen und Einschränkungen für die Kapazität der Dinge, die wir speichern werden. Wir können davon ausgehen, dass wir 100 Millionen Nutzer mit etwa 10 Tausend täglich aktiven Nutzern und 2 Millionen neuen Fotos täglich haben 100 Millionen Nutzer mit etwa 10 Tausend täglich aktiven Nutzern werden. Das wären ungefähr 23 neue Fotos pro Sekunde. Und diese Berechnungen , mit denen wir hier durchführen werden, finden zu einem weiteren Zeitpunkt statt , an dem unser Service hoch angenommen und erfolgreich sein wird . Deshalb siehst du, dass ich diese sehr hohen Beträge für diese aufteile . Eine tatsächliche Zahl. Nun würde der Gesamtplatz, der für einen Tag mit Fotos benötigt wird, etwa 2 Millionen betragen, weil wir sagten, dass wir jeden Tag 2 Millionen neue Fotos haben würden. Und wir können über die durchschnittliche Größe der Fotodatei nachdenken, die 100 Kilobyte betragen kann, die für unsere Kapazität insgesamt etwa 200 Gigabyte betragen wird . Das berücksichtigt nur einen Tag. Aber was ist, wenn wir den Raum für, sagen wir, fünf Jahre hinweisen ? Nun, wir können 200 mit 3655 Jahren multiplizieren, und wir werden ungefähr 365, also 365 Terabyte bekommen. Jetzt, da wir diese Kapazitätsschätzung aus dem Weg haben, können wir über das hochrangige Systemdesign nachdenken. Denn auf hohem Niveau müssen wir nur zwei Szenarien unterstützen. Eine zum Hochladen der Fotos, das ist Workflow in unserem Service. Und ja, sie wollten diese Fotos ansehen oder durchsuchen. Der Service, den wir implementieren werden , muss die Fotos natürlich in einer Datenbank speichern. Und wir werden hier ein paar Object Storage-Server benötigen . Darüber hinaus wird er zum Datenbankschema zum Speichern dieser Fotos auch im Interview besprochen. Wir müssen bedenken, dass wir ungefähr drei Einheiten haben. Eine, die der Benutzer sein wird, als nächstes die Fotos und dann die Benutzer, denen sie folgen. Das Schema kann drei Tabellen enthalten. Wenn ein Foto, das einen Lichtbildausweis haben kann , der der Primärschlüssel sein wird. Und dann ein paar andere Felder wie die Benutzer-ID, die natürlich der Benutzer tot ist, haben sie gepostet, was ein Fremdschlüssel in dieser Tabelle sein wird. Dann ist ein sehr wichtiges anderes Feld hier das Erstellungsdatum, das vom Typ datetime sein wird. Und dies ist ein sehr wichtiges Feld, da es nützlich sein wird , wenn der Benutzer seinen Newsfeed öffnet, wir wollten ihm die neuesten und beliebtesten Fotos besorgen, aber für den neuesten Teil werden wir wir wollten ihm die neuesten und beliebtesten Fotos besorgen, aber für den neuesten Teil werden wir fressen diese Region schlagen Feld. Dann haben wir auch die Benutzertabelle, die natürlich einen Primärschlüssel der Benutzer-ID haben wird. Und dann noch ein paar andere Daten, die wir für ihn speichern wollten. Wenn wir E-Mail-Marketing betreiben wollen, kann seine E-Mail behalten. Aber wir brauchen auch den Namen, das Geburtsdatum, das Datum für jedes Konto und vielleicht den letzten Login. Ich denke nach. Wir bräuchten auch eine Tabelle für den Benutzer folgen, die ein Feld annehmen würde , das beide Teil des Primärschlüssels sein wird. Und das sind natürlich Benutzer-IDs der Benutzer , die einander folgen. Dies berücksichtigt natürlich das Szenario, in dem der Folgebenutzer jeweils in beide Richtungen geht, wie auf Facebook, wenn Sie einen Freund hinzufügen. Wenn du dich also beide als Freund akzeptieren würdest, nicht wie ein Instagram, bei dem das Follow unidirektional sein kann. Du kannst also jemandem folgen , der dir nicht folgt. Wir haben dieses Szenario in dieser Diskussion nicht , nur damit wir es ein bisschen einfacher machen können. Jetzt wäre der unkomplizierte Ansatz zum Sturm der Schemadetektoren, über die gesprochen Sturm der Schemadetektoren, über die gesprochen werden, ein MySQL erfordert offensichtlich die Gelenke, aber wir können es in einem verteilten Schlüsselwertspeicher speichern, um die Vorteile, die auch von NoSQL angeboten werden. Nachdem wir in unserem Interview über das Datenbankschema gesprochen haben, müssen wir auch eine weitere Schätzung der Datengröße vornehmen. Das D entscheidet also über die Schätzung des enthält Informationen über die Felder, die in unserer Datenbank gespeichert werden. Und wir müssen über die ganzen Zahlen, Strings und so weiter nachdenken . Später wird in unserer Datenbank gespeichert. Wir können davon ausgehen, dass jede Eingabeabfrage und DateTime vier Bytes überschritten haben. Jede Zeile in der Benutzertabelle wird also etwa 68 Bytes haben. Hätte es, wie ich zuvor gezählt habe, ungefähr sechs Felder gehabt . Wenn wir, sagen wir, 250 Millionen Benutzer hätten , benötigen wir etwa 16 Gigabyte Speicher, nur damit der Benutzer mit all seinen Informationen in unserer Datenbank gespeichert werden kann . Aber was ist mit den Fotos? Jede Zeile in der Fototabelle wird also etwa 284 Byte Cs haben. Wir haben auch ein Fotopaket, das ein Var-Diagramm mit 265 Zeichen sein wird und das 265 dauert. Sehen Sie sich den Fotoeintrag an, der ziemlich länger wäre als der Benutzer, aber das wäre ziemlich normal. Wenn wir berücksichtigen dass täglich etwa 1 Million neue Fotos hochgeladen werden, benötigen wir für einen Tag etwa 200 und 50 Megabyte Speicher. Und das wird fast zehn Jahre dauern, ungefähr ein Terabyte. Die letzte Tabelle, jeder der Benutzer folgt der Tabelle. Und wenn es aus acht Bytes besteht, hatten wir nur den Primärschlüssel, der aus zwei Integralen besteht, die jeweils vier Bytes sind. Wir können über 250 Millionen Nutzer nachdenken. Sie können weiteren 250 Millionen Benutzern folgen , und wir werden weitere weitere Petabyte Speicher für die Tabelle des Benutzers treffen . Der gesamte Platz, der für all diese Tabellen für die Ohren benötigt wird, würde, wie gesagt, etwa zwei Terabyte betragen, was eigentlich ziemlich gut für eine Anwendung ist. Und die Oberfläche dieser Typen. Nächstes Wochenende warf auch einen kurzen Blick auf das Design der Komponenten, die wir in diesem Service haben werden. Das Foto wird hochgeladen oder richtig knackig langsam. Lesen Sie, wer schneller sein wird, besonders wenn sie von Bargeld bedient werden. Hochladen können Benutzer verfügbare Deckverbindungen verbrauchen , da das Hochladen ein langsamer Prozess ist und das bedeutet, dass wir nicht bedient werden können. Jedes System ist mit den richtigen Anfragen beschäftigt. Wir sollten bedenken, dass diese Webdienste eine Verbindung haben , wenn wir uns treffen, bevor wir das System entwerfen. Wenn Sie also davon ausgehen, dass ein Webserver maximal 500 Verbindungen gleichzeitig haben kann , können diese Engpässe mit mehr als 500 gleichzeitigen Uploads oder Lesevorgängen behandelt werden, können wir Lesevorgänge teilen und schreibt in separate Dienste. Dies wird es uns auch ermöglichen, diese Operationen in Zukunft unabhängig und viel einfacher zu skalieren diese Operationen in Zukunft unabhängig und , da es sich um zwei separate Einheiten handelt. Für Redundanz-Teil jetzt ist das Verlieren von Dateien, die ich bereits erwähnt habe, keine Option. Wir können mehrere Kopien jeder Datei als Schuldenlösung starten . Denn wenn ein Speicher würfelt, können wir die vierte zu stark, die andere Kopie abrufen. Das gleiche Prinzip gilt aber auch für andere Komponenten. Wenn wir also die Verfügbarkeit des Systems haben wollen, das hoch wäre, würde unser System zu keinem Zeitpunkt sterben. Wir müssen auch Replikate des Dienstes ausführen lassen. Dienste sind verstorben. Das System bleibt erschreckend verfügbar, da diese Redundanz den einzigen Fehlerpunkt im System beseitigt . Das ist ein sehr wichtiger Punkt. Wenn Sie ein Interview mit dem Systemdesign führen, müssen Sie überlegen, ob Sie die Implementierung tatsächlich einen einzigen Punkt des Scheiterns macht. S Schulden sind Implementierung tatsächlich einen einzigen Punkt des Scheiterns macht . S Schulden ein Nachteil und müssen beachtet werden. Und Sie müssen auch eine Problemumgehung dafür finden. Wenn zu irgendeinem Zeitpunkt nur eine Instanz der Dienste erforderlich ist, um sie auszuführen, können wir eine redundante sekundäre Kopie des auszuführen, können wir eine redundante sekundäre Kopie des Dienstes ausführen, die keinen Datenverkehr bereitstellt, aber nach dem tödlich für weiße Taube Primär hat ein Problem. Wie gesagt, sind es zwei Instanzen desselben Dienstes, der in der Produktion ausgeführt wird, und einer schlägt fehl. Das System kann auf die gesunde Kopie übergehen. Und dies kann automatisch geschehen oder einen manuellen Eingriff erfordern, obwohl Sie, wenn Sie zu keinem Zeitpunkt in Ihr System heruntergehen , Sie es besser implementieren und automatisch wiederherstellen. Denn sonst müssten Sie beachten, dass Ihr System Kaugummi ist und dann manuell in die Entwicklerschulden eingreifen können , können Sie natürlich den 17. verfügbaren 2D umleiten. Wir können auch über das Sharding von Daten sprechen. Da ich natürlich so hohe Datenmengen denke, müssen wir sie irgendwie teilen. Wir können die Benutzer-ID abbilden, damit wir alle Fotos eines Benutzers in der gleichen scharfen und definierten DB kurz halten können alle Fotos eines Benutzers in der , die ein Terabyte beträgt. Sie benötigen vier Charts, um etwa vier Terabyte Daten zu speichern . Nun, für Leistung und Skalierbarkeit Wochenende behalten Sie etwa zehn von ihnen. Auch hier wird FOR System immer größer, wir werden in der Lage sein, den gesamten Schuldenverkehr zu bewältigen. Wir müssen die scharfe Zahl nach dem Benutzer Vielfaches von zehn finden . Fangen wir dort an. Identifizieren Sie jedes Foto in unserem System eindeutig. Wir können diese Nummer an den Lichtbildausweis anhängen, und das wäre eine ziemlich einfache Lösung in dieser Hinsicht. Wie können wir die Lichtbildausweise generieren, während jede Datenbank ihre eigene automatische Inkrementsequenz für die Lichtbildausweise haben kann . Und da wir diese Idee des scharfen Lichtbildausweises anhängen werden, wird er in unserem gesamten System einzigartig machen. Obwohl wir dieses Partitionierungssystem entwickelt haben, hat es einige Nachteile. Wenn wir zum Beispiel nicht alle Bilder speichern können, die mein Diagramm überlasten, müssen wir diese auf mehrere verteilen und verursachen eine höhere spätere Krankheit. Und auch die Herzbenutzer müssen ganz anders gehandhabt werden, da ihnen viele andere Benutzer und viele Leute folgen . Sie werden sehen, wie sie die Fotos hochladen , und Schulden können in dieser Hinsicht Probleme verursachen. Wir können natürlich den Lichtbildausweis und nicht den Benutzer-ID partitionieren, was ein anderer Ansatz sein kann. Denn wenn wir in der Regel dieser Lichtbildausweis zuerst sind, können wir die scharfe Zahl wieder durchfinden, das Lichtbildausweismodul, was bedeutet, dass sie im Grunde weniger stellig sind. Und natürlich wären die oben genannten Probleme, über die wir gerade gesprochen haben, die Nachteile nach dem ersten Ansatz waren die Nachteile nach dem ersten Ansatz über die wir gerade gesprochen haben, die Nachteile nach dem ersten Ansatz waren, an dieser Stelle gelöst worden. Um die Lichtbildausweise zu generieren, können Sie keine automatische Inkrementierungssequenz haben da Sie wissen müssen, dass der Lichtbildausweis zuerst definiert wird die scharfe Lösung hier könnte darin bestehen, eine separate Datenbank zu widmen diese automatisch inkrementierende ID zu generieren, müssen wir auch viel über die Zukunft nachdenken und unser Wachstum des Systems verbinden. Wenn wir eine große Anzahl logischer Partitionen haben, um das Datenwachstum am Anfang zu akkumulieren, mehrere logische Partitionen in einer einzigen physischen Datenbank, CCS-Datenbank, oder wir können mehrere Datenbankensysteme, die darauf laufen. Wir können separate Datenbanken für jede logische Partition auf jedem Server haben. Wann immer wir der Meinung sind, dass ein bestimmter Datenbankserver viele Daten enthält, können wir einige logische Partitionen auf einem anderen Server erstellen und eine Konfigurationsdatei pflegen. Und das wäre das einzige, was wir aktualisieren müssten, um eine eventuelle Änderung anzukündigen. Das Ranking und die Newsfeed-Generierung ein weiteres Problem, mit dem wir konfrontiert sind. So wie wir damit umgehen werden. Oder zumindest eine Möglichkeit, damit umzugehen, besteht darin, den US-Feed vorzugenerieren. Wir können einige Server haben, deren einzige Aufgabe darin besteht, Benutzer zu generieren, um sie kontinuierlich zu generieren und in einer anderen Tabelle namens User News Feed zu speichern . Wenn der Benutzer dieses Foto für eine neue Suite benötigt, fragen wir einfach diese Tabelle ab und geben die Ergebnisse zurück. Leslie, wir müssen auch über den Bargeld- und Lastenausgleich des Systems nachdenken den Bargeld- und Lastenausgleich des Systems da es sehr verwendet wird, wir müssen einen Cache für mich in Data Service einführen , um die Datenbankzeilen abzufangen. Das bedeutet die Hot Folder und Benutzer. Wir können den Demand Case verwenden, um diese Daten und Anwendungsserver zu verwenden. Bevor Sie auf die Datenbank zugreifen, können Sie schnell überprüfen, ob der Cache die gewünschten Routen hat. Ein vernünftiger Ansatz wäre hier das R U, das am wenigsten verwendet wird. Für die Richtlinie zur Cache-Räumung. Wir können das Integrant intelligentere Kiersten erstellen, diese unter Verwendung der 8020-Regel, die besagt, dass 280% des Volumens der Fotos, die täglich gelesen werden, 80% des Datenverkehrs generieren werden, damit wir die ersten 20% einfach einlösen können. ging also um alle Schritte und endlose Daten. Ich würde beim Systemdesign-Interview als machtlos betrachten und würde eine Implementierung des Foto-Sharing-Service-Designs erhalten. Ich danke euch sehr, dass du bis zum Ende dieser Vorlesung bei mir geblieben bist. Und ich freue mich darauf, Sie im nächsten zu sehen.