SlideShare uma empresa Scribd logo
1 de 184
Baixar para ler offline
NATS Connect Live April 16, 2020
Writing a NATS
Client in a
Language Geared
for Performance
and Correctness
Rust and NATS
By: Tyler Neely
NATS Connect Live April 16, 2020 2
Who am I
● Building databases and distributed systems in Rust
since 2014
○ Performance Critical ⋂ Correctness Critical
systems
○ Created the http://sled.rs embedded lock-free
storage engine
● I became an engineer at Synadia because:
○ computation is becoming more location-agnostic
○ NATS is extremely well positioned to deal with
this world
● I’m a core maintainer of the Rust client
○ github.com/nats.io/nats.rs
NATS Connect Live April 16, 2020
Roadmap for
This Talk
● Intro to Rust
● Our Rust Client
● The Future
3
NATS Connect Live April 16, 2020
Rust History
● Began as a personal project of an
engineer who worked at Mozilla
Research in 2006
● Mozilla decided to invest in the
project in 2009, with the stretch
goal of potentially replacing
security-critical C++ code in Firefox
● The Mozilla Servo experimental
browser engine project began in
2012 to experiment with taking
advantage of Rust’s features
● In 2014, Rust 1.0 was released
● Voted Most Loved Language in
Stack Overflow’s annual developer
survey every year since 2016
4
NATS Connect Live April 16, 2020
Rust Interest
5
subredditstats.com/r/rust
NATS Connect Live April 16, 2020
Rust’s Advantages
● Excellent ergonomics for “programming in the large”
● Has a great built-in package manager, cargo
○ Automatic documentation generation, docs.rs/natsio
● Prevents memory corruption and data race bugs at compile-time
○ no GC or runtime race detector required
■ is quite nice to use for embedded programming
○ “Ownership” and “borrowing” guarantee:
■ no dangling references
■ at-most-once destruction
○ Microsoft: 70% of CVEs are related to memory corruption in C and C++
● Performs on-par with or better than C/C++
○ No need to make defensive copies
○ Can approach Fortran performance due to alias avoidance
● Can incrementally replace parts of a C/C++ codebase
○ We call this “oxidation”
○ Plays great with other languages via FFI
6
NATS Connect Live April 16, 2020
Who uses Rust?
● Google’s potential Android replacement, Fuchsia
● Amazon’s Firecracker VM which powers AWS Lambda
● Microsoft Azure IoT
● Facebook’s HHVM
● Twitter’s caching and build systems
● VxWorks RTOS (powers Mars Rover) now supports Rust
● Dropbox has rewritten its correctness-critical replication logic in Rust
7
NATS Connect Live April 16, 2020
Major Feature: Ownership
8
NATS Connect Live April 16, 2020
Major Feature: Ownership
9
NATS Connect Live April 16, 2020
Major Feature: Ownership
● By having items consumed by default when passed to other scopes, we have the
ability to treat functions as proofs that certain actions can only happen once
○ Useful for building strongly-typed state machines
○ Useful for building configuration objects that prevent misuse
○ Useful for encoding complex embedded hardware behavior using the type
system
● None of this adds any runtime cost. It is enforced at compile-time.
● We call this a “zero cost abstraction”
10
NATS Connect Live April 16, 2020
Major Feature: Ownership
● By having items consumed by default when passed to other scopes, we have the
ability to treat functions as proofs that certain actions can only happen once
○ Useful for building strongly-typed state machines
○ Useful for building configuration objects that prevent misuse
○ Useful for encoding complex embedded hardware behavior using the type
system
● None of this adds any runtime cost. It is enforced at compile-time.
● We call this a “zero [runtime] cost abstraction”
11
NATS Connect Live April 16, 2020
Major Feature: Borrowing
● If you don’t want to give a variable to a function that uses it, you may use Rust’s
borrowing system to pass a reference, instead.
● The borrow checker guarantees that the reference never outlives the object it
points to.
○ C/C++ programmers often discover dangling pointer bugs in their existing
codebases when porting them to Rust. This kind of bug is often taken
advantage of in exploits that attack systems.
● It is like a compile-time reader-writer lock.
○ several immutable references XOR a single mutable reference
● This provides a benefit that is quite similar to functional purity, while letting users
express themselves in a familiar imperative style
12
NATS Connect Live April 16, 2020 13
NATS Connect Live April 16, 2020 14
NATS Connect Live April 16, 2020 15
NATS Connect Live April 16, 2020 16
NATS Connect Live April 16, 2020
Our Rust NATS Client
We use typestate programming to make configuration less error-prone
17
NATS Connect Live April 16, 2020
Our Rust NATS Client
We use borrowing to pin a subscription’s iterator to the lifetime of the
subscription itself, which guarantees that our connection won’t close while we’re
still iterating over it
18
NATS Connect Live April 16, 2020
Our Rust NATS Client
● Rust has a tagged union structure called an “enum”
● We use this to handle internal state transitions in clean ways that reduce the
chance of certain classes of bugs during reconnection
19
NATS Connect Live April 16, 2020 20
NATS Connect Live April 16, 2020 21
NATS Connect Live April 16, 2020
TLS and nkeys coming very soon :)
22
NATS Connect Live April 16, 2020 23
Testing
● Where do bugs come from in distributed systems?
○ Simple Testing Can Prevent Most Critical Failures: An Analysis
of Production Failures in Distributed Data-intensive Systems
○ “almost all (92%) of the catastrophic system failures are the
result of incorrect handling of non-fatal errors explicitly signaled
in software.”
○ “in 58% of the catastrophic failures, the underlying faults could
easily have been detected through simple testing of error
handling code.”
● We built a “buggy server” that injects many disconnections per
second
NATS Connect Live April 16, 2020 24
NATS Connect Live April 16, 2020
Profile Everything!
github.com/flamegraph-rs/flamegraph
25
NATS Connect Live April 16, 2020 26
The Future of Rust & NATS
● Because Rust was built to avoid the need for GC, it’s able to be deployed in
extremely flexible ways.
● One of Rust’s most exciting compilation targets is WebAssembly - a highly
portable code format which plays nicely with sandboxed execution environments
○ This may be quite useful for allowing users to supply their own logic to
filter or transform messages
● Rust is a great language for building storage systems in
● Stay tuned for Derek’s Future Work talk ;)
NATS Connect Live April 16, 2020
Thank you!
Check it out and let us know what you think!
https://github.com/nats-io/nats.rs
https://crates.io/crates/natsio
https://docs.rs/natsio
27
NATS Connect Live April 16, 2020
NATS JetStream
The future of NATS Streaming
NATS Connect Live April 16, 2020 2
Speaker
R.I. Pienaar / @ripienaar
Creator of choria.io, Maintainer for NATS-Streaming-Server, Surveyor, JetStream, and
others
NATS Connect Live April 16, 2020 3
What is JetStream?
JetStream is the Next Generation of NATS Streaming technologies building on what we
learned from NATS Streaming Server and taking it into the NATS 2.0 future.
✓ Delivered as part of standard NATS Server in same binary
✓ At-Least-Once delivery model enabled on specific Subjects
✓ Interaction using existing core NATS Client
✓ NATS 2.0 Multi Tenancy and Routing Topologies
✓ Push and Pull message consumption
✓ Work Queue semantics
✓ JSON Administration API
✓ Administration via CLI or Terraform
✓ Currently in Technical Preview @ https://github.com/nats-io/jetstream
NATS Connect Live April 16, 2020 4
JetStream for Microservices
NATS Connect Live April 16, 2020 5
New NATS CLI and related tools
A new unified CLI tool will soon replace tools like nats-pub and nats-sub
✓ Combines all previous tools like pub, sub, req, reply, bench
✓ Full JetStream lifecycle management
✓ Adds a number of tools to discover and query superclusters
✓ Viewer for various NATS events like connection advisories and JetStream events
✓ Built using a new Golang library allowing full programmatic management of JetStream
✓ Currently in Technical Preview @ https://github.com/nats-io/jetstream
NATS Connect Live April 16, 2020 6
Management
Cloud Native and Traditional management approaches
✓ Full JetStream lifecycle management using nats CLI
✓ Unattended CLI API for use in CI/CD systems
✓ Configuration file based management using the nats CLI
✓ Terraform provider to manage any JetStream instances @
https://github.com/nats-io/terraform-provider-jetstream/
✓ Built using a new Golang library allowing full programmatic management of JetStream @
https://github.com/nats-io/jsm.go
✓ Administrative events and advisories about internal events
NATS Connect Live April 16, 2020 7
JetStream Roadmap
We have big plans for JetStream this year:
✓ Single Server Preview in NATS Server Release 2.2.0
✓ Clustering and GA Q3 2020
✓ Deeper insight into the running system using metrics and advisories
✓ Helper libraries for the main languages
✓ Documentation improvements and migration to https://docs.nats.io
✓ Observability in NATS Surveyor
✓ Integration with 3rd party ecosystem like OpenFaaS, Cloud Events, Fluentd, Telegraf and other Streaming
systems
✓ Custom logic hosted in the server using Web Assembly
NATS Connect Live April 16, 2020 8
What about Streaming Server?
NATS Streaming Server is our first generation Streaming solution used very widely in
production environments.
✓ A production level supported platform with 50 million Docker pulls
✓ Continues to be supported for Production use until June 2022
✓ Bug fixes and Security fixes until June 2022
✓ Migration guides or assistance via consultation services
✓ Data migration tool potentially provided
NATS Connect Live April 16, 2020
NATS JetStream
Q & A
https://github.com/nats-io/jetstream
#jetstream on Slack
9
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!
NATS Connect Live!

Mais conteúdo relacionado

Mais procurados

Designing microservices platforms with nats
Designing microservices platforms with natsDesigning microservices platforms with nats
Designing microservices platforms with natsChanaka Fernando
 
NATS for Modern Messaging and Microservices
NATS for Modern Messaging and Microservices NATS for Modern Messaging and Microservices
NATS for Modern Messaging and Microservices NATS
 
RethinkConn 2022!
RethinkConn 2022!RethinkConn 2022!
RethinkConn 2022!NATS
 
Simple and Scalable Microservices: Using NATS with Docker Compose and Swarm
Simple and Scalable Microservices: Using NATS with Docker Compose and Swarm Simple and Scalable Microservices: Using NATS with Docker Compose and Swarm
Simple and Scalable Microservices: Using NATS with Docker Compose and Swarm NATS
 
The Zen of High Performance Messaging with NATS
The Zen of High Performance Messaging with NATS The Zen of High Performance Messaging with NATS
The Zen of High Performance Messaging with NATS NATS
 
Stream processing using Kafka
Stream processing using KafkaStream processing using Kafka
Stream processing using KafkaKnoldus Inc.
 
PostgreSQL on AWS: Tips & Tricks (and horror stories)
PostgreSQL on AWS: Tips & Tricks (and horror stories)PostgreSQL on AWS: Tips & Tricks (and horror stories)
PostgreSQL on AWS: Tips & Tricks (and horror stories)Alexander Kukushkin
 
Deploying Spring Boot applications with Docker (east bay cloud meetup dec 2014)
Deploying Spring Boot applications with Docker (east bay cloud meetup dec 2014)Deploying Spring Boot applications with Docker (east bay cloud meetup dec 2014)
Deploying Spring Boot applications with Docker (east bay cloud meetup dec 2014)Chris Richardson
 
OpenTelemetry For Operators
OpenTelemetry For OperatorsOpenTelemetry For Operators
OpenTelemetry For OperatorsKevin Brockhoff
 
Introduction to Kubernetes
Introduction to KubernetesIntroduction to Kubernetes
Introduction to Kubernetesrajdeep
 
Kubernetes architecture
Kubernetes architectureKubernetes architecture
Kubernetes architectureJanakiram MSV
 
Istio : Service Mesh
Istio : Service MeshIstio : Service Mesh
Istio : Service MeshKnoldus Inc.
 
Architecture patterns for distributed, hybrid, edge and global Apache Kafka d...
Architecture patterns for distributed, hybrid, edge and global Apache Kafka d...Architecture patterns for distributed, hybrid, edge and global Apache Kafka d...
Architecture patterns for distributed, hybrid, edge and global Apache Kafka d...Kai Wähner
 
Message Redelivery: An Unexpected Journey - Pulsar Summit SF 2022
Message Redelivery: An Unexpected Journey - Pulsar Summit SF 2022Message Redelivery: An Unexpected Journey - Pulsar Summit SF 2022
Message Redelivery: An Unexpected Journey - Pulsar Summit SF 2022StreamNative
 
Spring Boot+Kafka: the New Enterprise Platform
Spring Boot+Kafka: the New Enterprise PlatformSpring Boot+Kafka: the New Enterprise Platform
Spring Boot+Kafka: the New Enterprise PlatformVMware Tanzu
 
Actor Patterns and NATS - Boulder Meetup
Actor Patterns and NATS - Boulder MeetupActor Patterns and NATS - Boulder Meetup
Actor Patterns and NATS - Boulder MeetupNATS
 
Designing a complete ci cd pipeline using argo events, workflow and cd products
Designing a complete ci cd pipeline using argo events, workflow and cd productsDesigning a complete ci cd pipeline using argo events, workflow and cd products
Designing a complete ci cd pipeline using argo events, workflow and cd productsJulian Mazzitelli
 
Building an Event Streaming Architecture with Apache Pulsar
Building an Event Streaming Architecture with Apache PulsarBuilding an Event Streaming Architecture with Apache Pulsar
Building an Event Streaming Architecture with Apache PulsarScyllaDB
 
Apache BookKeeper State Store: A Durable Key-Value Store - Pulsar Summit NA 2021
Apache BookKeeper State Store: A Durable Key-Value Store - Pulsar Summit NA 2021Apache BookKeeper State Store: A Durable Key-Value Store - Pulsar Summit NA 2021
Apache BookKeeper State Store: A Durable Key-Value Store - Pulsar Summit NA 2021StreamNative
 

Mais procurados (20)

Designing microservices platforms with nats
Designing microservices platforms with natsDesigning microservices platforms with nats
Designing microservices platforms with nats
 
NATS for Modern Messaging and Microservices
NATS for Modern Messaging and Microservices NATS for Modern Messaging and Microservices
NATS for Modern Messaging and Microservices
 
RethinkConn 2022!
RethinkConn 2022!RethinkConn 2022!
RethinkConn 2022!
 
Simple and Scalable Microservices: Using NATS with Docker Compose and Swarm
Simple and Scalable Microservices: Using NATS with Docker Compose and Swarm Simple and Scalable Microservices: Using NATS with Docker Compose and Swarm
Simple and Scalable Microservices: Using NATS with Docker Compose and Swarm
 
The Zen of High Performance Messaging with NATS
The Zen of High Performance Messaging with NATS The Zen of High Performance Messaging with NATS
The Zen of High Performance Messaging with NATS
 
Stream processing using Kafka
Stream processing using KafkaStream processing using Kafka
Stream processing using Kafka
 
PostgreSQL on AWS: Tips & Tricks (and horror stories)
PostgreSQL on AWS: Tips & Tricks (and horror stories)PostgreSQL on AWS: Tips & Tricks (and horror stories)
PostgreSQL on AWS: Tips & Tricks (and horror stories)
 
Deploying Spring Boot applications with Docker (east bay cloud meetup dec 2014)
Deploying Spring Boot applications with Docker (east bay cloud meetup dec 2014)Deploying Spring Boot applications with Docker (east bay cloud meetup dec 2014)
Deploying Spring Boot applications with Docker (east bay cloud meetup dec 2014)
 
OpenTelemetry For Operators
OpenTelemetry For OperatorsOpenTelemetry For Operators
OpenTelemetry For Operators
 
Introduction to Kubernetes
Introduction to KubernetesIntroduction to Kubernetes
Introduction to Kubernetes
 
Kubernetes architecture
Kubernetes architectureKubernetes architecture
Kubernetes architecture
 
Istio : Service Mesh
Istio : Service MeshIstio : Service Mesh
Istio : Service Mesh
 
Architecture patterns for distributed, hybrid, edge and global Apache Kafka d...
Architecture patterns for distributed, hybrid, edge and global Apache Kafka d...Architecture patterns for distributed, hybrid, edge and global Apache Kafka d...
Architecture patterns for distributed, hybrid, edge and global Apache Kafka d...
 
Message Redelivery: An Unexpected Journey - Pulsar Summit SF 2022
Message Redelivery: An Unexpected Journey - Pulsar Summit SF 2022Message Redelivery: An Unexpected Journey - Pulsar Summit SF 2022
Message Redelivery: An Unexpected Journey - Pulsar Summit SF 2022
 
Spring Boot+Kafka: the New Enterprise Platform
Spring Boot+Kafka: the New Enterprise PlatformSpring Boot+Kafka: the New Enterprise Platform
Spring Boot+Kafka: the New Enterprise Platform
 
Actor Patterns and NATS - Boulder Meetup
Actor Patterns and NATS - Boulder MeetupActor Patterns and NATS - Boulder Meetup
Actor Patterns and NATS - Boulder Meetup
 
Designing a complete ci cd pipeline using argo events, workflow and cd products
Designing a complete ci cd pipeline using argo events, workflow and cd productsDesigning a complete ci cd pipeline using argo events, workflow and cd products
Designing a complete ci cd pipeline using argo events, workflow and cd products
 
Building an Event Streaming Architecture with Apache Pulsar
Building an Event Streaming Architecture with Apache PulsarBuilding an Event Streaming Architecture with Apache Pulsar
Building an Event Streaming Architecture with Apache Pulsar
 
Docker Kubernetes Istio
Docker Kubernetes IstioDocker Kubernetes Istio
Docker Kubernetes Istio
 
Apache BookKeeper State Store: A Durable Key-Value Store - Pulsar Summit NA 2021
Apache BookKeeper State Store: A Durable Key-Value Store - Pulsar Summit NA 2021Apache BookKeeper State Store: A Durable Key-Value Store - Pulsar Summit NA 2021
Apache BookKeeper State Store: A Durable Key-Value Store - Pulsar Summit NA 2021
 

Semelhante a NATS Connect Live!

NATS Connector Framework - Boulder Meetup
NATS Connector Framework - Boulder MeetupNATS Connector Framework - Boulder Meetup
NATS Connector Framework - Boulder MeetupApcera
 
BDE-BDVA Webinar: BDE Technical Overview
BDE-BDVA Webinar: BDE Technical OverviewBDE-BDVA Webinar: BDE Technical Overview
BDE-BDVA Webinar: BDE Technical OverviewBigData_Europe
 
Join Our Party: The Cloud Native Adventure Brigade (TCSW 2019)
Join Our Party: The Cloud Native Adventure Brigade (TCSW 2019)Join Our Party: The Cloud Native Adventure Brigade (TCSW 2019)
Join Our Party: The Cloud Native Adventure Brigade (TCSW 2019)bridgetkromhout
 
[WSO2 Integration Summit San Francisco 2019] Ballerina - Cloud Native Middlew...
[WSO2 Integration Summit San Francisco 2019] Ballerina - Cloud Native Middlew...[WSO2 Integration Summit San Francisco 2019] Ballerina - Cloud Native Middlew...
[WSO2 Integration Summit San Francisco 2019] Ballerina - Cloud Native Middlew...WSO2
 
Ballerina cloud native middleware as a programming language | Yenlo - WSO2 In...
Ballerina cloud native middleware as a programming language | Yenlo - WSO2 In...Ballerina cloud native middleware as a programming language | Yenlo - WSO2 In...
Ballerina cloud native middleware as a programming language | Yenlo - WSO2 In...Yenlo
 
Docker Application to Scientific Computing
Docker Application to Scientific ComputingDocker Application to Scientific Computing
Docker Application to Scientific ComputingPeter Bryzgalov
 
Webinar: OpenEBS - Still Free and now FASTEST Kubernetes storage
Webinar: OpenEBS - Still Free and now FASTEST Kubernetes storageWebinar: OpenEBS - Still Free and now FASTEST Kubernetes storage
Webinar: OpenEBS - Still Free and now FASTEST Kubernetes storageMayaData Inc
 
Why Is Rust Gaining Traction In Recent Years?
Why Is Rust Gaining Traction In Recent Years?Why Is Rust Gaining Traction In Recent Years?
Why Is Rust Gaining Traction In Recent Years?Techahead Software
 
NATS in action - A Real time Microservices Architecture handled by NATS
NATS in action - A Real time Microservices Architecture handled by NATSNATS in action - A Real time Microservices Architecture handled by NATS
NATS in action - A Real time Microservices Architecture handled by NATSRaül Pérez
 
Nats in action a real time microservices architecture handled by nats
Nats in action   a real time microservices architecture handled by natsNats in action   a real time microservices architecture handled by nats
Nats in action a real time microservices architecture handled by natsRaul Perez
 
Introduction to Modern DevOps Technologies
Introduction to  Modern DevOps TechnologiesIntroduction to  Modern DevOps Technologies
Introduction to Modern DevOps TechnologiesKriangkrai Chaonithi
 
Containers in depth – understanding how containers work to better work with c...
Containers in depth – understanding how containers work to better work with c...Containers in depth – understanding how containers work to better work with c...
Containers in depth – understanding how containers work to better work with c...All Things Open
 
The ultimate cheat sheet on .net core, .net framework, and .net standard
The ultimate cheat sheet on .net core, .net framework, and .net standardThe ultimate cheat sheet on .net core, .net framework, and .net standard
The ultimate cheat sheet on .net core, .net framework, and .net standardConcetto Labs
 
BlackStor - World's fastest & most reliable Cloud Native Software Defined Sto...
BlackStor - World's fastest & most reliable Cloud Native Software Defined Sto...BlackStor - World's fastest & most reliable Cloud Native Software Defined Sto...
BlackStor - World's fastest & most reliable Cloud Native Software Defined Sto...Michal Němec
 
Why is .Net Technology Recognised for Software Development?
Why is .Net Technology Recognised for Software Development?Why is .Net Technology Recognised for Software Development?
Why is .Net Technology Recognised for Software Development?LOGINPHP360
 
Why is .Net Technology Recognised for Software Development?
Why is .Net Technology Recognised for Software Development?Why is .Net Technology Recognised for Software Development?
Why is .Net Technology Recognised for Software Development?LOGINPHP360
 
A vision of persistence
A vision of persistenceA vision of persistence
A vision of persistenceDocker, Inc.
 
Http Services in Rust on Containers
Http Services in Rust on ContainersHttp Services in Rust on Containers
Http Services in Rust on ContainersAnton Whalley
 
Net Framework vs .Net Core A Complete Comparison.pdf
Net Framework vs  .Net Core  A Complete Comparison.pdfNet Framework vs  .Net Core  A Complete Comparison.pdf
Net Framework vs .Net Core A Complete Comparison.pdfWPWeb Infotech
 

Semelhante a NATS Connect Live! (20)

NATS Connector Framework - Boulder Meetup
NATS Connector Framework - Boulder MeetupNATS Connector Framework - Boulder Meetup
NATS Connector Framework - Boulder Meetup
 
BDE-BDVA Webinar: BDE Technical Overview
BDE-BDVA Webinar: BDE Technical OverviewBDE-BDVA Webinar: BDE Technical Overview
BDE-BDVA Webinar: BDE Technical Overview
 
Join Our Party: The Cloud Native Adventure Brigade (TCSW 2019)
Join Our Party: The Cloud Native Adventure Brigade (TCSW 2019)Join Our Party: The Cloud Native Adventure Brigade (TCSW 2019)
Join Our Party: The Cloud Native Adventure Brigade (TCSW 2019)
 
[WSO2 Integration Summit San Francisco 2019] Ballerina - Cloud Native Middlew...
[WSO2 Integration Summit San Francisco 2019] Ballerina - Cloud Native Middlew...[WSO2 Integration Summit San Francisco 2019] Ballerina - Cloud Native Middlew...
[WSO2 Integration Summit San Francisco 2019] Ballerina - Cloud Native Middlew...
 
Ballerina cloud native middleware as a programming language | Yenlo - WSO2 In...
Ballerina cloud native middleware as a programming language | Yenlo - WSO2 In...Ballerina cloud native middleware as a programming language | Yenlo - WSO2 In...
Ballerina cloud native middleware as a programming language | Yenlo - WSO2 In...
 
Docker Application to Scientific Computing
Docker Application to Scientific ComputingDocker Application to Scientific Computing
Docker Application to Scientific Computing
 
Webinar: OpenEBS - Still Free and now FASTEST Kubernetes storage
Webinar: OpenEBS - Still Free and now FASTEST Kubernetes storageWebinar: OpenEBS - Still Free and now FASTEST Kubernetes storage
Webinar: OpenEBS - Still Free and now FASTEST Kubernetes storage
 
Why Is Rust Gaining Traction In Recent Years?
Why Is Rust Gaining Traction In Recent Years?Why Is Rust Gaining Traction In Recent Years?
Why Is Rust Gaining Traction In Recent Years?
 
NATS in action - A Real time Microservices Architecture handled by NATS
NATS in action - A Real time Microservices Architecture handled by NATSNATS in action - A Real time Microservices Architecture handled by NATS
NATS in action - A Real time Microservices Architecture handled by NATS
 
Nats in action a real time microservices architecture handled by nats
Nats in action   a real time microservices architecture handled by natsNats in action   a real time microservices architecture handled by nats
Nats in action a real time microservices architecture handled by nats
 
Canister
Canister Canister
Canister
 
Introduction to Modern DevOps Technologies
Introduction to  Modern DevOps TechnologiesIntroduction to  Modern DevOps Technologies
Introduction to Modern DevOps Technologies
 
Containers in depth – understanding how containers work to better work with c...
Containers in depth – understanding how containers work to better work with c...Containers in depth – understanding how containers work to better work with c...
Containers in depth – understanding how containers work to better work with c...
 
The ultimate cheat sheet on .net core, .net framework, and .net standard
The ultimate cheat sheet on .net core, .net framework, and .net standardThe ultimate cheat sheet on .net core, .net framework, and .net standard
The ultimate cheat sheet on .net core, .net framework, and .net standard
 
BlackStor - World's fastest & most reliable Cloud Native Software Defined Sto...
BlackStor - World's fastest & most reliable Cloud Native Software Defined Sto...BlackStor - World's fastest & most reliable Cloud Native Software Defined Sto...
BlackStor - World's fastest & most reliable Cloud Native Software Defined Sto...
 
Why is .Net Technology Recognised for Software Development?
Why is .Net Technology Recognised for Software Development?Why is .Net Technology Recognised for Software Development?
Why is .Net Technology Recognised for Software Development?
 
Why is .Net Technology Recognised for Software Development?
Why is .Net Technology Recognised for Software Development?Why is .Net Technology Recognised for Software Development?
Why is .Net Technology Recognised for Software Development?
 
A vision of persistence
A vision of persistenceA vision of persistence
A vision of persistence
 
Http Services in Rust on Containers
Http Services in Rust on ContainersHttp Services in Rust on Containers
Http Services in Rust on Containers
 
Net Framework vs .Net Core A Complete Comparison.pdf
Net Framework vs  .Net Core  A Complete Comparison.pdfNet Framework vs  .Net Core  A Complete Comparison.pdf
Net Framework vs .Net Core A Complete Comparison.pdf
 

Mais de NATS

NATS Connect Live | Serverless on Kubernetes with OpenFaaS & NATS
NATS Connect Live | Serverless on Kubernetes with OpenFaaS & NATSNATS Connect Live | Serverless on Kubernetes with OpenFaaS & NATS
NATS Connect Live | Serverless on Kubernetes with OpenFaaS & NATSNATS
 
NATS Connect Live | SwimOS & NATS
NATS Connect Live | SwimOS & NATSNATS Connect Live | SwimOS & NATS
NATS Connect Live | SwimOS & NATSNATS
 
NATS Connect Live | Pub/Sub on the Power Grid
NATS Connect Live | Pub/Sub on the Power GridNATS Connect Live | Pub/Sub on the Power Grid
NATS Connect Live | Pub/Sub on the Power GridNATS
 
NATS Connect Live | Distributed Identity & Authorization
NATS Connect Live | Distributed Identity & AuthorizationNATS Connect Live | Distributed Identity & Authorization
NATS Connect Live | Distributed Identity & AuthorizationNATS
 
NATS Connect Live | NATS as a Service Mesh
NATS Connect Live | NATS as a Service MeshNATS Connect Live | NATS as a Service Mesh
NATS Connect Live | NATS as a Service MeshNATS
 
NATS Connect Live | Resgate
NATS Connect Live | ResgateNATS Connect Live | Resgate
NATS Connect Live | ResgateNATS
 
NATS Connect Live | NATS & Augmented Reality
NATS Connect Live | NATS & Augmented RealityNATS Connect Live | NATS & Augmented Reality
NATS Connect Live | NATS & Augmented RealityNATS
 
KubeCon NA 2019 Keynote | NATS - Past, Present, and the Future
KubeCon NA 2019 Keynote | NATS - Past, Present, and the FutureKubeCon NA 2019 Keynote | NATS - Past, Present, and the Future
KubeCon NA 2019 Keynote | NATS - Past, Present, and the FutureNATS
 
OSCON 2019 | Time to Think Different
OSCON 2019 | Time to Think DifferentOSCON 2019 | Time to Think Different
OSCON 2019 | Time to Think DifferentNATS
 
Serverless for the Cloud Native Era with Fission
Serverless for the Cloud Native Era with FissionServerless for the Cloud Native Era with Fission
Serverless for the Cloud Native Era with FissionNATS
 
Simple, Secure, Scalable Messaging for the Cloud Native Era - AllThingsOpen 2...
Simple, Secure, Scalable Messaging for the Cloud Native Era - AllThingsOpen 2...Simple, Secure, Scalable Messaging for the Cloud Native Era - AllThingsOpen 2...
Simple, Secure, Scalable Messaging for the Cloud Native Era - AllThingsOpen 2...NATS
 
Microservices Meetup San Francisco - August 2017 Talk on NATS
Microservices Meetup San Francisco - August 2017 Talk on NATSMicroservices Meetup San Francisco - August 2017 Talk on NATS
Microservices Meetup San Francisco - August 2017 Talk on NATSNATS
 
Writing Networking Clients in Go - GopherCon 2017 talk
Writing Networking Clients in Go - GopherCon 2017 talkWriting Networking Clients in Go - GopherCon 2017 talk
Writing Networking Clients in Go - GopherCon 2017 talkNATS
 
Using NATS for Control Flow in Distributed Systems
Using NATS for Control Flow in Distributed SystemsUsing NATS for Control Flow in Distributed Systems
Using NATS for Control Flow in Distributed SystemsNATS
 
Integration Patterns for Microservices Architectures
Integration Patterns for Microservices ArchitecturesIntegration Patterns for Microservices Architectures
Integration Patterns for Microservices ArchitecturesNATS
 
Simple Solutions for Complex Problems - Boulder Meetup
Simple Solutions for Complex Problems - Boulder Meetup Simple Solutions for Complex Problems - Boulder Meetup
Simple Solutions for Complex Problems - Boulder Meetup NATS
 
Implementing Microservices with NATS
Implementing Microservices with NATSImplementing Microservices with NATS
Implementing Microservices with NATSNATS
 
How Greta uses NATS to revolutionize data distribution on the Internet
How Greta uses NATS to revolutionize data distribution on the Internet How Greta uses NATS to revolutionize data distribution on the Internet
How Greta uses NATS to revolutionize data distribution on the Internet NATS
 
How Clarifai uses NATS and Kubernetes for Machine Learning
How Clarifai uses NATS and Kubernetes for Machine Learning How Clarifai uses NATS and Kubernetes for Machine Learning
How Clarifai uses NATS and Kubernetes for Machine Learning NATS
 

Mais de NATS (19)

NATS Connect Live | Serverless on Kubernetes with OpenFaaS & NATS
NATS Connect Live | Serverless on Kubernetes with OpenFaaS & NATSNATS Connect Live | Serverless on Kubernetes with OpenFaaS & NATS
NATS Connect Live | Serverless on Kubernetes with OpenFaaS & NATS
 
NATS Connect Live | SwimOS & NATS
NATS Connect Live | SwimOS & NATSNATS Connect Live | SwimOS & NATS
NATS Connect Live | SwimOS & NATS
 
NATS Connect Live | Pub/Sub on the Power Grid
NATS Connect Live | Pub/Sub on the Power GridNATS Connect Live | Pub/Sub on the Power Grid
NATS Connect Live | Pub/Sub on the Power Grid
 
NATS Connect Live | Distributed Identity & Authorization
NATS Connect Live | Distributed Identity & AuthorizationNATS Connect Live | Distributed Identity & Authorization
NATS Connect Live | Distributed Identity & Authorization
 
NATS Connect Live | NATS as a Service Mesh
NATS Connect Live | NATS as a Service MeshNATS Connect Live | NATS as a Service Mesh
NATS Connect Live | NATS as a Service Mesh
 
NATS Connect Live | Resgate
NATS Connect Live | ResgateNATS Connect Live | Resgate
NATS Connect Live | Resgate
 
NATS Connect Live | NATS & Augmented Reality
NATS Connect Live | NATS & Augmented RealityNATS Connect Live | NATS & Augmented Reality
NATS Connect Live | NATS & Augmented Reality
 
KubeCon NA 2019 Keynote | NATS - Past, Present, and the Future
KubeCon NA 2019 Keynote | NATS - Past, Present, and the FutureKubeCon NA 2019 Keynote | NATS - Past, Present, and the Future
KubeCon NA 2019 Keynote | NATS - Past, Present, and the Future
 
OSCON 2019 | Time to Think Different
OSCON 2019 | Time to Think DifferentOSCON 2019 | Time to Think Different
OSCON 2019 | Time to Think Different
 
Serverless for the Cloud Native Era with Fission
Serverless for the Cloud Native Era with FissionServerless for the Cloud Native Era with Fission
Serverless for the Cloud Native Era with Fission
 
Simple, Secure, Scalable Messaging for the Cloud Native Era - AllThingsOpen 2...
Simple, Secure, Scalable Messaging for the Cloud Native Era - AllThingsOpen 2...Simple, Secure, Scalable Messaging for the Cloud Native Era - AllThingsOpen 2...
Simple, Secure, Scalable Messaging for the Cloud Native Era - AllThingsOpen 2...
 
Microservices Meetup San Francisco - August 2017 Talk on NATS
Microservices Meetup San Francisco - August 2017 Talk on NATSMicroservices Meetup San Francisco - August 2017 Talk on NATS
Microservices Meetup San Francisco - August 2017 Talk on NATS
 
Writing Networking Clients in Go - GopherCon 2017 talk
Writing Networking Clients in Go - GopherCon 2017 talkWriting Networking Clients in Go - GopherCon 2017 talk
Writing Networking Clients in Go - GopherCon 2017 talk
 
Using NATS for Control Flow in Distributed Systems
Using NATS for Control Flow in Distributed SystemsUsing NATS for Control Flow in Distributed Systems
Using NATS for Control Flow in Distributed Systems
 
Integration Patterns for Microservices Architectures
Integration Patterns for Microservices ArchitecturesIntegration Patterns for Microservices Architectures
Integration Patterns for Microservices Architectures
 
Simple Solutions for Complex Problems - Boulder Meetup
Simple Solutions for Complex Problems - Boulder Meetup Simple Solutions for Complex Problems - Boulder Meetup
Simple Solutions for Complex Problems - Boulder Meetup
 
Implementing Microservices with NATS
Implementing Microservices with NATSImplementing Microservices with NATS
Implementing Microservices with NATS
 
How Greta uses NATS to revolutionize data distribution on the Internet
How Greta uses NATS to revolutionize data distribution on the Internet How Greta uses NATS to revolutionize data distribution on the Internet
How Greta uses NATS to revolutionize data distribution on the Internet
 
How Clarifai uses NATS and Kubernetes for Machine Learning
How Clarifai uses NATS and Kubernetes for Machine Learning How Clarifai uses NATS and Kubernetes for Machine Learning
How Clarifai uses NATS and Kubernetes for Machine Learning
 

Último

Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 

Último (20)

Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 

NATS Connect Live!

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27. NATS Connect Live April 16, 2020 Writing a NATS Client in a Language Geared for Performance and Correctness Rust and NATS By: Tyler Neely
  • 28. NATS Connect Live April 16, 2020 2 Who am I ● Building databases and distributed systems in Rust since 2014 ○ Performance Critical ⋂ Correctness Critical systems ○ Created the http://sled.rs embedded lock-free storage engine ● I became an engineer at Synadia because: ○ computation is becoming more location-agnostic ○ NATS is extremely well positioned to deal with this world ● I’m a core maintainer of the Rust client ○ github.com/nats.io/nats.rs
  • 29. NATS Connect Live April 16, 2020 Roadmap for This Talk ● Intro to Rust ● Our Rust Client ● The Future 3
  • 30. NATS Connect Live April 16, 2020 Rust History ● Began as a personal project of an engineer who worked at Mozilla Research in 2006 ● Mozilla decided to invest in the project in 2009, with the stretch goal of potentially replacing security-critical C++ code in Firefox ● The Mozilla Servo experimental browser engine project began in 2012 to experiment with taking advantage of Rust’s features ● In 2014, Rust 1.0 was released ● Voted Most Loved Language in Stack Overflow’s annual developer survey every year since 2016 4
  • 31. NATS Connect Live April 16, 2020 Rust Interest 5 subredditstats.com/r/rust
  • 32. NATS Connect Live April 16, 2020 Rust’s Advantages ● Excellent ergonomics for “programming in the large” ● Has a great built-in package manager, cargo ○ Automatic documentation generation, docs.rs/natsio ● Prevents memory corruption and data race bugs at compile-time ○ no GC or runtime race detector required ■ is quite nice to use for embedded programming ○ “Ownership” and “borrowing” guarantee: ■ no dangling references ■ at-most-once destruction ○ Microsoft: 70% of CVEs are related to memory corruption in C and C++ ● Performs on-par with or better than C/C++ ○ No need to make defensive copies ○ Can approach Fortran performance due to alias avoidance ● Can incrementally replace parts of a C/C++ codebase ○ We call this “oxidation” ○ Plays great with other languages via FFI 6
  • 33. NATS Connect Live April 16, 2020 Who uses Rust? ● Google’s potential Android replacement, Fuchsia ● Amazon’s Firecracker VM which powers AWS Lambda ● Microsoft Azure IoT ● Facebook’s HHVM ● Twitter’s caching and build systems ● VxWorks RTOS (powers Mars Rover) now supports Rust ● Dropbox has rewritten its correctness-critical replication logic in Rust 7
  • 34. NATS Connect Live April 16, 2020 Major Feature: Ownership 8
  • 35. NATS Connect Live April 16, 2020 Major Feature: Ownership 9
  • 36. NATS Connect Live April 16, 2020 Major Feature: Ownership ● By having items consumed by default when passed to other scopes, we have the ability to treat functions as proofs that certain actions can only happen once ○ Useful for building strongly-typed state machines ○ Useful for building configuration objects that prevent misuse ○ Useful for encoding complex embedded hardware behavior using the type system ● None of this adds any runtime cost. It is enforced at compile-time. ● We call this a “zero cost abstraction” 10
  • 37. NATS Connect Live April 16, 2020 Major Feature: Ownership ● By having items consumed by default when passed to other scopes, we have the ability to treat functions as proofs that certain actions can only happen once ○ Useful for building strongly-typed state machines ○ Useful for building configuration objects that prevent misuse ○ Useful for encoding complex embedded hardware behavior using the type system ● None of this adds any runtime cost. It is enforced at compile-time. ● We call this a “zero [runtime] cost abstraction” 11
  • 38. NATS Connect Live April 16, 2020 Major Feature: Borrowing ● If you don’t want to give a variable to a function that uses it, you may use Rust’s borrowing system to pass a reference, instead. ● The borrow checker guarantees that the reference never outlives the object it points to. ○ C/C++ programmers often discover dangling pointer bugs in their existing codebases when porting them to Rust. This kind of bug is often taken advantage of in exploits that attack systems. ● It is like a compile-time reader-writer lock. ○ several immutable references XOR a single mutable reference ● This provides a benefit that is quite similar to functional purity, while letting users express themselves in a familiar imperative style 12
  • 39. NATS Connect Live April 16, 2020 13
  • 40. NATS Connect Live April 16, 2020 14
  • 41. NATS Connect Live April 16, 2020 15
  • 42. NATS Connect Live April 16, 2020 16
  • 43. NATS Connect Live April 16, 2020 Our Rust NATS Client We use typestate programming to make configuration less error-prone 17
  • 44. NATS Connect Live April 16, 2020 Our Rust NATS Client We use borrowing to pin a subscription’s iterator to the lifetime of the subscription itself, which guarantees that our connection won’t close while we’re still iterating over it 18
  • 45. NATS Connect Live April 16, 2020 Our Rust NATS Client ● Rust has a tagged union structure called an “enum” ● We use this to handle internal state transitions in clean ways that reduce the chance of certain classes of bugs during reconnection 19
  • 46. NATS Connect Live April 16, 2020 20
  • 47. NATS Connect Live April 16, 2020 21
  • 48. NATS Connect Live April 16, 2020 TLS and nkeys coming very soon :) 22
  • 49. NATS Connect Live April 16, 2020 23 Testing ● Where do bugs come from in distributed systems? ○ Simple Testing Can Prevent Most Critical Failures: An Analysis of Production Failures in Distributed Data-intensive Systems ○ “almost all (92%) of the catastrophic system failures are the result of incorrect handling of non-fatal errors explicitly signaled in software.” ○ “in 58% of the catastrophic failures, the underlying faults could easily have been detected through simple testing of error handling code.” ● We built a “buggy server” that injects many disconnections per second
  • 50. NATS Connect Live April 16, 2020 24
  • 51. NATS Connect Live April 16, 2020 Profile Everything! github.com/flamegraph-rs/flamegraph 25
  • 52. NATS Connect Live April 16, 2020 26 The Future of Rust & NATS ● Because Rust was built to avoid the need for GC, it’s able to be deployed in extremely flexible ways. ● One of Rust’s most exciting compilation targets is WebAssembly - a highly portable code format which plays nicely with sandboxed execution environments ○ This may be quite useful for allowing users to supply their own logic to filter or transform messages ● Rust is a great language for building storage systems in ● Stay tuned for Derek’s Future Work talk ;)
  • 53. NATS Connect Live April 16, 2020 Thank you! Check it out and let us know what you think! https://github.com/nats-io/nats.rs https://crates.io/crates/natsio https://docs.rs/natsio 27
  • 54. NATS Connect Live April 16, 2020 NATS JetStream The future of NATS Streaming
  • 55. NATS Connect Live April 16, 2020 2 Speaker R.I. Pienaar / @ripienaar Creator of choria.io, Maintainer for NATS-Streaming-Server, Surveyor, JetStream, and others
  • 56. NATS Connect Live April 16, 2020 3 What is JetStream? JetStream is the Next Generation of NATS Streaming technologies building on what we learned from NATS Streaming Server and taking it into the NATS 2.0 future. ✓ Delivered as part of standard NATS Server in same binary ✓ At-Least-Once delivery model enabled on specific Subjects ✓ Interaction using existing core NATS Client ✓ NATS 2.0 Multi Tenancy and Routing Topologies ✓ Push and Pull message consumption ✓ Work Queue semantics ✓ JSON Administration API ✓ Administration via CLI or Terraform ✓ Currently in Technical Preview @ https://github.com/nats-io/jetstream
  • 57. NATS Connect Live April 16, 2020 4 JetStream for Microservices
  • 58. NATS Connect Live April 16, 2020 5 New NATS CLI and related tools A new unified CLI tool will soon replace tools like nats-pub and nats-sub ✓ Combines all previous tools like pub, sub, req, reply, bench ✓ Full JetStream lifecycle management ✓ Adds a number of tools to discover and query superclusters ✓ Viewer for various NATS events like connection advisories and JetStream events ✓ Built using a new Golang library allowing full programmatic management of JetStream ✓ Currently in Technical Preview @ https://github.com/nats-io/jetstream
  • 59. NATS Connect Live April 16, 2020 6 Management Cloud Native and Traditional management approaches ✓ Full JetStream lifecycle management using nats CLI ✓ Unattended CLI API for use in CI/CD systems ✓ Configuration file based management using the nats CLI ✓ Terraform provider to manage any JetStream instances @ https://github.com/nats-io/terraform-provider-jetstream/ ✓ Built using a new Golang library allowing full programmatic management of JetStream @ https://github.com/nats-io/jsm.go ✓ Administrative events and advisories about internal events
  • 60. NATS Connect Live April 16, 2020 7 JetStream Roadmap We have big plans for JetStream this year: ✓ Single Server Preview in NATS Server Release 2.2.0 ✓ Clustering and GA Q3 2020 ✓ Deeper insight into the running system using metrics and advisories ✓ Helper libraries for the main languages ✓ Documentation improvements and migration to https://docs.nats.io ✓ Observability in NATS Surveyor ✓ Integration with 3rd party ecosystem like OpenFaaS, Cloud Events, Fluentd, Telegraf and other Streaming systems ✓ Custom logic hosted in the server using Web Assembly
  • 61. NATS Connect Live April 16, 2020 8 What about Streaming Server? NATS Streaming Server is our first generation Streaming solution used very widely in production environments. ✓ A production level supported platform with 50 million Docker pulls ✓ Continues to be supported for Production use until June 2022 ✓ Bug fixes and Security fixes until June 2022 ✓ Migration guides or assistance via consultation services ✓ Data migration tool potentially provided
  • 62. NATS Connect Live April 16, 2020 NATS JetStream Q & A https://github.com/nats-io/jetstream #jetstream on Slack 9