Datenintensive Anwendungen designen
eBook - ePub

Datenintensive Anwendungen designen

Konzepte fĂŒr zuverlĂ€ssige, skalierbare und wartbare Systeme

Martin Kleppmann, Frank Langenau

  1. 652 pages
  2. German
  3. ePUB (mobile friendly)
  4. Available on iOS & Android
eBook - ePub

Datenintensive Anwendungen designen

Konzepte fĂŒr zuverlĂ€ssige, skalierbare und wartbare Systeme

Martin Kleppmann, Frank Langenau

Book details
Book preview
Table of contents
Citations

About This Book

Daten stehen heute im Mittelpunkt vieler Herausforderungen im Systemdesign. Dabei sind komplexe Fragen wie Skalierbarkeit, Konsistenz, ZuverlĂ€ssigkeit, Effizienz und Wartbarkeit zu klĂ€ren. DarĂŒber hinaus verfĂŒgen wir ĂŒber eine ĂŒberwĂ€ltigende Vielfalt an Tools, einschließlich relationaler Datenbanken, NoSQL-Datenspeicher, Stream-und Batchprocessing und Message Broker. Aber was verbirgt sich hinter diesen Schlagworten? Und was ist die richtige Wahl fĂŒr Ihre Anwendung?In diesem praktischen und umfassenden Leitfaden unterstĂŒtzt Sie der Autor Martin Kleppmann bei der Navigation durch dieses schwierige Terrain, indem er die Vor-und Nachteile verschiedener Technologien zur Verarbeitung und Speicherung von Daten aufzeigt. Software verĂ€ndert sich stĂ€ndig, die Grundprinzipien bleiben aber gleich. Mit diesem Buch lernen Softwareentwickler und -architekten, wie sie die Konzepte in der Praxis umsetzen und wie sie Daten in modernen Anwendungen optimal nutzen können.- Inspizieren Sie die Systeme, die Sie bereits verwenden, und erfahren Sie, wie Sie sie effektiver nutzen können- Treffen Sie fundierte Entscheidungen, indem Sie die StĂ€rken und SchwĂ€chen verschiedener Tools kennenlernen- Steuern Sie die notwenigen Kompromisse in Bezug auf Konsistenz, Skalierbarkeit, Fehlertoleranz und KomplexitĂ€t- Machen Sie sich vertraut mit dem Stand der Forschung zu verteilten Systemen, auf denen moderne Datenbanken aufbauen- Werfen Sie einen Blick hinter die Kulissen der wichtigsten Onlinedienste und lernen Sie von deren Architekturen

Frequently asked questions

How do I cancel my subscription?
Simply head over to the account section in settings and click on “Cancel Subscription” - it’s as simple as that. After you cancel, your membership will stay active for the remainder of the time you’ve paid for. Learn more here.
Can/how do I download books?
At the moment all of our mobile-responsive ePub books are available to download via the app. Most of our PDFs are also available to download and we're working on making the final remaining ones downloadable now. Learn more here.
What is the difference between the pricing plans?
Both plans give you full access to the library and all of Perlego’s features. The only differences are the price and subscription period: With the annual plan you’ll save around 30% compared to 12 months on the monthly plan.
What is Perlego?
We are an online textbook subscription service, where you can get access to an entire online library for less than the price of a single book per month. With over 1 million books across 1000+ topics, we’ve got you covered! Learn more here.
Do you support text-to-speech?
Look out for the read-aloud symbol on your next book to see if you can listen to it. The read-aloud tool reads text aloud for you, highlighting the text as it is being read. You can pause it, speed it up and slow it down. Learn more here.
Is Datenintensive Anwendungen designen an online PDF/ePUB?
Yes, you can access Datenintensive Anwendungen designen by Martin Kleppmann, Frank Langenau in PDF and/or ePUB format, as well as other popular books in Computer Science & Databases. We have over one million books available in our catalogue for you to explore.

Information

Publisher
O'Reilly
Year
2018
ISBN
9783960101840

TEIL II

Verteilte Daten

FĂŒr eine erfolgreiche Technologie muss die Wirklichkeit Vorrang vor der Öffentlichkeitsarbeit haben, denn die Natur lĂ€sst sich nicht tĂ€uschen.
– Richard Feynman, Rogers Commission Report (1986)
Die in Teil I dieses Buchs diskutierten Aspekte von Datensystemen gelten, wenn die Daten auf einem einzelnen Computer gespeichert werden. In Teil II gehen wir nun eine Stufe nach oben und fragen: Was passiert, wenn mehrere Computer beim Speichern und Abrufen von Daten beteiligt sind?
Es gibt verschiedene GrĂŒnde, eine Datenbank auf mehrere Computer zu verteilen:
Skalierbarkeit
Wird das Datenvolumen, die Lesebelastung oder die Schreibbelastung grĂ¶ĂŸer, als ein einzelner Computer bewĂ€ltigen kann, lĂ€sst sich die Last möglicherweise auf mehrere Computer verteilen.
Fehlertoleranz/HochverfĂŒgbarkeit
Wenn Ihre Anwendung auch dann weiterhin funktionieren muss, wenn ein Computer (oder mehrere Computer oder das Netzwerk oder ein ganzes Rechenzentrum) ausfĂ€llt, können Sie mit mehreren Computern ein redundantes System aufbauen. FĂ€llt ein Computer aus, kann ein anderer dessen Aufgaben ĂŒbernehmen.
Latenz
Wenn Ihre Benutzer global verteilt sind, brauchen Sie vielleicht Server an mehreren Standorten weltweit, sodass jeder Benutzer von einem Rechenzentrum in seiner geografischen NĂ€he bedient werden kann. Damit lĂ€sst sich vermeiden, dass Benutzer auf Netzwerkpakete warten mĂŒssen, die um die halbe Welt reisen.

FĂŒr höhere Belastung skalieren

Wenn Sie lediglich fĂŒr eine höhere Belastung skalieren mĂŒssen, ist es am einfachsten, leistungsfĂ€higere Computer anzuschaffen (oft auch als vertikale Skalierung (scale up) bezeichnet). Viele CPUs, viele RAM-Chips und viele Festplatten lassen sich unter einem Betriebssystem gemeinsam betreiben, und schnelle Zwischenverbindungen erlauben jeder CPU, auf jeden Teil des Arbeitsspeichers oder der Festplatte zuzugreifen. Bei einer derartigen Shared-Memory-Architektur (Architektur mit gemeinsam genutztem Speicher) können alle Komponenten als ein einziger Computer betrachtet werden [1].1
Bei einem Shared-Memory-Ansatz besteht das Problem darin, dass die Kosten schneller als linear wachsen: Ein Computer mit doppelt so vielen CPUs, doppelt so viel RAM und doppelt so viel FestplattenkapazitĂ€t wie ein anderer Computer kostet in der Regel deutlich mehr als das Doppelte. Und aufgrund von EngpĂ€ssen ist ein Computer der doppelten GrĂ¶ĂŸe hĂ€ufig gar nicht in der Lage, die doppelte Belastung zu bewĂ€ltigen.
Eine Shared-Memory-Architektur kann begrenzte Fehlertoleranz bieten – High-End-Computer besitzen Hot-Swappable-Komponenten (die sich im laufenden Betrieb ersetzen lassen, ohne die Computer auszuschalten, wie zum Beispiel Festplatten, Speichermodule und sogar CPUs) – doch bleibt eine solche Architektur zweifellos auf einen einzelnen geografischen Standort beschrĂ€nkt.
Ein anderer Ansatz ist die Shared-Disk-Architektur, die mehrere Computer mit unabhĂ€ngigen CPUs und Arbeitsspeichern verwendet, die Daten aber auf einem Festplattenarray speichert, das die Computer gemeinsam nutzen und das ĂŒber ein schnelles Netzwerk verbunden ist.2 Diese Architektur wird fĂŒr bestimmte Data-Warehousing-Arbeitslasten eingesetzt, doch Konkurrenzsituationen und der Overhead von Sperrmechanismen schrĂ€nken die Skalierbarkeit des Shared-Disk-Konzepts ein [2].

Shared-Nothing-Architekturen

DemgegenĂŒber haben Shared-Nothing-Architekturen [3] (manchmal auch horizontale Skalierung oder Scale-out genannt) eine Menge an PopularitĂ€t gewonnen. In diesem Ansatz wird jeder Computer oder jeder virtuelle Computer, der die Datenbanksoftware ausfĂŒhrt, als Knoten bezeichnet. Jeder Knoten lĂ€uft mit seinen CPUs, seinem RAM und seinen Festplatten unabhĂ€ngig von anderen. Jegliche Koordinierung zwischen den Knoten geschieht auf der Softwareebene und lĂ€uft ĂŒber ein konventionelles Netzwerk.
Da ein Shared-Nothing-System keine spezielle Hardware benötigt, können Sie beispielweise den Computer einsetzen, der das beste Preis-Leistungs-VerhĂ€ltnis hat. Die Daten können Sie möglicherweise auf mehrere geografische Regionen verteilen, somit die Latenz fĂŒr Benutzer verringern und gegebenenfalls den Totalausfall eines ganzen Rechenzentrums ĂŒberstehen. Mit Cloud-Bereitstellungen von virtuellen Computern brauchen Sie nicht einmal in der GrĂ¶ĂŸenordnung von Google zu operieren: Selbst fĂŒr kleinere Firmen ist jetzt eine auf mehrere Regionen verteilte Architektur praktikabel.
In diesem Teil des Buchs konzentrieren wir uns auf Shared-Nothing-Architekturen – nicht weil sie unbedingt die beste Wahl fĂŒr jeden Einsatzfall sind, sondern vielmehr weil sie die meiste Sorgfalt von Ihnen, dem Anwendungsentwickler, verlangen. Wenn Ihre Daten ĂŒber mehrere Knoten verteilt sind, mĂŒssen Sie sich der EinschrĂ€nkungen und Kompromisse bewusst sein, die in einem derartigen verteilten System auftreten – die Datenbank ist nicht in der Lage, diese vor Ihnen zu verbergen.
Eine verteilte Shared-Nothing-Architektur hat zwar viele Vorteile, doch sie beinhaltet auch zusĂ€tzliche KomplexitĂ€t fĂŒr Anwendungen und schrĂ€nkt manchmal die Ausdruckskraft der Datenmodelle ein, die Sie verwenden können. In manchen FĂ€llen kann ein einfaches Programm, das in einem einzigen Thread lĂ€uft, deutlich besser abschneiden als ein Cluster mit ĂŒber 100 CPU-Kernen [4]. Andererseits können Shared-Nothing-Systeme sehr leistungsfĂ€hig sein. Die nĂ€chsten Kapitel gehen ausfĂŒhrlich auf die Fragen ein, die im Zusammenhang mit verteilten Daten auftauchen.

Replikation vs. Partitionierung

Es gibt zwei gĂ€ngige Methoden, Daten ĂŒber mehrere Knoten zu verteilen:
Replikation
Eine Kopie derselben Daten auf mehreren verschiedenen Knoten behalten, möglicherweise an verschiedenen Standorten. Replikation bietet Redundanz: Wenn einige Knoten nicht mehr verfĂŒgbar sind, können die Daten dennoch von den ĂŒbrigen Knoten bereitgestellt werden. Zudem kann Replikation helfen, die Performance zu verbessern. Replikation ist Thema von Kapitel 5.
Partitionierung
Eine große Datenbank in kleinere Teilmengen – sogenannte Partitionen – aufgliedern, sodass verschiedene Partitionen unterschiedlichen Knoten zugewiesen werden können (auch als Sharding – horizontale Fragmentierung – bezeichnet). Auf Partitionierung gehen wir in Kapitel 6 ein.
Diese Mechanismen sind zwar eigenstÀndig, doch arbeiten sie oftmals Hand in Hand, wie Abbildung T-1 zeigt.
image
Abbildung T-1: Eine Datenbank, die in zwei Partitionen aufgeteilt ist und zwei Replikate pro Partition speichert
Mit dem Wissen ĂŒber diese Konzepte können wir die schwierigen Kompromisse diskutieren, die Sie in einem verteilten System eingehen mĂŒssen. Mit Transaktionen befasst sich Kapitel 7, damit Sie verstehen, was in einem Datensystem alles schiefgehen kann und was sich dagegen unternehmen lĂ€sst. Diesen Teil des Buchs schließen wir in Kapitel 8 und Kapitel 9 mit einer Erörterung der prinzipiellen BeschrĂ€nkungen von verteilten Systemen ab.
SpĂ€ter betrachten wir in Teil III dieses Buchs, wie Sie mehrere (möglicherweise verteilte) Datenspeicher in ein grĂ¶ĂŸeres System integrieren können, das die Anforderungen einer komplexen Anwendung erfĂŒllt. Doch zunĂ€chst wollen wir ĂŒber verteilte Daten sprechen.

Literaturverzeichnis

[1]Ulrich Drepper: What Every Programmer Should Know About Memory. akkadia.org, 21. November 2007.
[2]Ben Stopford: Shared Nothing vs. Shared Disk Architectures: An Independent View. benstopford.com, 24. November 2009.
[3]Michael Stonebraker: The Case for Shared Nothing. IEEE Database Engineering Bulletin, Bd. 9, Nr. 1, S. 4–9, MĂ€rz 1986.
[4]Frank McSherry, Michael Isard und Derek G. Murray: Scalability! But at What COST?. im 15. USENIX Workshop on Hot Topics in Operating Systems (HotOS), Mai 2015.
image

KAPITEL 5

Replikation

Der wichtigste Unterschied zwischen einer Sache, die schiefgehen kann, und einer Sache, die keinesfalls schiefgehen kann, besteht darin, dass, wenn etwas doch schiefgeht, das keinesfalls schiefgehen kann, es sich keinesfalls beheben lÀsst.
– Douglas Adams, Einmal Rupert und zurĂŒck (Mostly Harmless, 1992)
Replikation heißt, eine Kopie derselben Daten auf mehreren Computern, die ĂŒber ein Netzwerk miteinander verbunden sind, zu speichern. Wie in der EinfĂŒhrung zu Teil II erörtert, gibt es mehrere GrĂŒnde, warum man Daten repliziert:
  • Um Daten geografisch nahe bei den Benutzern zu halten (und somit die Latenz von Zugriffen zu verringern)
  • Um dem System zu ermöglichen weiterzuarbeiten, selbst wenn einige seiner Komponenten ausgefallen sind (und somit die VerfĂŒgbarkeit zu erhöhen)
  • Um die Anzahl der Computer, die Leseabfragen bedienen können, zu erhöhen (und s...

Table of contents