Dağıtık backplane ve Redis
Aynı uygulamanın birden fazla node’unda canlı yayın taşıyın; Required/Optional ve readiness davranışlarını belirleyin.
Backplane, local client hedeflerini diğer node'lara taşır. lily_websocket_redis online Redis Pub/Sub adapter'ıdır. Oda ve principal üyelikleri kendi node'larının connection manager'larında kalır.
Adapter’ı açıkça seçin#
İlk uygulamanın lilyrs satırını aşağıdaki feature listesiyle güncelleyin. websocket-redis yalnız adapter'ı açar; server modülü için websocket de seçilir. Cache'in redis feature'ı ayrı bir ihtiyaçtır.
lilyrs = { version = "0.1.0", features = ["websocket", "websocket-redis"] }use lilyrs::websocket::{BackplaneRequirement, WsAppBuilder};
use lilyrs::websocket_redis::RedisWebSocketBackplane;
let builder = WsAppBuilder::default()
.backplane::<RedisWebSocketBackplane>(BackplaneRequirement::Required);Bu builder'ı normal build/start akışında kullanın. Yalnız config eklemek backplane'i etkinleştirmez. App başına tek backplane seçilir. Adapter kendi publisher/subscriber bağlantılarını yönetir; lily_redis pool'unu paylaşmaz.
Config#
[websocket.backplane]
redis_url = "${secret:websocket.redis_url}"
use_tls = true
application_namespace = "orders-api"
environment_namespace = "production"
channel_namespace = "events"
publish_capacity = 64
ingress_capacity = 256
connection_timeout_millis = 5000
operation_timeout_millis = 2000
reconnect_initial_delay_millis = 100
reconnect_max_delay_millis = 5000
reconnect_jitter_ratio = 0.2Secret placeholder gerçek SecretResolver tarafından çözülmelidir. Production doğrulaması credential içeren rediss:// ve TLS ister. custom_ca_bundle kullanırsanız canonical absolute PEM dosya yoludur; custom CA mevcut public trust köklerine eklenmez, bağlantının köklerini değiştirir.
Required ve Optional#
| Durum | Sonuç |
|---|---|
| Adapter yok | Local dispatch |
| Required constructor başarısız | Build başarısız |
| Optional constructor başarısız | Gözlenebilir degraded local-only app |
| Required çalışma sırasında kesildi | Readiness düşer; mevcut socket loop'ları sırf bundan kapanmaz |
| Publisher ve ilk subscription sağlıklı | Backplane'in required readiness koşulu sağlanır |
| Local send sonrası publish başarısız | Local etkiler kalır; hata local raporu taşır |
| Bilinen kesintide yeni publish | Başarısız; reconnect sonrası replay yok |
Application health'in diğer required kontrolleri ayrıca sağlanmalıdır. Observability snapshot'ı kendi probe endpoint'inize bağlamayı açıklar.
Protokol ve genişletme#
Channel yapısı lily.websocket.v4.<environment>.<application>.<channel> kullanır. Backplane routing generation v4 ile client envelope v2 farklı katmanlardır. Aynı deployment node'ları aynı generation ve namespace ayarlarını kullanmalıdır.
WebSocketBackplane custom adapter için opaque taşıma SPI'sıdır; adapter routing zarfını kendisi yeniden üretmez. Bounded publish/ingress, health ve close sözleşmesini uygular. Duplicate/origin-loop suppression sınırlıdır; sonsuz geçmişte exactly-once garantisi vermez.
Teslim ve kapasite sınırı#
Redis publish kabulü uzak istemci teslimi değildir. Offline inbox, kalıcı history, replay, kesin global sıra veya uzak alıcı ACK toplamı yoktur. Receipt yalnız kendi tanımlı acceptance eşiklerini gösterir.
Native Redis Cluster/Sentinel discovery bulunmaz; HA için kararlı endpoint sağlamak deployment işidir. Redis client bulk payload'ı adapter admission'dan önce decode edebilir; güvenilmeyen Redis publisher'a karşı allocation öncesi tam bellek sınırı iddiası yapılmaz. Queue sınırları toplam process belleğini tek başına sınırlamaz.
Bu sayfanın kaynakları v0.1.0
Anlatım, incelenen framework commit’ine dayanır.