Un messaging server di nuova generazione
NATS è un messaging server originariamente creato da Derek Collison (ex Cloud Foundry, VMware) nel 2010 in Ruby, riscritto in Go nel 2012. La società di sostegno è Synadia Communications. Licenza Apache 2.0.
A marzo 2018 NATS entra nel CNCF Sandbox; promosso a Incubating nel 2019 e Graduated nel 2024 (?). Lo sviluppo continua con focus su performance e semplicità.
Caratteristiche
NATS è progettato attorno a tre obiettivi: performance, semplicità, resilienza:
- Pub-Sub, Request-Reply, Queue Groups come pattern base
- Subject-based routing —
orders.europe.it, pattern wildcardorders.*.it,orders.> - Wire protocol testuale — debug via telnet/nc
- Single binary Go — no dipendenze
- Cluster nativo — nodi NATS si scoprono via gossip, formano mesh full-connected
- Superclusters — connessioni tra cluster geografici
- Leaf nodes — edge deployment con subset di traffico
Performance
Benchmark pubblicati mostrano milioni di messaggi/secondo per nodo su hardware commodity, con latenza sub-millisecond. È progettato per essere l’opposto di Kafka in termini di design: low-latency, fire-and-forget piuttosto che persistenza durevole.
JetStream (persistenza)
NATS originariamente non persistente. Nel 2020 (NATS 2.2) introduce JetStream: persistent streaming con exactly-once semantics, replay, compaction. Rivaleggia con Kafka per casi di event sourcing ma con footprint molto inferiore.
Uso
NATS è scelto in scenari dove Kafka è eccessivo:
- IoT — messaggi da milioni di device
- Microservizi real-time — request/reply intra-cluster
- Gaming — low-latency coordinamento
- Cloud-native — alternativa a message broker classici
- Edge computing — leaf nodes portano logica vicino a sensori
Nel contesto italiano
Adoption italiana in:
- IoT aziendale — gestione flotte, smart manufacturing
- Gaming studios
- Microservices startup
- Banche con sistemi algorithmic trading (bassa latenza)
Confronto
- Kafka — persistenza durevole, alta throughput ma alta latenza
- RabbitMQ — AMQP protocol, routing complesso, più heavy
- Redis Pub-Sub — semplice ma senza persistenza né resilienza
- NATS — sweet spot tra semplicità, performance, resilienza cluster
Riferimenti: NATS Server in Go (2012). Derek Collison, Synadia Communications. CNCF Sandbox (marzo 2018), Incubating (marzo 2019). Licenza Apache 2.0. JetStream (2020, NATS 2.2). Protocollo testuale. Subject-based routing.
