Prinzipien moderner Dateninfrastrukturen

Die Entwicklung der Internettechnologie über die letzten Jahrzehnte hat zweifellos Einfluss auf das Funktionieren unserer Gesellschaften gehabt. Von der Facilitation der Globalisierung bis hin zur Verfügbarkeit neuer Technologien wie Social Media und Konsumentenapps für fast jeden Menschen auf der Welt hat das Web sich in fast allen Aspekten unseres täglichen Lebens eingegliedert. Allerdings bringt diese Allgegenwartschaft mit sich, dass immer mehr Daten verwaltet werden müssen, was eine immer bessere Dateninfrastruktur erfordert.

In der Web 1.0-Zeit konnten wir nur statischen Inhalt auf dem Internet lesen. Ein Jahrzehnt später, mit Web 2.0, wurde es möglich, online auf sozialen Netzwerken zu lesen und zu schreiben. Heute, mit Web 3.0 und der Ankunft von AI und Blockchain, generiert eine Einzelperson etwa 1,7 MB Daten pro Sekunde. Dies ergibt etwa 146,88 GB Daten pro Person und Tag. solche anspruchsvollen Workloads bedeuten, dass Dateninfrastrukturen für die meisten Unternehmen nun von mission-critical Bedeutung sind. Moderne Dateninfrastrukturen unterstützen alles von täglichen operationellen Workloads (OLTP) bis zu strategischen Entscheidungsprozessen (OLAP).

Angesichts der Datenanforderungen, die die moderne Welt aufweist, kann man zu der Schlussfolgerung gelangen, dass das Ziel einer modernen Dateninfrastruktur darin besteht, große Datenmengen effizient zu behandeln, ohne Latenz, Konsistenz, Sicherheit oder die Entwickler Erfahrung zu beeinträchtigen. Also, wenn ein Ingenieur sich über eine neue App oder Software (oder die Upgrade einer bestehenden) ab考虑t, muss er sich darüber Gedanken machen, eine moderne Dateninfrastruktur zu entwerfen, die hohe Datengrößen mit hoher Geschwindigkeit aufnehmen kann, während sie Effizienz, Sicherheit und Benutzerfreundlichkeit behält. In diesem Artikel werden wir grundlegende Prinzipien moderner Dateninfrastrukturen auf einem höheren Niveau diskutieren, sodass beim Auswählen einer Technologie für Ihre Infrastruktur, Sie diese gemäß ihres Einsatzes für jedes Prinzip bewerten können.

Design To Scale

Da eine Hauptschrift für Software heute die Fähigkeit ist, riesige (und wachsende) Datenmengen zu behandeln, würde es sich von selbst ergeben, dass Skalierbarkeit ein zentrales Thema bei der Entwurf moderner Dateninfrastrukturen wäre. Speziell ist es dringend notwendig, sowohl vertikal als auch horizontal skalieren zu können. Im Gegensatz zu den herkömmlichen Datenplattformen, die oft auf monolithischen Architekturen basieren, die nicht auf solch hohe Datenmengen anpassen können, muss Software, die auf einer modernen Dateninfrastruktur basiert, zuerst eine einzige Serverinstanz (mit mehreren Kernen und hunderten von GB Speicher) bis an ihre Grenzen drängen und dann auf mehrere Instanzen mit einer verteilten Konfiguration ausweiten. Außerdem muss sie elastisch sein, um wachsende Datenmengen und plötzliche Verkehrsanstürme zu bewältigen.

Warum?

Vertikales Skalieren, oder „scale up“, beinhaltet das Hinzufügen von zusätzlichen Ressourcen zu einem bestehenden System. Dies kann CPU, RAM und Speicherkapazitäts-Upgrades beinhalten, die billiger werden, während die Workloads kleiner sind, während die Fähigkeit, in der Zukunft weiter und schneller zu wachsen, erhalten bleibt. Software, die vertikal skalieren kann, ist in der Lage, Hardware auf ihre volle Kapazität zu nutzen. Sie tendiert auch dazu, zunächst einfacher zu implementieren, da keine neue Systemarchitektur benötigt wird, und einfacher zu verwalten, da letztendlich weniger Knoten benötigt werden. Es kann auch die Leistung von CPU- oder speicheraufwendigen Anwendungen verbessern, sowie Latenz und Antwortzeiten durch den Einsatz von in-Memory-Daten und schnelleren Prozessoren reduzieren. Allerdings hat selbst optimale Hardware ihre Grenzen, und je teurer die Upgrades werden, desto weniger effizient wird nur horizontales Skalieren. Beim Skalieren hoch zu gehen behebt auch nicht das Problem der Fehlertoleranz, da es einen einzelnen Punkt des Versagens schafft.

Dann gibt es horizontales Skalieren, oder „scale out“, das es Systems ermöglicht, bedeutend mehr zu wachsen (theoretisch unendlich, obwohl praktisch andere Einschränkungen auftreten können), mit der Fähigkeit, mehr gleichzeitige Benutzer und Anfragen zu handhaben, indem die Workload auf mehrere Maschinen verteilt wird. Die mehreren Knoten leisten auch eine bessere Arbeit, um den einzelnen Punkt des Versagens beim vertikalen Skalieren zu adressieren, sowie das Load Balancing zu verbessern. Mit Cloud-Plattformen ist auch elastisches Skalieren möglich, wo Ressourcen nach Bedarf hinzugefügt oder entfernt werden können. Horizontales Skalieren kann bei höheren Volumina auch billiger sein als vertikales Skalieren. Allerdings muss man sich auch mit der Komplexität der vielen Knoten beschäftigen, sowie mit Netzwerküberlastung und der Schwierigkeit, Datenkonsistenz zu erhalten.

Der beste Weg, um die Schwächen jedes zu abzumildern und sowohl effizient als auch effektiv zu nutzen, besteht darin, Software zu entwickeln, die eine Kombination von vertikaler und horizontaler Skalierung implementieren kann. Eine moderne Dateninfrastruktur sollte in der Lage sein, zunächst skalierend aufzuladen, um bestehende Ressourcen zu maximieren und mit zunehmenden Workloads zu übergehen. Wenn die Software-Architektur es zulässt, lohnt es sich auch, sich eine Hybrid-Approach anzusehen, bei der vertikale Skalierung Einzel-Knoten optimiert und horizontale Skalierung den Gesamtsystemwachstum und die Redundanz bietet.

Design To Fail Fast

Ein moderner Dateninfrastruktur zu fail fast bedeutet, Systeme zu entwickeln, die Fehler schnell erkennen und behandeln können, was die Verlässlichkeit und die Resilienz verbessert. Wenn ein System down ist, geht meistens das Problem nicht auf der Anwendungsebene, sondern im Datenlayer, der die Belastung nicht bewältigen kann. Bei der Skalierung sollten bei einem oder mehreren Komponenten innerhalb der Dateninfrastruktur Fehler schnell aufgetreten und schnell behoben werden. Während dieser Zeit sollte die Daten Ebene, da stateful, den fail-und recovery-Prozess minimieren, um Daten inkonsequenzen zu reduzieren. Der High Availability sollte für die Dateninfrastruktur heute intuitiv und mühelos sein.

Der Entwicklungsweg von Backup über Replikation bis hin zu automatischem Failover ist entscheidend, um hohen Verfügbarkeit in Systemen zu erreichen. Jeder Abschnitt verbessert, wie die Daten geschützt sind und von Failovers erholen.

  • Der Übergang von periodischen Backups, die für die langfristige Datenwiederherstellung notwendig sind, zu kontinuierlicher Replikation verbessert die Datenverfügbarkeit und verringert die Wiederherstellungsfälle.
  • Die Implementierung eines automatischen Failovers auf der Basis von Replikation gewährleistet, dass Anwendungen laufen bleiben. Failover-Systeme erkennen Fehler automatisch an und wechseln zu Replikaten, um eine hohe Verfügbarkeit zu gewährleisten.
  • Lastenselektion, verteilte Architekturen und Containerorchestrierung können die Verfügbarkeit weiter verbessern.

Legacy-Dateninfrastrukturen haben oft ein Single Point of Failure und fehlen redundante Mechanismen, was sie anfällig für Downtime und Datenverlust macht. Heute sind die oben erwähnten Features unerlässlich und sollten für Entwickler leicht zugänglich sein.

Eine moderne Dateninfrastruktur muss hohe Verfügbarkeit und Fault Tolerance aufweisen und vom Benutzer ausgehend einfach wie ein Toggle (entweder in der UI oder in der CLI) sein. Offensichtlich ist ein Anwendung ohne verfügbare Daten sinnlos und Downtime kann zu Verlust von Einnahmen und Ruf führen. Daher ist ein automatischer Failover und hohe Verfügbarkeit ein Muss.

Seien wir bei einem Beispiel. Wenn ein E-Commerce-Shop während des Black Friday-Sales down geht, weil die Datenebene keine hohe Verfügbarkeit bietet, führt das direkt zu Einnahmenverlusten. Und solche Einnahmenverluste könnten nicht mehr ausgeglichen werden. Um hohe Verfügbarkeit Ihrem DatenSpeicher hinzuzufügen, sollte eine moderne Dateninfrastruktur es Ihnen erlauben, einfach dafür zu togglen und Ihre Verfügbarkeitsbereiche zu wählen. Mit ein paar Klicks in der UI oder mit minimaler zusätzlicher Konfiguration sollte hohe Verfügbarkeit bei den Fingernägeln verfügbar sein.

Entwurf für Geschwindigkeit

Heutzutage werden wir frustriert, wenn eine Google-Suche nicht sofort lädt oder die Oberfläche in einer App mehr als einen Millisekunden dauert, bis sie uns bereit steht. Standardmäßig müssen Datenbanken und DatenSpeicher in der Lage sein, schnell auf Benutzereingaben zu reagieren, wenn der Durchsatz hoch ist. Benutzer erwarten eine Echtzeit- oder nahezu Echtzeit-Erfahrung von allen Anwendungen. Viele Male ist selbst ein paar Millisekunden zu langsam. Zum Beispiel kann ein Web-API-Request zu einer oder wenigen Abfragen an die primäre Festplatten-Datenbank führen und dann weniger bis zu zehn Operationen an das In-Memory-DatenSpeicher. Für jede Operation am In-Memory-DatenSpeicher ist eine Submillisekunden-Reaktionszeit eine unerläßliche Notwendigkeit für die erwartete Benutzererfahrung.

100ms oder weniger ist eine ideale Wartezeit für einen Menschen, der mit Technologie interagiert, da sie unmittelbar erscheint. Alles über 200ms macht die Latenz deutlich und lässt den Menschen frustrieren. Also, wenn eine Anwendung eine Latenz von mehr als 200ms hat, neigen Menschen dazu, zu melden, dass sie schwer zu verwenden ist. Zum Beispiel kann es für einen Kunden langsam werden, wenn ein Zahlungsvorgang mehr als wenige Sekunden dauert, um verarbeitet zu werden. Wenn der Kunde Zeit spenden muss, um herauszufinden, ob seine Zahlung durchgeführt wurde, könnte er das Interesse an einem Kauf verlieren.

Design für Sicherheit

Im Zuge der zunehmenden Digitalisierung erfordern Online-Aufgaben die Übermittlung von persönlichen Informationen und Daten im Internet. Auch wenn wir die Daten nicht selbst verwenden, sammeln Applikationen Informationen über unser Online-Verhalten, die viel über uns sagen können. Durch das Benutzen von Software und Apps ist jeder anfällig für Datenmissbrauch, Cybersecurity-Bedrohungen und sogar Identitätsdiebstahl. Dies legt den Ingenieuren die Verantwortung dar, Sicherheit sorgfältig in Betracht zu ziehen, wenn sie ihre moderne Dateninfrastruktur entwerfen, sowie den Bedarf, die Compliance und die Datenintegrität zu halten.

Durch die Implementierung von RBAC, ACLs und sicherten Netzwerktopik, können Ingenieure ein grundlegend robustes Sicherheitsrahmenwerk entwickeln, um jegliche Bedrohungen zu behandeln und ihre Software-Daten zu schützen.

RBAC, oder Rollenbasierte Zugriffssteuerung, ist ein System zur Begrenzung des Zugriffs basierend auf rollenbasierten Zugriffsberechtigungen. Jenseits der Rollen- und Berechtigungsdefinitionen erfordert RBAC eine regelmäßige Überprüfung dieser Zuweisungen, um unautorisierte Zugriffe zu blockieren. RBAC bietet auch eine feinere Kontrolle über die Benutzerberechtigung und erleichtert die Verwaltung der Berechtigungen, wenn Personen der Organisation beitreten und/oder die Organisation verlassen.

ACLs, oder Zugriffssteuerungslisten, definieren, welche Benutzer oder Systeme Zugriff auf bestimmte Ressourcen erhalten oder verweigert bekommen. ACLs sind noch feiner granuliert als RBAC und bieten Flexibilität, da sie auf verschiedene Arten von Ressourcen angewendet werden können, wie Dateien, Verzeichnisse und Netzwerkgeräte.

Sicherheitsübungen schützen Daten in Bewegung und stellen sicher, dass Netzwerkkommunikationen gegen unerlaubte Zugriffe und Angriffe geschützt sind. Zum Implementieren von sicheren Netzwerkpraktiken sollten Verschlüsselungsprotokolle wie TLS und SSL verwendet werden, um Daten während der Übertragung zu schützen. Firewalls und Sicherheitsgruppen sollten basierend auf den Sicherheitsregeln der Organisation den Verkehr steuern. Ein Netz sollte in verschiedene Bereiche segmentiert werden, um Brechungen zu vermeiden und Angriffe zu begrenzen. VPNs und sichere Zugriffslösungen helfen ebenfalls dabei, sich gegen den Remotezugriff zu schützen.

Es ist auch wichtig, dass Datenabtastverfahren innerhalb der Organisation mit verschlüsselten Übertragungen und sicheren Dateiabtastplattformen wie Google Drive oder Dropbox gesichert werden, je nach den Bedürfnissen der Firma. Die Aufbewahrung von klaren Dokumentationen für Datenaustauschverfahren erleichtert auch die Konsistenzpflege.

Entwurf für maintainable

veraltete Systeme haben oft eng miteinander verbundene Komponenten und starke Architekturen, was es schwierig macht, neue Teile ohne die Schaffung von Silos und den Anstieg der Wartbarkeit zu konfigurieren, zu erweitern und zu integrieren. Die Dateninfrastruktur von Software ist ein System von beweglichen Teilen. Jeder Teil muss zusammenarbeiten, konfigurierbar sein und erweitert werden können — alles ohne Silos zu schaffen. In der Praxis ist dies aufgrund der Art, wie fallible Menschen jeden beweglichen Teil verwenden, nicht einfach zu erreichen. Allerdings gibt es einige Tipps, um die Aufgabe vertretbarer zu machen:

  • Verwende standardisierte APIs. Wenn Menschen bereits bekannt sind (und potenziell verwendet haben) das API, wird es ihnen einfacher machen, sich auf das Projekt aufzuladen und andere Tools zu integrieren. Es wird auch einfacher werden, Wissen zu teilen und die Teamgröße zu skalieren.
  • Wenn eine neue Technologie zu einer Dateninfrastruktur-Schicht hinzugefügt wird, muss sie problemlos mit anderen Werkzeugen integriert werden, wie z.B. Deployment, Logging, Monitoring, Observability und Sicherheit. Eine problemlose Integration mit Tools, Plattformen und Sprachen kann es auch einfacher machen, mehr Probleme mit einer einzigen Lösung zu lösen.
  • Denke daran, dass weniger mehr bedeutet. Die geringere Zahl von beweglichen Teile bedeutet weniger Komplexität und Integrationsprobleme. Wann immer es möglich ist, das Hinzufügen eines zusätzlichen Tools zum Set zu vermeiden, erspare es und finde eine Lösung, die mit bestehenden Ressourcen funktioniert.

Auch wenn alles in eine einzige ökosystematische Anordnung passt, macht eine modulare Datenarchitektur mit Mikroservices und Containerisierung die Aktualisierung oder Ersetzung von individuellen Komponenten einfacher. Es ist auch sinnvoll, Automatisierung wo immer möglich für Aufgaben wie Deployment, Skalierung und Monitoring zu verwenden. Dies reduziert die menschliche Intervention und Fehler. Und natürlich sollte man hochwertige Dokumentation und Standardisierung über das gesamte Ökosystem hinweg aufrecht erhalten.

Kosteneffizienz planen

Wir haben während der Diskussion über Skalierbarkeit leicht auf Kosteneffizienz eingegangen, aber lassen Sie uns das Thema etwas tiefer untersuchen. Mit der zunehmenden Komplexität und Größe der Datenoperationen ist Kosteneffizienz ein zentrales Element für die fortgesetzte Innovation. Im Wettbewerbsumfeld der Softwarebranche sind Unternehmen, insbesondere Start-ups und mittelständische Unternehmen oft mit knapper Budgetierung und finanziellen Einschränkungen konfrontiert — jedes Dollar zählt. Dies macht es unerlässlich, sicherzustellen, dass jeder Dollar, der ausgegeben wird, direkt zum Wertschöpfungsprozess und zur operativen Effizienz beiträgt und kein Skalierbarkeit für zukünftige Wachstum erkauft.

Ein Beispiel für ein Tool, das operative Effizienz fördert, ist DuckDB. Na ja, ein riesiger Cluster von leistungsstarken Computern kann die Ergebnisse unserer komplexen Analyseabfragen berechnen, aber sollten Ingenieure bedenken: brauchen Sie wirklich so viel Leistung? Die meisten Organisationen benötigen lediglich Datenanalyse über den Zeitraum von hunderten GB bis zu einigen TB Daten. DuckDB, als ein leichtes Engine, kann Ingenieuren die notwendigen Dinge bieten, ohne ihnen für Features und Leistung, die sie nie verwenden, unnötig das Bankguthaben zu erschöpfen. Im Gegensatz dazu wurden legacy Dateninfrastrukturen nicht für Kosteneffizienz entwickelt, da sie oft auf teuren, proprietären Hardware und Software angewiesen waren, bedeutende Vorauszahlungen erforderten und hohe laufende Wartungskosten verursachten. Zusätzlich führte ihre Unfähigkeit, effizient skalieren zu können, zu Überbestimmung von Ressourcen, um Spitzenlasten zu bewältigen, was zu verschwommener Kapazität und höheren Betriebskosten führte.

Es ist auch wichtig zu prüfen, ob das von der Team angewendete Tool Transparenz in Bezug auf die Preisberechnung bietet. Einige Produkte berechnen ihre Gebühren auf der Basis der „Anzahl der Lesedaten und Schreibdaten“, der „Anzahl der gelesenen Zeilen“ oder des „gesamten verarbeiteten Datenvolumens“. Aber was bedeuten diese Zahlen wirklich? Die meisten Teams haben gar nicht selbst auf solche Metriken Zugriff, und selbst wenn, verstehen sie nicht, wie das Produkt diese Zahlen bestimmt. Dies kann dazu führen, dass die Kosten absurrdie sind und schwer zu verfolgen und zu beheben sind. Shopify beispielsweise, hatte mit BigQuery zu tun, der keine überholte Technologie ist, und es kam zu einer Millionen-Dollar-Abfrage.

Am Ende des Tages sollten in einer modernen Dateninfrastruktur die Kosten vorhersagbar und effizient sein (selbst bei skalierter Nutzung). Alle Teammitglieder sollten die Preisgestaltung verstehen können, was ein wichtiges Kriterium für Ingenieure ist, während sie Software entwickeln. Dies gesagt, sollten die Kosten einer Dateninfrastruktur definitiv nicht mit der Größe der Benutzerbasis eines Softwares ansteigen, solange diese effizient gewachsen ist.

Entwurf für die Entwickler Erfahrung

Eine moderne Dateninfrastruktur, die auf eine positive Entwickler Erfahrung optimiert ist, kann die Produktivität erhöhen, die Entwicklung beschleunigen und Fehler reduzieren. Aber was suchen Entwickler in einer guten Erfahrung? Wir meinen Einfachheit des Gebrauchs, vertraute Tools und Integrationen, die Freiheit, Daten leicht zugänglich und verarbeitbar zu machen, und die Ungeduld mit der Sicherheit. Im Gegensatz dazu möchten wir nicht mit einer unfashionablen Datenbank arbeiten, die eine extrem komplexe Konfiguration hat, nicht gut aus der Box funktioniert und sehr spezialisiertes Wissen erforderte, um sogar zu beginnen.

Intuitive und vertraute APIs und SDKs können es Entwicklern einfacher machen, sich in die Erstellung von datengetriebenen Anwendungen einzulenken und sollten verfügbar und leicht zugänglich bereitgestellt werden. Zum Beispiel ist CockroachDB kompatibel mit dem PostgreSQL-Netzwerkprotokoll und API, was es Entwicklern erheblich einfacher macht, bestehende Anwendungen zu migrieren. Diese Kompatibilität erlaubt es CockroachDB, Teil des PostgreSQL-Ökosystems zu sein, was Entwicklern erlaubt, ihr bestehendes Wissen und ihre Tools zu nutzen. Neben der Bereitstellung von klaren und einfach zu verwendenden Dokumentationen für die Dateninfrastruktur ist es auch eine gute Idee, sicherzustellen, dass auch Dokumentationen für APIs, SDKs und andere Tools vorhanden sind, um Entwicklern auf der Suche nach Sperrungen und Hindernissen zu helfen.

Nun möchte man den Prozess der Nutzung der Dateninfrastruktur so einfach wie möglich machen, indem man reiche Funktionalitäten bietet, die verschiedene Anwendungsfälle unterstützen und allgemein erforderliche Verkürzungen einführen. Dies kann u.a. einen full-text Suche, geografische Abfragen und integrierte Verbindungen für verschiedene Datenquellen umfassen.

Unterstützung für verschiedene Datentypen (Strings, Zahlen und Vektoren sowie Embedding für AI) und mehrere Modelle (relational, key-value, graphisch, dokumentarisch) reduziert die Notwendigkeit für zusätzliche Tools und Integrationen, minimiert die Komplexität in der Datenverarbeitung und erleichtert das Abfragen und Analysieren von Daten in verschiedenen Formaten. Und ja, genau, ein Vektor ist nur ein Datentyp und wird von allen führenden Datenplattformen unterstützt oder wird dies tun.

Andererseits gibt es die Sicherheit. Wir haben bereits über die Bedeutung und Komponenten der Sicherheit gesprochen, aber es ist auch wichtig zu bemerken, dass Sicherheit aus Sicht des Benutzers integriert sein sollte. Ein Entwicklungsteam, das keine Sicherheitskompetenzen besitzt, sollte sich nicht um diese Sache kümmern müssen, sobald der Datenendpunkt ordnungsgemäß geschützt ist. Zusätzliche Funktionen, wie z.B. die Verschlüsselung bei Ruhestand, sollten ebenfalls leicht konfigurierbar und umschaltbar sein.

Insgesamt geht es beim Entwickeln von Tools für Entwickler darum, langweilige Prozesse schneller und einfacher zu machen, sodass Ingenieure sich auf die Innovation konzentrieren können, die sie um das, was sie bauen, herum erarbeiten.

Fazit

Beim Entwurf einer modernen Dateninfrastruktur sollten die Hauptprinzipien Skalierbarkeit, hohe Verfügbarkeit, Geschwindigkeit, Sicherheit, Wartbarkeit, Effizienz und natürlich die Entwickler Erfahrung im Gedächtnis gehalten werden.

Zeit nehmen, um Ihre eigene Produktdateninfrastruktur anhand dieser Prinzipien zu bewerten: haben Sie eine moderne Dateninfrastruktur? Denken Sie daran, dass Sie diese Komponenten in der Zukunft beachten sollten, wenn Sie Datentechnologien hinzufügen oder entfernen.


Source:
https://dzone.com/articles/principles-of-modern-data-infrastructure