Hundehaufen
Dogpile besteht aus zwei Subsystemen, eines über dem anderen.
dogpile
bietet das Konzept einer „Dogpile-Sperre“, einer Kontrollstruktur, die es ermöglicht, einen einzelnen Ausführungsthread als „Ersteller“ einer Ressource auszuwählen, während andere Ausführungsthreads auf die vorherige Version dieser Ressource verweisen können Schöpfung geht weiter; Wenn keine vorherige Version vorhanden ist, werden diese Threads blockiert, bis das Objekt verfügbar ist.
dogpile.cache
ist eine Caching-API, die eine generische Schnittstelle für Caching-Backends jeglicher Art bereitstellt und zusätzlich API-Hooks bereitstellt, die diese Cache-Backends mit dem Sperrmechanismus von dogpile
integrieren.
Insgesamt ist dogpile.cache als Ersatz für das Beaker-Caching-System gedacht, dessen Interna vom selben Autor geschrieben wurden. Alle Ideen von Beaker, die „funktionieren“, werden in dogpile.cache auf effizientere und prägnantere Weise erneut implementiert, und der gesamte Mist (Beakers Interna wurden erstmals 2005 geschrieben) wird auf den Müllhaufen verbannt.
Dokumentation
Die vollständige Dokumentation von dogpile.cache finden Sie unter dogpile.cache-Dokumentation. Die folgenden Abschnitte bieten eine kurze Zusammenfassung der dogpile
-Pakete.
Merkmale
- Eine prägnante API, die die Vorabkonfiguration vordefinierter „Regionen“ fördert, wobei jede Region eine Reihe von Caching-Eigenschaften definiert, einschließlich Speicher-Backend, Konfigurationsoptionen und Standardablaufzeit.
- Es wird eine Standard-API zum Abrufen/Setzen/Löschen sowie eine Funktionsdekorator-API bereitgestellt.
- Die Mechanik der Schlüsselgenerierung ist vollständig anpassbar. Die Function-Decorator-API verfügt über einen steckbaren „Schlüsselgenerator“, um die Art und Weise anzupassen, wie Cache-Schlüssel an Funktionsaufrufe angepasst werden, und eine optionale „Key Mangler“-Funktion sorgt für die steckbare Manipulation von Schlüsseln (z. B. Codierung, SHA-1-Hashing) nach Wunsch für jede Region.
- Die Dogpile-Sperre, die ursprünglich als Kern-Engine des Beaker-Caching-Systems entwickelt wurde, wurde hier erheblich vereinfacht, verbessert und besser getestet. Einige wichtige Leistungsprobleme, die der Architektur von Beaker innewohnten, insbesondere dass Werte häufig „doppelt aus dem Cache abgerufen“ wurden, wurden behoben.
- Backends implementieren ihre eigene Version einer „verteilten“ Sperre, wobei die „Verteilung“ mit dem Speichersystem des Backends übereinstimmt. Beispielsweise ermöglichen die Memcached-Backends allen Clients, die Erstellung von Werten mithilfe von Memcached selbst zu koordinieren. Das DBM-Datei-Backend verwendet neben der DBM-Datei eine Sperrdatei. Neue Backends, beispielsweise ein Redis-basiertes Backend, können ihren eigenen, für die Speicher-Engine geeigneten Sperrmechanismus bereitstellen.
- Das Schreiben neuer Backends oder das Hacken bestehender Backends soll Routine sein – alles, was benötigt wird, sind grundlegende Get/Set/Delete-Methoden. Eine auf das Backend zugeschnittene verteilte Sperre ist eine optionale Ergänzung, ansonsten nutzt Dogpile einen regulären Thread-Mutex. Neue Backends können direkt bei dogpile.cache registriert oder über setuptools-Einstiegspunkte zur Verfügung gestellt werden.
- Die enthaltenen Backends umfassen drei Memcached-Backends (python-memcached, pylibmc, bmemcached), ein Redis-Backend, ein auf Pythons Anydbm basierendes Backend und ein einfaches Wörterbuch-Backend.
- Platz für Plugins von Drittanbietern, einschließlich eines, das die dogpile.cache-Engine für Mako-Vorlagen bereitstellt.
Das SQLAlchemy-Projekt
Dogpile ist Teil des SQLAlchemy-Projekts und folgt denselben Standards und Konventionen wie das Kernprojekt.
Entwicklung / Fehlerberichterstattung / Pull-Requests
Richtlinien zum Codieren und zur Teilnahme an diesem Projekt finden Sie im SQLAlchemy Community Guide.
Verhaltenskodex
SQLAlchemy legt vor allem großen Wert auf eine höfliche, rücksichtsvolle und konstruktive Kommunikation zwischen Benutzern und Entwicklern. Unseren aktuellen Verhaltenskodex finden Sie unter Verhaltenskodex.
Lizenz
Dogpile wird unter der MIT-Lizenz vertrieben.