iToverDose/Yazılım· 25 MAYIS 2026 · 04:00

XState Kalıcılık Problemini Çözme

XState kalıcılık problemi beş yıldan uzun süredir devam ediyor. StateKeep ile bu problemi çözmek artık mümkün.

DEV Community2 dk okuma0 Yorumlar

2019 yılında XState deposunda bir GitHub sorunu açıldı. Sorunun başlığı 'XState aktör durumunu sunucu yeniden başlatmalar arasında nasıl kalıcı hale getirebilirim?' idi. Bu, depodaki en çok oy alan açık sorunlardan biri oldu. Çekirdek ekibin cevabı nettı: XState, kalıcılıkla ilgilenmez. Durum nesnesini seri hale getirin ve kendiniz depolayın. Beş yıl sonra, bu cevap değişmedi. Birçok blog yazısı, geliştiricilere nasıl kendi kalıcılık katmanını oluşturacağını gösteriyor. Bunların her biri, aslında ürünleriyle ilgili olmayan aynı altyapıyı yeniden icat eden bir geliştiricidir. Biz de bunu yeniden icat etmekten bıktık. Bu nedenle StateKeep'i inşa ettik.

Problemin Kaynağı

XState durumunu kalıcı hale getirmek basit görünüyor. actor.getSnapshot() çağrısı yapın, seri hale getirin, Redis veya Postgres'de depolayın. Başlangıçta, yeniden hidrasyona hazır olun. İşe yarar. Ancak işe yaramaz hale geldiğinde, sorun başlar. XState v5, 2023'te yayınlandı ve anlık görüntü formatını değiştirdi. Eski formatta aktörleri kalıcı hale getiren ekipler, kötü bir hafta geçirdiler. Bazı seri hale getirilmiş durumlar, seri hâlinden çıkarma sırasında çöktü. Diğerleri sessizce bağlamı bozdu. Format, nunca kamu API'si olarak ele alınmadı — çünkü XState bir kütüphane ve kütüphaneler, çıktı ile yaptığınız şeyden sorumlu değildir. v5'teki kesintiden önce, sudah göç sorunu vardı. Sipariş yönetim akışınız bir tabloda yaşıyor. 40.000 aktif siparişiniz var. Ürün ekibiniz, kalite gözden geçirme adımını eklemelidir. Bir göç betiği yazarsınız. Staging'de test edersiniz. Üretimde gece yarısında çalıştırırsınız. 847 siparişin, hesaplamadığınız bir kenar durumunda olduğunu keşfedersiniz. Onları manuel olarak düzeltmek için sonraki üç saati harcarsınız. Bu, XState problemi değildir. Bu, geliştirici becerisi problemi değildir. Bu, altyapı boşluğudur. XState kütüphanesi ile uygulama veritabanınız arasında, aktörleri kod değişiklikleri arasında canlı tutan bir katman yoktur.

StateKeep'in Çözümü

StateKeep, bu problemi gördü. StateKeep, XState aktörlerinizi kalıcı hale getiren, yeniden başlatmalar arasında canlı tutan ve size olay gönderme ve durum okuma API'si sunan bir self-hosted statechart barındırma platformudur. Herhangi bir arka uç dili çalışır — Python, Go, Java, Node, herhangi bir HTTP istemcisi olan dil. Yeni bir sürüm dağıttığınızda, bir historyPath bildirirsiniz:

{ "id": "loan-v2", "parentId": "loan-v1", "historyPath": ["SUBMIT_INFO", "PAY_FEE"], "definition": { ... } }

StateKeep, her aktörü değerlendirir. Her aktör,処理 ettiği olayların sıralı FNV-1a karma değerini taşır — bir olay türü karma değerinin yuvarlak FNV-1a karma değeri. Tarihleri bildirilen yola uyan aktörler göç eder. Tarihleri uymayan aktörler, geçerli sürümde kalır. Alice ücreti ödedi. Parmak izi uyuşuyor. loan-v2'ye göç ediyor, yeni tanım onu gelir doğrulama adımından önce onaylama yoluyla yönlendiriyor. Bob ücreti muaf tuttu. Parmak izi uyuşmuyor. loan-v1'de kalıyor, normal olarak devam ediyor. İki aktör de çalışmaya devam ediyor. Hiçbiri yeniden başlatılmıyor. Hiçbiri bağlamını kaybedmiyor. Hiç göç betiği yok. Gece yarısı dağıtım kaygısı yok. Yönlendirme, mühendislik güvenine dayanmıyor. Her aktörün tam olarak doğru sürüme ulaştığını garantileyen, hiçbir aktörün iki kez değerlendirilmediğini, zamanlama veya değerlendirme sırasına bakılmaksızın gösteren formal bir matematiksel kanıt tarafından desteklenmektedir. Algoritma, yerli C'de p50 1.26µs'de çalışır — mütevazi donanım上的 50.000 aktör, bir saniyenin altında.

Uygulamada Nasıl Görünür

import { createClient } from '@statekeep/sdk';
const sk = createClient({ baseUrl: ' apiKey: 'sk_...' });
// Makine tanımı dağıt
await sk.deploy('loan-v1', { id: 'loan', initial: 'submitted', states: { submitted: { on: { SUBMIT_INFO: 'under_review' } }, under_review: { on: { PAY_FEE: 'awaiting_documents' } } } });

Gelecekte, StateKeep gibi platformlar, geliştiricilerin kalıcılık sorunlarıyla daha kolay başa çıkmasını sağlayacaktır. XState gibi kütüphaneler, daha fazla geliştirici tarafından benimsenecektir. StateKeep, sadece bir başlangıç noktasıdır. Ancak, doğru yönde atılmış önemli bir adımdır.

Yapay zeka özeti

XState kalıcılık problemi artık StateKeep ile çözülüyor. StateKeep, XState aktörlerinizi kalıcı hale getiren ve canlı tutan self-hosted bir platformdur.

Yorumlar

00
YORUM BIRAK
ID #K8QPJ1

0 / 1200 KARAKTER

İnsan doğrulaması

5 + 2 = ?

Editör onayı sonrası yayına girer

Moderasyon · Spam koruması aktif

Henüz onaylı yorum yok. İlk yorumu sen bırak.