Write-Around ist eine Caching-Strategie, die verwendet wird, um den Umgang mit Schreiboperationen zwischen Hauptspeicher und Cache zu optimieren. Das Hauptkonzept besteht darin, Schreiboperationen am Cache vorbeizuführen und die Daten direkt in den Hauptspeicher (z. B. Festplatte oder Datenbank) zu schreiben, ohne sie in den Cache aufzunehmen.
Write-Around bietet somit eine Balance zwischen Cache-Effizienz und reduzierter Cache-Verwaltungsüberlastung, kann aber die Leistung bei häufigen Lesezugriffen auf neu geschriebene Daten beeinträchtigen.
Write-Back (auch als Write-Behind bezeichnet) ist eine Caching-Strategie, bei der Änderungen zuerst nur im Cache gespeichert werden und das Schreiben in den zugrunde liegenden Datenspeicher (z. B. Datenbank) auf einen späteren Zeitpunkt verschoben wird. Diese Strategie priorisiert die Schreibperformance, indem die Änderungen vorübergehend im Cache gehalten und später in einem Batch oder asynchron an die Datenbank übergeben werden.
Write-Back ist eine Caching-Strategie, die Änderungen zunächst im Cache speichert und das Schreiben in den zugrunde liegenden Datenspeicher auf einen späteren Zeitpunkt verschiebt, oft in Batches oder asynchron. Diese Methode bietet eine höhere Schreibperformance, birgt aber Risiken wie Datenverlust und Inkonsistenzen. Sie ist ideal für Anwendungen, die eine hohe Schreiblast haben und mit einer gewissen Inkonsistenz zwischen Cache und persistentem Speicher leben können.
Write-Through ist eine Caching-Strategie, die sicherstellt, dass jede Änderung (Schreiboperation) an den Daten synchron sowohl in den Cache als auch im ursprünglichen Datenspeicher (z. B. Datenbank) geschrieben wird. Dadurch bleibt der Cache immer konsistent mit der zugrunde liegenden Datenquelle. Das bedeutet, dass ein Lesezugriff auf den Cache stets die aktuellsten und konsistenten Daten liefert.
Write-Through ist eine Caching-Strategie, die die Konsistenz von Cache und Datenspeicher sicherstellt, indem sie jede Änderung in beiden Speicherorten gleichzeitig durchführt. Diese Strategie ist besonders nützlich, wenn Konsistenz und Einfachheit wichtiger sind als maximale Schreibgeschwindigkeit. In Szenarien, in denen häufige Schreiboperationen vorkommen, kann jedoch die erhöhte Latenz problematisch sein.
Closed Source (auch Proprietary Software genannt) bezeichnet Software, deren Quellcode nicht öffentlich zugänglich ist und nur vom Eigentümer bzw. Entwickler eingesehen, geändert und weitergegeben werden kann. Im Gegensatz zu Open Source-Software, bei der der Quellcode offengelegt wird, bleibt der Quellcode bei Closed Source streng vertraulich.
Geschützter Quellcode: Der Quellcode der Software ist nicht für die Öffentlichkeit einsehbar. Nur der Entwickler oder das Unternehmen, das die Software besitzt, hat Zugriff darauf. Dadurch wird verhindert, dass Dritte die Funktionsweise der Software nachvollziehen oder Änderungen daran vornehmen können.
Lizenzrechtliche Beschränkungen: Closed Source Software wird häufig unter restriktiven Lizenzen vertrieben, die die Nutzung, Modifikation und Weitergabe streng regulieren. Dies bedeutet, dass Nutzer die Software nur innerhalb der durch die Lizenz erlaubten Rahmenbedingungen verwenden dürfen.
Zugangsbeschränkung: Nur autorisierte Entwickler oder Teams innerhalb des Unternehmens, das die Software besitzt, haben die Berechtigung, den Code zu modifizieren oder neue Funktionen hinzuzufügen.
Kommerzielle Nutzung: Closed Source Software wird oft als kommerzielles Produkt angeboten. Nutzer müssen in der Regel eine Lizenz erwerben oder Abonnements abschließen, um die Software zu nutzen. Typische Beispiele sind Anwendungen wie Microsoft Office oder Adobe Photoshop.
Geringere Transparenz: Nutzer haben keine Möglichkeit, den Quellcode auf Sicherheitslücken oder versteckte Funktionen (z. B. Backdoors) zu überprüfen. Dies kann ein Risiko darstellen, wenn Vertrauen in die Software-Sicherheit ein kritischer Faktor ist.
Einige bekannte Closed Source Programme und Plattformen sind:
Closed Source Software ist proprietäre Software, deren Quellcode nicht öffentlich zugänglich ist. Sie wird in der Regel von Unternehmen entwickelt und kommerziell angeboten. Nutzer können die Software verwenden, aber weder den Quellcode einsehen noch modifizieren. Dies bietet Vorteile in Bezug auf den Schutz des geistigen Eigentums und die Qualitätssicherung, geht jedoch zulasten der Flexibilität und Transparenz.
Hype Driven Development (HDD) ist ein ironischer Begriff in der Softwareentwicklung, der sich auf die Tendenz bezieht, Technologien oder Praktiken zu verwenden, weil sie gerade im Trend sind, anstatt sie aufgrund ihrer tatsächlichen Eignung für das Projekt auszuwählen. Entwickler oder Unternehmen, die HDD betreiben, neigen dazu, neue Frameworks, Tools oder Programmiersprachen zu adoptieren, weil sie gerade viel Aufmerksamkeit erhalten, ohne ausreichend zu analysieren, ob diese Lösungen wirklich die beste Wahl für ihre spezifischen Anforderungen sind.
Typische Merkmale von HDD:
Insgesamt führt Hype Driven Development häufig zu überkomplexen Architekturen, technischen Schulden und einem hohen Aufwand für die Einarbeitung in ständig wechselnde Technologien.
Batch Processing ist eine Methode in der Datenverarbeitung, bei der eine Gruppe von Aufgaben oder Daten als "Batch" (Stapel) gesammelt und anschließend gemeinsam verarbeitet wird, anstatt sie einzeln in Echtzeit zu bearbeiten. Diese Methode wird häufig verwendet, um große Mengen von Daten effizient zu verarbeiten, ohne dass menschliches Eingreifen notwendig ist, während der Prozess läuft.
Hier sind einige Merkmale von Batch Processing:
Zeitgesteuert: Die Aufgaben werden zu bestimmten Zeiten oder nach dem Erreichen bestimmter Datenmengen ausgeführt.
Automatisiert: Die Verarbeitung erfolgt in der Regel automatisiert und erfordert kein sofortiges Eingreifen.
Effizient: Da viele Aufgaben gleichzeitig bearbeitet werden, kann Batch Processing Ressourcen und Zeit sparen.
Beispiele:
Es eignet sich besonders für repetitive Aufgaben, die nicht sofort bearbeitet werden müssen, sondern in regelmäßigen Abständen erledigt werden können.
Contract Driven Development (CDD) ist eine Softwareentwicklungsmethode, bei der der Schwerpunkt auf der Definition und Verwendung von Contracts (Verträgen) zwischen verschiedenen Komponenten oder Services liegt. Diese Verträge spezifizieren klar, wie verschiedene Softwareteile miteinander interagieren sollen. CDD wird häufig in Microservices-Architekturen oder bei der Entwicklung von APIs verwendet, um sicherzustellen, dass die Kommunikation zwischen unabhängigen Modulen korrekt und konsistent ist.
Contracts als Quelle der Wahrheit:
Trennung von Implementierung und Vertrag:
Vertragsgetriebene Tests:
Consumer-Driven Contract
verwendet werden, um sicherzustellen, dass die vom Verbraucher erwarteten Daten und Formate vom Anbieter geliefert werden.Contract Driven Development eignet sich besonders für Projekte mit vielen unabhängigen Komponenten, bei denen klare und stabile Schnittstellen entscheidend sind. Es hilft, Missverständnisse zu vermeiden und stellt durch automatisierte Tests sicher, dass die Kommunikation zwischen Services robust bleibt. Die zusätzliche Komplexität bei der Verwaltung von Verträgen muss jedoch bedacht werden.
Domain-Driven Design (DDD) ist ein Ansatz zur Softwareentwicklung, der den Fokus auf die Modellierung des zugrunde liegenden Fachgebiets (der Domain) legt. Ziel ist es, komplexe Softwarelösungen zu entwickeln, die eng mit den Anforderungen und dem Verständnis der realen Geschäftswelt übereinstimmen. DDD wurde von Eric Evans in seinem Buch "Domain-Driven Design: Tackling Complexity in the Heart of Software" popularisiert.
Die Grundidee hinter DDD ist, dass die Struktur und das Verhalten der Software die zugrunde liegende Fachdomäne widerspiegeln sollten, um sicherzustellen, dass Entwickler, Fachexperten und andere Stakeholder effektiv zusammenarbeiten können.
Domain: Die Fachdomäne ist der zentrale Fokus von DDD und bezeichnet den Bereich des Geschäfts oder der Branche, die durch die Software abgebildet werden soll (z.B. E-Commerce, Finanzwesen).
Ubiquitous Language (Allgegenwärtige Sprache): Eine gemeinsame Sprache, die von Entwicklern und Fachexperten verwendet wird, um die Domäne klar und präzise zu beschreiben. Diese Sprache hilft, Missverständnisse zu vermeiden.
Entities und Value Objects:
Aggregates: Eine Gruppe von zusammenhängenden Objekten (Entities und Value Objects), die als eine Einheit behandelt werden. Aggregates haben immer eine Root Entity (Wurzelentität), die als zentraler Zugriffspunkt dient.
Repositories: Speichern und verwalten der Aggregates. Sie fungieren als Schnittstellen, um den Zugriff auf Daten und das Speichern von Objekten zu abstrahieren.
Services: Methoden oder Operationen, die bestimmte Domänenlogiken implementieren, aber nicht direkt zu einer spezifischen Entität gehören.
Bounded Context: Ein klar abgegrenzter Bereich innerhalb der Domäne, in dem bestimmte Begriffe und Konzepte eindeutig definiert und verwendet werden. Verschiedene Bounded Contexts können unterschiedliche Modelle derselben Begriffe haben.
Domain Events: Ereignisse, die innerhalb der Domäne auftreten und signalisieren, dass etwas Relevantes passiert ist, was zu einer Änderung im Zustand führen kann.
Domain-Driven Design ist besonders hilfreich in komplexen Projekten, bei denen die Geschäftslogik im Mittelpunkt steht und sich oft ändert.
Rolling Deployment ist eine Methode zur schrittweisen Bereitstellung einer neuen Softwareversion, bei der die Anwendung Server für Server oder Knoten für Knoten aktualisiert wird. Ziel ist es, eine kontinuierliche Verfügbarkeit der Anwendung während des Updates sicherzustellen, indem immer nur ein Teil der Infrastruktur aktualisiert wird, während der Rest weiterhin die alte Version verwendet.
Ein Rolling Deployment ist ideal für große, skalierbare Systeme, die eine kontinuierliche Verfügbarkeit erfordern, und reduziert das Risiko durch eine schrittweise Bereitstellung.
Ein Canary Release ist eine Technik im Software-Deployment, bei der eine neue Version einer Anwendung schrittweise und kontrolliert an eine kleine Untergruppe von Benutzern ausgeliefert wird. Ziel ist es, potenzielle Probleme frühzeitig zu erkennen, bevor die neue Version für alle Benutzer freigegeben wird.
Ein Canary Release bietet eine sichere und schrittweise Möglichkeit, neue Software-Versionen einzuführen, ohne alle Benutzer sofort zu beeinträchtigen.