Cloudflare Durable Objects Uitvoeren op Je Eigen Servers met celld
Ryan Dahl en het Deno-team hebben stilzwijgend het celld-project open source gemaakt. Als je ooit jaloers was op Cloudflare-gebruikers vanwege hun Durable Objects-concept, maar geen vendor lock-in wilde, kan dit je interesseren.
celld is een Rust-daemon runtime die Cloudflare Workers-bundels en geïsoleerde Durable Objects-instanties op je eigen hardware kan uitvoeren. Zonder Etcd, zonder Raft en zonder zware coördinatieservices.
De Kern van het Concept
Traditionele backends zijn doorgaans opgedeeld in stateless microservices en één grote relationele database. Naarmate de belasting toeneemt, wordt de database onvermijdelijk de belangrijkste bottleneck.
Cloudflare stelde een andere benadering voor. Elke actieve applicatie-entiteit (bijvoorbeeld een chatruimte, winkelwagen of documentsessie) krijgt zijn eigen V8-isolate en een persoonlijke SQLite-database. Het object ontwaakt wanneer een verzoek binnenkomt, houdt de status in het geheugen en een lokaal SQLite-bestand, en gaat gewoon slapen wanneer het inactief is.
Het hoofdprobleem was de gesloten aard van het ecosysteem: het draaien van zo'n opzet buiten de infrastructuur van Cloudflare was tot nu toe praktisch onmogelijk.
Hoe celld Intern Werkt
De celld-ontwikkelaars kozen voor radicale vereenvoudiging. De node-architectuur bestaat uit vier componenten:
- Embedded V8 voor het uitvoeren van JavaScript- en TypeScript-code uit Wrangler-bundels.
- Lokale SQLite voor het aparte databasebestand van elk object.
- S3-compatibele opslag (AWS S3, MinIO, Cloudflare R2) als enige bron van waarheid.
- Inter-server transport met HMAC-ondertekening voor gegevensuitwisseling tussen nodes.
De meest interessante oplossing hier is het loslaten van klassieke consensusprotocollen. Cluster-nodes hoeven geen leider te kiezen of Consul uit te voeren.
In plaats daarvan communiceren servers met S3 via een atomaire Compare-And-Swap (CAS) operatie. Wanneer een node eigendom van een object wil overnemen, schrijft het een eigendomsbestand naar de S3-bucket. Wie er als eerste via CAS het record kan bijwerken, verwerkt het verkeer. Als een node crasht, verloopt de write timeout en neemt een naburige server het object over, downloadt de verse SQLite-database uit de bucket en gaat verder.
Lancering en Implementatie
Standaard Wrangler-builds werken voor het bouwen van het project, maar je hebt een server met 5 en de binary zelf 6 nodig.
Installatie wordt gedaan met één commando:
0De workflow is opgedeeld in twee stappen. Eerst upload je de worker-build naar de bucket:
1Start vervolgens de daemon op de server:
2Elke node in de cluster leest de manifest 7 uit de bucket. Als je een extra server wilt opstarten, start je een ander proces met dezelfde bucket en geef je het netwerkadres op in 8.
Voor wat betreft beveiliging: celld's inter-serververkeer versleutelt TLS niet standaard. De auteurs raden aan om interne node-poorten achter een beveiligd overlay-netwerk zoals WireGuard of Tailscale te plaatsen. Alle peer-verzoeken worden automatisch ondertekend met een HMAC-sleutel 9 die de eerste node automatisch in de bucket aanmaakt.
Diagnostiek en Load Management
Voor cluster-monitoring is er het 10 hulpprogramma. Het pollt buren en toont huidige metrieken:
3Het commando toont CPU-verbruik, RSS-geheugen, het aantal actieve WebSocket-verbindingen en het aantal live objecten op elke node.
Als een server overbelast raakt, heeft celld een drukverlichtingsmechanisme voor actieve objecten. Limieten worden ingesteld via omgevingsvariabelen:
4Wanneer de drempel wordt overschreden, slaat celld inactieve objecten op in S3, geeft eigendom vrij en accepteert geen nieuwe entiteiten tot de belasting daalt naar de waarde van 11. Objecten met frequente verzoeken of open WebSocket-verbindingen worden niet beïnvloed.
Een Ongebruikelijke Benadering van Bijdragen
Als je naar de 12 repository gaat met de bedoeling een Pull Request te openen, vind je de knop uitgeschakeld. Forks zijn toegestaan, maar PR's op GitHub zijn volledig uitgeschakeld.
Ryan Dahl legt dit uit als een strijd tegen spam van AI-agents: het reviewen van gigantische automatisch gegenereerde pull requests zonder context kost te veel tijd van maintainers. Degenen die een patch willen sturen, wordt gevraagd om 13 te maken en het bestand te e-mailen naar het persoonlijke adres 14.
Voor Wie Is Dit Project De Moeite Waard
Het project is in actieve ontwikkeling, met protocolspecificaties opgeslagen direct in de Rust crate-code 15. Het is te vroeg om het in kritieke productie te trekken, maar experimenteren is zeker de moeite waard.
Het hulpmiddel is nuttig in de volgende gevallen:
- Ontwikkelaars van multiplayer-diensten, chats en aangepaste CRM's.
- Teams die van Cloudflare lock-in weg willen migreren zonder code te herschrijven.
- Fans van de architectuur met een aparte database per client-gebruiker.
- Engineers die leren over gedistribueerde systemen zonder Raft en Etcd.
Gerelateerde projecten