Vorwort
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Dieses Buch basiert auf der These, dass die Fähigkeit von Softwaresystemen, in großem Maßstab zu arbeiten, zunehmend ein Schlüsselfaktor für den Erfolg ist. Da unsere Welt immer vernetzter wird, wird diese Eigenschaft immer wichtiger werden. Das Ziel dieses Buches ist es daher, dem Leser das Kernwissen über verteilte und gleichzeitige Systeme zu vermitteln. Außerdem stellt es eine Reihe von Softwarearchitekturansätzen und verteilten Technologien vor, die für den Aufbau skalierbarer Systeme genutzt werden können.
Warum Skalierbarkeit?
Das Tempo der Veränderungen in unserer Welt ist beängstigend. Täglich gibt es neue Innovationen, die uns alle in die Lage versetzen, miteinander zu kommunizieren, Geschäfte zu machen, uns zu unterhalten ... und sogar Pandemien zu beenden. Der Treibstoff für viele dieser Innovationen ist Software, die von wahren Heerscharen von Entwicklern in großen Internetfirmen, kleinen Teams in Start-ups und allen Formen und Größen von Teams dazwischen geschrieben wird.
Die Bereitstellung von Softwaresystemen, die auf die Bedürfnisse der Nutzer/innen reagieren, ist schon schwierig genug, aber bei Systemen, die in großem Umfang eingesetzt werden, wird es noch um einiges schwieriger. Wir alle kennen Systeme, die plötzlich fehlschlagen, wenn sie unerwartet hohen Belastungen ausgesetzt sind - solche Situationen sind (im besten Fall) eine schlechte Werbung für Unternehmen und können im schlimmsten Fall zum Verlust von Arbeitsplätzen oder zur Zerstörung von Unternehmen führen.
Im Gegensatz zu physischen Systemen ist Software amorph - ihre physische Form (1 und 0) hat keine Ähnlichkeit mit ihren tatsächlichen Fähigkeiten. Wir würden nie erwarten, dass sich ein kleines Dorf mit 500 Einwohnern über Nacht in eine Stadt mit 10 Millionen Einwohnern verwandelt. Aber manchmal erwarten wir, dass unsere Softwaresysteme plötzlich das Tausendfache der Anzahl von Anfragen bewältigen, für die sie konzipiert wurden. Es überrascht nicht, dass die Ergebnisse selten schön sind.
Für wen dieses Buch ist
Die Hauptzielgruppe dieses Buches sind Softwareentwickler und -architekten, die keine oder nur wenig Erfahrung mit verteilten, nebenläufigen Systemen haben. Sie müssen sowohl ihr theoretisches als auch ihr praktisches Designwissen vertiefen, um die Herausforderungen bei der Entwicklung größerer, typischerweise internetbasierter Anwendungen zu meistern.
Was du lernen wirst
Dieses Buch beleuchtet die Landschaft der nebenläufigen und verteilten Systeme unter dem Aspekt der Skalierbarkeit. Obwohl es unmöglich ist, die Skalierbarkeit vollständig von anderen architektonischen Qualitäten zu trennen, steht die Skalierbarkeit im Mittelpunkt der Diskussion. Natürlich kommen auch andere Qualitäten ins Spiel, wie Leistung, Verfügbarkeit und Konsistenz, die regelmäßig zur Sprache kommen.
Der Aufbau verteilter Systeme erfordert ein grundlegendes Verständnis von Verteilung und Gleichzeitigkeit - dieses Wissen zieht sich wie ein roter Faden durch dieses Buch. Es ist notwendig, weil verteilte Systeme zwei grundlegende Probleme haben, die sie komplex machen, wie ich weiter unten beschreibe.
Erstens: Obwohl Systeme als Ganzes fast immer einwandfrei funktionieren, kann ein einzelner Teil des Systems jederzeit fehlschlagen. Wenn eine Komponente fehlschlägt (z. B. durch einen Hardwareabsturz, einen Netzwerkausfall oder einen Fehler im Server), müssen wir Techniken einsetzen, die es dem System als Ganzem ermöglichen, den Betrieb fortzusetzen und sich von Fehlern zu erholen. In jedem verteilten System werden Komponenten ausfallen, oft auf seltsame, mysteriöse und unvorhergesehene Weise.
Zweitens erfordert die Schaffung eines skalierbaren verteilten Systems die Koordination mehrerer beweglicher Teile. Jede Komponente des Systems muss ihren Teil der Abmachung einhalten und Anfragen so schnell wie möglich bearbeiten. Wenn nur eine Komponente die Bearbeitung von Anfragen verzögert, kann das ganze System schlecht funktionieren und sogar zusammenbrechen.
Es gibt eine Fülle von Literatur, die dir hilft, diese Probleme zu bewältigen. Zum Glück für uns Ingenieure gibt es auch eine umfangreiche Sammlung von Technologien, die uns helfen sollen, verteilte Systeme zu bauen, die ausfallsicher und skalierbar sind. Diese Technologien beinhalten theoretische Ansätze und komplexe Algorithmen, die unglaublich schwer richtig zu bauen sind. Mit diesen plattformbasierten, weithin anwendbaren Technologien können unsere Anwendungen auf den Schultern von Giganten stehen und ermöglichen es uns, ausgeklügelte Geschäftslösungen zu entwickeln.
Die Leserinnen und Leser dieses Buches werden vor allem lernen:
Die grundlegenden Merkmale verteilter Systeme, einschließlich Zustandsverwaltung, Zeitkoordination, Gleichzeitigkeit, Kommunikation und Koordination
Architektonische Ansätze und unterstützende Technologien für den Aufbau skalierbarer, robuster Dienste
Wie verteilte Datenbanken funktionieren und für den Aufbau skalierbarer verteilter Systeme genutzt werden können
Architekturen und Technologien wie Apache Kafka und Flink zum Aufbau von streaming- und ereignisbasierten Systemen
Hinweis für Pädagogen
Ein Großteil des Inhalts dieses Buches wurde im Rahmen eines fortgeschrittenen Grund- und Aufbaustudiengangs an der Northeastern University entwickelt. Es hat sich als sehr beliebtes und effektives Konzept erwiesen, um Schüler/innen mit dem Wissen und den Fähigkeiten auszustatten, die sie für den Start ihrer Karriere bei großen Internetunternehmen benötigen. Auf der Website zum Buch stehen zusätzliche Materialien zur Verfügung, um Lehrkräfte zu unterstützen, die das Buch für ihren Kurs verwenden möchten.
In diesem Buch verwendete Konventionen
In diesem Buch werden die folgenden typografischen Konventionen verwendet:
- Kursiv
-
Weist auf neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateierweiterungen hin.
Constant width
-
Wird für Programmlistings sowie innerhalb von Absätzen verwendet, um auf Programmelemente wie Variablen- oder Funktionsnamen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter hinzuweisen.
Constant width bold
-
Zeigt Befehle oder anderen Text an, der vom Benutzer wortwörtlich eingetippt werden sollte.
Constant width italic
-
Zeigt Text an, der durch vom Benutzer eingegebene Werte oder durch kontextabhängige Werte ersetzt werden soll.
Hinweis
Dieses Element steht für einen allgemeinen Hinweis.
Warnung
Dieses Element weist auf eine Warnung oder einen Warnhinweis hin.
Code-Beispiele verwenden
Zusätzliches Material (Code-Beispiele, Übungen usw.) steht unter https://oreil.ly/fss-git-repo zum Download bereit .
Wenn du eine technische Frage oder ein Problem mit den Codebeispielen hast, sende bitte eine E-Mail an bookquestions@oreilly.com.
Dieses Buch soll dir helfen, deine Arbeit zu erledigen. Wenn in diesem Buch Beispielcode angeboten wird, darfst du ihn in deinen Programmen und deiner Dokumentation verwenden. Du musst uns nicht um Erlaubnis fragen, es sei denn, du reproduzierst einen großen Teil des Codes. Wenn du zum Beispiel ein Programm schreibst, das mehrere Teile des Codes aus diesem Buch verwendet, brauchst du keine Erlaubnis. Der Verkauf oder die Verbreitung von Beispielen aus O'Reilly-Büchern erfordert jedoch eine Genehmigung. Die Beantwortung einer Frage mit einem Zitat aus diesem Buch und einem Beispielcode erfordert keine Genehmigung. Wenn du einen großen Teil des Beispielcodes aus diesem Buch in die Dokumentation deines Produkts aufnimmst, ist eine Genehmigung erforderlich.
Wir freuen uns über eine Namensnennung, verlangen sie aber in der Regel nicht. Eine Quellenangabe umfasst normalerweise den Titel, den Autor, den Verlag und die ISBN. Ein Beispiel: "Foundations of Scalable Solutions von Ian Gorton (O'Reilly). Copyright 2022 Ian Gorton, 978-1-098-10606-5."
Wenn du der Meinung bist, dass die Verwendung von Code-Beispielen nicht unter die Fair-Use-Regelung oder die oben genannte Erlaubnis fällt, kannst du uns gerne unter permissions@oreilly.com kontaktieren .
O'Reilly Online Learning
Hinweis
Seit mehr als 40 Jahren bietet O'Reilly Media Schulungen, Wissen und Einblicke in Technologie und Wirtschaft, um Unternehmen zum Erfolg zu verhelfen.
Unser einzigartiges Netzwerk von Experten und Innovatoren teilt sein Wissen und seine Erfahrung durch Bücher, Artikel und unsere Online-Lernplattform. Die Online-Lernplattform von O'Reilly bietet dir On-Demand-Zugang zu Live-Trainingskursen, ausführlichen Lernpfaden, interaktiven Programmierumgebungen und einer umfangreichen Text- und Videosammlung von O'Reilly und über 200 anderen Verlagen. Weitere Informationen erhältst du unter https://oreilly.com.
Wie du uns kontaktierst
Bitte richte Kommentare und Fragen zu diesem Buch an den Verlag:
- O'Reilly Media, Inc.
- 1005 Gravenstein Highway Nord
- Sebastopol, CA 95472
- 800-998-9938 (in den Vereinigten Staaten oder Kanada)
- 707-829-0515 (international oder lokal)
- 707-829-0104 (Fax)
Wir haben eine Webseite für dieses Buch, auf der wir Errata, Beispiele und zusätzliche Informationen auflisten. Du kannst diese Seite unter https://oreil.ly/scal-sys aufrufen .
Schreib eine E-Mail an bookquestions@oreilly.com, um Kommentare oder technische Fragen zu diesem Buch zu stellen.
Neuigkeiten und Informationen über unsere Bücher und Kurse findest du unter https://oreilly.com.
Finde uns auf LinkedIn: https://linkedin.com/company/oreilly-media
Folge uns auf Twitter: https://twitter.com/oreillymedia
Schau uns auf YouTube: https://www.youtube.com/oreillymedia
Danksagungen
Ohne die Inspiration, die mir mein Doktorvater, Professor Jon Kerridge, gegeben hat, wäre diese Arbeit nicht möglich gewesen. Sein grenzenloser Enthusiasmus hat mich drei Jahrzehnte lang bei dieser Arbeit angetrieben.
Matt Bass und John Klein von der Carnegie Mellon University waren in der Anfangsphase dieses Projekts unschätzbare Ressourcen. Ich danke ihnen für die großartigen Diskussionen über das gesamte Spektrum skalierbarer Softwarearchitekturen.
Meine Rezensenten waren hervorragend - fleißig und aufschlussreich - und haben mich auf dem richtigen Weg gehalten. Ewige Dankbarkeit gebührt Mark Richards, Matt Stine, Thiyagu Palanisamy, Jess Males, Orkhan Huseynli, Adnan Rashid und Nirav Aga. Und vielen Dank an Virginia Wilson, die meine fehlerhaften Wörter korrigiert hat!
Ich möchte mich auch bei all meinen Studierenden bedanken, insbesondere bei Ruijie Xiao, die den Kurs CS6650 Building Scalable Distributed Systems an der Northeastern University in Seattle besucht hat. Ihr habt mir unschätzbares Feedback gegeben, wie ich die vielen komplexen Konzepte in diesem Buch am besten vermitteln kann. Ihr seid die besten Versuchskaninchen aller Zeiten!
Get Grundlagen der skalierbaren Systeme now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.