SlideShare a Scribd company logo
PRESENTED BY
Atom
The Redis Streams-Powered
Microservices SDK
Dan Pipe-Mazo
Elementary Robotics, CTO
PRESENTED BY
Agenda:
1. Starting with a demo!
We’ll see atom and redis in action using a depth-sensing camera
2. SDK Architecture (featuring Redis Streams!)
We’ll dive into the SDK in the context of the demo and take a look
at what’s going on under the hood
3. Open Source + Signup Give-Away
We’ll discuss open-sourcing the core of atom and the hardware
we’re giving away to our early developers
PRESENTED BY
DEMO:
Object Detection and Segmentation Built
with Atom & Redis
PRESENTED BY
Atom OS Overview
An in-depth dive into how we built the core of Atom
PRESENTED BY
1. Atom is a specification and a set of
client libraries that allow users to
create reusable microservices that
interact with each other through Redis
2. Through Docker and docker-compose
we can link together these
microservices to launch applications
3. By abstracting applications into
microservices we can do the following:
● Allow each piece of code to be
developed in the optimal language.
● Easily reuse and share code
elementary-robotics/atom atomdocs.io
Atom OS: High Level
PRESENTED BY
1. Use microservices to allow for reusable code elements with
zero install or dependencies and scalable message passing.
2. Industries still rely on copying and pasting code into new projects
far too often and we need better reusability to scale.
3. With full-stack hardware and software products, things like
machine learning and computer vision (python) should be
implemented in different language from your embedded code (C).
The Goal of Atom OS
PRESENTED BY
Redis 5.0+ Server
Unix socket
and/or TCP
Atom Command
Line Interface
English-like interface
to interact with Atom
Nucleus
Architecture and Terminology
PRESENTED BY
Atom
Language
Clients
Multi-OS
Graphics
Architecture and Terminology
+ more in
development!
PRESENTED BY
- Any language with an atom language
client
- Publish data
- Expose commands and send
responses
$MY_ELEMENT
Your
Code!
FROM elementaryrobotics/atom
Architecture and Terminology
PRESENTED BY
Realsense
Elements
Stream Viewer
Segmentation
Nucleus
tmpfs
Redis Unix Socket
Demo Architecture: Camera
PRESENTED BY
Atom: Powered by Redis Streams
Powerful, efficient time-series data pub/sub and req/rep
PRESENTED BY
Our goal:
● Abstract out complex engineering problems into reusable, sharable elements.
● Don’t sacrifice performance or increase complexity in doing so
Architecture Question: Why microservices?
Questions we asked ourselves before building Atom:
● Do we need another microservice framework?
(gRPC, thrift, REST, ROS, zeroMQ, DDS)
● How would we do it if we weren’t going to build this in a reusable, abstracted
fashion?
PRESENTED BY
Data Publication and Subscription
● Publishing should be stateless and fire-and-forget
● Consumption should be able to be regulated by the consumer
○ Solve the “slow subscriber” problem, i.e. how to handle a
subscriber who only wants 1Hz updates on a 1kHz stream
● Low latency
● Support many parallel clients without any
extra burden on publisher / performance hit
Command and Response
● Should be able to call commands and receive responses across
as many languages as possible
● Easy to make command either synchronous or asynchronous
● Easy load-balancing without complicated multi-threading
Serialization
● Optional and not overly burdensome on either the CPU or the user’s sanity
● If serialized, messages can ideally be read without knowing the schema
Architecture Question: What are we looking for?
PRESENTED BY
Install and OS Requirements
● Write code once, it should work on any
OS (including graphics!)
● Setup should be as minimal as possible.
OS and/or system-related install bugs
are the worst.
Language Support
● Support as many languages as possible.
● Allows each problem to be solved in it
(or its programmer’s) ideal language.
● Atwood’s law: any application that can
be written in JavaScript, will eventually
be written in JavaScript.
Architecture Question: What are we looking for? ...Contd
Service Discovery
● Should be able to discover other
microservices in the system.
● For each microservice, should be
able to identify its health, available
commands and streams.
Logging
● Everything should be able to be logged.
● Failures should be easily traceable to an
outside observer.
PRESENTED BY
It turns out that’s a pretty big list of things we’re asking for, but there’s a solution!
>25 languages
Streams allow for
novel data flows
Production-tested
and well-supported
Redis
Requirements
installed in container
Multi-OS
Docker-compose
Docker
>25 languages
Easy, fast, pretty
much JSON
Completely optional
MessagePack
+ +
Architecture Solution
PRESENTED BY
Redis Streams
Enabling new data paradigms
PRESENTED BY
XADD s1 MAXLEN ~ X k1 v1 k2 v2 …
stream: s1
0
-
k1
v1
k2
v2
1
-
k1
v1
k2
v2
2
-
k1
v1
k2
v2
X
-
k1
v1
k2
v2
...
Redis Streams: Overview
PRESENTED BY
XADD s2 MAXLEN ~ X kA vA kB vB …
XADD s1 MAXLEN ~ X k1 v1 k2 v2 …
stream: s1
0
-
k1
v1
k2
v2
1
-
k1
v1
k2
v2
2
-
k1
v1
k2
v2
X
-
k1
v1
k2
v2
...
0
-
kA
vA
kB
vB
1
-
kA
vA
kB
vB
2
-
kA
vA
kB
vB
X
-
kA
vA
kB
vB
...
stream: s2
Redis Streams: Overview
PRESENTED BY
XADD s2 MAXLEN ~ X kA vA kB vB …
XADD s1 MAXLEN ~ X k1 v1 k2 v2 …
stream: s1
0
-
k1
v1
k2
v2
1
-
k1
v1
k2
v2
2
-
k1
v1
k2
v2
X
-
k1
v1
k2
v2
XREAD BLOCK N STREAMS s1 $
XREAD BLOCK N STREAMS s1 ID
Subscribe to all entries from one stream
...
0
-
kA
vA
kB
vB
1
-
kA
vA
kB
vB
2
-
kA
vA
kB
vB
X
-
kA
vA
kB
vB
...
stream: s2
Redis Streams: Overview
PRESENTED BY
XADD s2 MAXLEN ~ X kA vA kB vB …
XADD s1 MAXLEN ~ X k1 v1 k2 v2 …
stream: s1
0
-
k1
v1
k2
v2
1
-
k1
v1
k2
v2
2
-
k1
v1
k2
v2
X
-
k1
v1
k2
v2
XREAD BLOCK N STREAMS s1 $
XREAD BLOCK N STREAMS s1 ID
Subscribe to all entries from one stream
...
0
-
kA
vA
kB
vB
1
-
kA
vA
kB
vB
2
-
kA
vA
kB
vB
X
-
kA
vA
kB
vB
...
stream: s2
XREAD BLOCK N STREAMS s1 s2 ID1 ID2
Subscribe to all entries from multiple streams
Redis Streams: Overview
PRESENTED BY
XADD s2 MAXLEN ~ X kA vA kB vB …
XADD s1 MAXLEN ~ X k1 v1 k2 v2 …
stream: s1
0
-
k1
v1
k2
v2
1
-
k1
v1
k2
v2
2
-
k1
v1
k2
v2
X
-
k1
v1
k2
v2
XREAD BLOCK N STREAMS s1 $
XREAD BLOCK N STREAMS s1 ID
Subscribe to all entries from one stream
...
0
-
kA
vA
kB
vB
1
-
kA
vA
kB
vB
2
-
kA
vA
kB
vB
X
-
kA
vA
kB
vB
...
stream: s2
XREAD BLOCK N STREAMS s1 s2 ID1 ID2
Subscribe to all entries from multiple streams
XREVRANGE s1 + - COUNT N
Get the latest N entries from a stream
Redis Streams: Overview
PRESENTED BY
XADD s2 MAXLEN ~ X kA vA kB vB …
XADD s1 MAXLEN ~ X k1 v1 k2 v2 …
stream: s1
0
-
k1
v1
k2
v2
1
-
k1
v1
k2
v2
2
-
k1
v1
k2
v2
X
-
k1
v1
k2
v2
XREAD BLOCK N STREAMS s1 $
XREAD BLOCK N STREAMS s1 ID
Subscribe to all entries from one stream
...
0
-
kA
vA
kB
vB
1
-
kA
vA
kB
vB
2
-
kA
vA
kB
vB
X
-
kA
vA
kB
vB
...
stream: s2
XREAD BLOCK N STREAMS s1 s2 ID1 ID2
Subscribe to all entries from multiple streams
XREVRANGE s1 + - COUNT N
Get the latest N entries from a stream
XRANGE s1 - + COUNT N
Get the oldest N entries from a stream
Redis Streams: Overview
PRESENTED BY
Realsense
USB
Realsense
element
Host Compute
XADD
frames
realsense:pointcloud
realsense:color
realsense:depth
Redis Streams: Overview
PRESENTED BY
Realsense
USB
Realsense
element
Host Compute
XADD
frames
Stream
viewer
element
XREAD BLOCK N
realsense:pointcloud
realsense:color
realsense:depth
Redis Streams: Overview
PRESENTED BY
Realsense
USB
Realsense
element
Host Compute
XADD
frames
Stream
viewer
element
Segmentation
Runtime
element
XREAD BLOCK N
XREVRANGE + -
realsense:pointcloud
realsense:color
realsense:depth
Redis Streams: Overview
PRESENTED BY
Realsense
USB
Realsense
element
Host Compute
XADD
frames
Stream
viewer
element
Segmentation
Runtime
element
Segmentation
retraining
element
XREAD BLOCK N
XREVRANGE + -
XRANGE last +
realsense:pointcloud
realsense:color
realsense:depth
Redis Streams: Overview
PRESENTED BY
Improvements over Pub/Sub
● Redis acts as an N-value last value cache
○ Can query for the most recent piece of data without having to monitor the stream
● Can traverse the stream as convenient, asking for all data since last read
● N is set by publisher and redis auto-prunes when efficient (when using XADD MAXLEN ~)
Consumer Groups
● Single consumer: Redis keeps track of where you were in the stream
● Multiple consumers: Redis auto-routes messages and provides
introspection and failover handling. (XACK)
Multiple Interaction Paradigms
● Can replicate pub-sub if desired, else can use last value cache
● Producer doesn’t care how the clients are interacting with the data
Benefits of Data Publication and Subscription
PRESENTED BY
Requestor: “foo” Responder: “bar”
elem:bar:req XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID
elem:foo:rep
Redis Streams: Async or Sync Command and Response
PRESENTED BY
Requestor: “foo” Responder: “bar”
elem:bar:reqXADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z
elem:foo:rep
XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID
Redis Streams: Async or Sync Command and Response
PRESENTED BY
Requestor: “foo” Responder: “bar”
elem:bar:req
(entryID, {“elem”: foo, “cmd”: Y, “data”: Z})
elem:foo:rep
XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID
Redis Streams: Async or Sync Command and Response
PRESENTED BY
Requestor: “foo” Responder: “bar”
elem:bar:req
(entryID, {“elem”: foo, “cmd”: Y, “data”: Z})
elem:foo:rep
XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID
XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID
Redis Streams: Async or Sync Command and Response
PRESENTED BY
Requestor: “foo” Responder: “bar”
elem:bar:req
(entryID, {“elem”: foo, “cmd”: Y, “data”: Z})
elem:foo:rep
XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID
XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID
XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T
(entryID, {“elem”: bar, “id”: ID, “time”: T})
Redis Streams: Async or Sync Command and Response
PRESENTED BY
Requestor: “foo” Responder: “bar”
elem:bar:req
(entryID, {“elem”: foo, “cmd”: Y, “data”: Z})
elem:foo:rep
XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID
XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID
XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T
(entryID, {“elem”: bar, “id”: ID, “time”: T})
XREAD BLOCK T STREAMS elem:foo:rep lastEntryID
Redis Streams: Async or Sync Command and Response
PRESENTED BY
Requestor: “foo” Responder: “bar”
elem:bar:req
(entryID, {“elem”: foo, “cmd”: Y, “data”: Z})
elem:foo:rep
XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID
XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID
XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T
(entryID, {“elem”: bar, “id”: ID, “time”: T})
XREAD BLOCK T STREAMS elem:foo:rep lastEntryID XADD elem:foo:rep MAXLEN ~ X elem bar id ID resp R
Redis Streams: Async or Sync Command and Response
PRESENTED BY
Requestor: “foo” Responder: “bar”
elem:bar:req
(entryID, {“elem”: foo, “cmd”: Y, “data”: Z})
elem:foo:rep
XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID
XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID
XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T
(entryID, {“elem”: bar, “id”: ID, “time”: T})
XREAD BLOCK T STREAMS elem:foo:rep lastEntryID
(entryID, {“elem”: bar, “id”: ID, “resp”: R})
XADD elem:foo:rep MAXLEN ~ X elem bar id ID resp R
Redis Streams: Async or Sync Command and Response
PRESENTED BY
Consumer Groups
● Single consumer: All commands go to single copy of
element, redis keeps track of where you are in
processing your command queue
● Multiple, idempotent consumers: Redis auto-routes
commands to instances of the same element and
load-balances for you
Sync vs Async
● Completely up to the caller, can choose to wait for
response or not
Logging and Introspection
● Each command in the system can be uniquely identified
by the tuple of
(element, stream ID)
Benefits of Command and Response
Requestor REDIS
elem:bar:req
elem:foo:rep
Responder
PRESENTED BY
Obligatory: None
● No serialization required; redis supports binary data
● Serialization agreement is left to the two sides of the
message
Supported in the spec: MessagePack
● Allows for type-strict messaging if desired using explicit
casts of received messages
● Allows for optional parameters if using JSON-like objects
● Can sniff the wire and decode a packet since the types
are encoded into the schema
Camera Data
● Typically leave in native/raw format. Don’t waste
time/CPU.
Redis Streams Serialization
Requestor REDIS
elem:bar:req
elem:foo:rep
Responder
PRESENTED BY
DEMO:
Voice-Activated Waveform Generation,
Data Capture and Plotting
PRESENTED BY
Voice
Elements
Waveform
Record
Nucleus
tmpfs
Redis Unix Socket
Demo Architecture: Voice
Voice Demo
PRESENTED BY
Atom: Summary
PRESENTED BY
Atom OS: What is it?
● A specification around using redis streams to implement an RPC and messaging protocol with the
functionalities described in this talk
● A set of language clients that implement said specification in as many languages as possible
● A pre-compiled docker container that has all of the requirements and language clients you need to get up
and running quickly
○ elementaryrobotics/atom
● A suite of reusable elements that are deployed by us and the community on dockerhub that expose
functionality using the atom SDK
○ Realsense
○ Stream-viewer
○ Segmentation
○ Voice
○ Record
○ More coming soon!
PRESENTED BY
Atom OS: Open Source
● Source code for Atom and elements can be found on github
○ https://github.com/elementary-robotics
● Docker containers are built and shipped with CI/CD using CircleCI to dockerhub
○ https://circleci.com/gh/elementary-robotics/atom
○ https://hub.docker.com/u/elementaryrobotics/
● Documentation with walkthroughs and examples
○ https://atomdocs.io
● Language support currently implemented for C, C++ and Python
○ Please help us add languages!
● Specification Improvements for v2.0
○ Want to add heartbeat, better consumer groups, parameter server, any more ideas you have!
Thank you!
PRESENTED BY
Atom
The Redis Streams-Powered
Microservices SDK
Dan Pipe-Mazo
Elementary Robotics, CTO
PRESENTED BY

More Related Content

What's hot

The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...
The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...
The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...
Redis Labs
 
Spark Summit East 2017: Apache spark and object stores
Spark Summit East 2017: Apache spark and object storesSpark Summit East 2017: Apache spark and object stores
Spark Summit East 2017: Apache spark and object stores
Steve Loughran
 
DPDK KNI interface
DPDK KNI interfaceDPDK KNI interface
DPDK KNI interface
Denys Haryachyy
 
eBPF - Observability In Deep
eBPF - Observability In DeepeBPF - Observability In Deep
eBPF - Observability In Deep
Mydbops
 
Kafka Retry and DLQ
Kafka Retry and DLQKafka Retry and DLQ
Kafka Retry and DLQ
George Teo
 
Caching Strategies
Caching StrategiesCaching Strategies
Caching Strategies
Michal Špaček
 
Storing 16 Bytes at Scale
Storing 16 Bytes at ScaleStoring 16 Bytes at Scale
Storing 16 Bytes at Scale
Fabian Reinartz
 
IPFS: The Permanent Web
IPFS: The Permanent WebIPFS: The Permanent Web
IPFS: The Permanent Web
Sivachandran Paramsivam
 
BPF - in-kernel virtual machine
BPF - in-kernel virtual machineBPF - in-kernel virtual machine
BPF - in-kernel virtual machine
Alexei Starovoitov
 
An Abusive Relationship with AngularJS
An Abusive Relationship with AngularJSAn Abusive Relationship with AngularJS
An Abusive Relationship with AngularJS
Mario Heiderich
 
Memory Management with Page Folios
Memory Management with Page FoliosMemory Management with Page Folios
Memory Management with Page Folios
Adrian Huang
 
The ideal and reality of NVDIMM RAS
The ideal and reality of NVDIMM RASThe ideal and reality of NVDIMM RAS
The ideal and reality of NVDIMM RAS
Yasunori Goto
 
Kernel Recipes 2017 - EBPF and XDP - Eric Leblond
Kernel Recipes 2017 - EBPF and XDP - Eric LeblondKernel Recipes 2017 - EBPF and XDP - Eric Leblond
Kernel Recipes 2017 - EBPF and XDP - Eric Leblond
Anne Nicolas
 
Row/Column- Level Security in SQL for Apache Spark
Row/Column- Level Security in SQL for Apache SparkRow/Column- Level Security in SQL for Apache Spark
Row/Column- Level Security in SQL for Apache Spark
DataWorks Summit/Hadoop Summit
 
From cache to in-memory data grid. Introduction to Hazelcast.
From cache to in-memory data grid. Introduction to Hazelcast.From cache to in-memory data grid. Introduction to Hazelcast.
From cache to in-memory data grid. Introduction to Hazelcast.
Taras Matyashovsky
 
The columnar roadmap: Apache Parquet and Apache Arrow
The columnar roadmap: Apache Parquet and Apache ArrowThe columnar roadmap: Apache Parquet and Apache Arrow
The columnar roadmap: Apache Parquet and Apache Arrow
DataWorks Summit
 
Understanding eBPF in a Hurry!
Understanding eBPF in a Hurry!Understanding eBPF in a Hurry!
Understanding eBPF in a Hurry!
Ray Jenkins
 
Fluentd vs. Logstash for OpenStack Log Management
Fluentd vs. Logstash for OpenStack Log ManagementFluentd vs. Logstash for OpenStack Log Management
Fluentd vs. Logstash for OpenStack Log Management
NTT Communications Technology Development
 
Page cache in Linux kernel
Page cache in Linux kernelPage cache in Linux kernel
Page cache in Linux kernel
Adrian Huang
 
Apache Flink internals
Apache Flink internalsApache Flink internals
Apache Flink internals
Kostas Tzoumas
 

What's hot (20)

The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...
The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...
The Happy Marriage of Redis and Protobuf by Scott Haines of Twilio - Redis Da...
 
Spark Summit East 2017: Apache spark and object stores
Spark Summit East 2017: Apache spark and object storesSpark Summit East 2017: Apache spark and object stores
Spark Summit East 2017: Apache spark and object stores
 
DPDK KNI interface
DPDK KNI interfaceDPDK KNI interface
DPDK KNI interface
 
eBPF - Observability In Deep
eBPF - Observability In DeepeBPF - Observability In Deep
eBPF - Observability In Deep
 
Kafka Retry and DLQ
Kafka Retry and DLQKafka Retry and DLQ
Kafka Retry and DLQ
 
Caching Strategies
Caching StrategiesCaching Strategies
Caching Strategies
 
Storing 16 Bytes at Scale
Storing 16 Bytes at ScaleStoring 16 Bytes at Scale
Storing 16 Bytes at Scale
 
IPFS: The Permanent Web
IPFS: The Permanent WebIPFS: The Permanent Web
IPFS: The Permanent Web
 
BPF - in-kernel virtual machine
BPF - in-kernel virtual machineBPF - in-kernel virtual machine
BPF - in-kernel virtual machine
 
An Abusive Relationship with AngularJS
An Abusive Relationship with AngularJSAn Abusive Relationship with AngularJS
An Abusive Relationship with AngularJS
 
Memory Management with Page Folios
Memory Management with Page FoliosMemory Management with Page Folios
Memory Management with Page Folios
 
The ideal and reality of NVDIMM RAS
The ideal and reality of NVDIMM RASThe ideal and reality of NVDIMM RAS
The ideal and reality of NVDIMM RAS
 
Kernel Recipes 2017 - EBPF and XDP - Eric Leblond
Kernel Recipes 2017 - EBPF and XDP - Eric LeblondKernel Recipes 2017 - EBPF and XDP - Eric Leblond
Kernel Recipes 2017 - EBPF and XDP - Eric Leblond
 
Row/Column- Level Security in SQL for Apache Spark
Row/Column- Level Security in SQL for Apache SparkRow/Column- Level Security in SQL for Apache Spark
Row/Column- Level Security in SQL for Apache Spark
 
From cache to in-memory data grid. Introduction to Hazelcast.
From cache to in-memory data grid. Introduction to Hazelcast.From cache to in-memory data grid. Introduction to Hazelcast.
From cache to in-memory data grid. Introduction to Hazelcast.
 
The columnar roadmap: Apache Parquet and Apache Arrow
The columnar roadmap: Apache Parquet and Apache ArrowThe columnar roadmap: Apache Parquet and Apache Arrow
The columnar roadmap: Apache Parquet and Apache Arrow
 
Understanding eBPF in a Hurry!
Understanding eBPF in a Hurry!Understanding eBPF in a Hurry!
Understanding eBPF in a Hurry!
 
Fluentd vs. Logstash for OpenStack Log Management
Fluentd vs. Logstash for OpenStack Log ManagementFluentd vs. Logstash for OpenStack Log Management
Fluentd vs. Logstash for OpenStack Log Management
 
Page cache in Linux kernel
Page cache in Linux kernelPage cache in Linux kernel
Page cache in Linux kernel
 
Apache Flink internals
Apache Flink internalsApache Flink internals
Apache Flink internals
 

Similar to Atom The Redis Streams-Powered Microservices SDK: Dan Pipemazo

Apache Pulsar Development 101 with Python
Apache Pulsar Development 101 with PythonApache Pulsar Development 101 with Python
Apache Pulsar Development 101 with Python
Timothy Spann
 
FIWARE Wednesday Webinars - The Use of DDS Middleware in Robotics (Part 2)
FIWARE Wednesday Webinars - The Use of DDS Middleware in Robotics (Part 2)FIWARE Wednesday Webinars - The Use of DDS Middleware in Robotics (Part 2)
FIWARE Wednesday Webinars - The Use of DDS Middleware in Robotics (Part 2)
FIWARE
 
eProsima RPC over DDS - OMG June 2013 Berlin Meeting
eProsima RPC over DDS - OMG June 2013 Berlin MeetingeProsima RPC over DDS - OMG June 2013 Berlin Meeting
eProsima RPC over DDS - OMG June 2013 Berlin Meeting
Jaime Martin Losa
 
micro-ROS: bringing ROS 2 to MCUs
micro-ROS: bringing ROS 2 to MCUsmicro-ROS: bringing ROS 2 to MCUs
micro-ROS: bringing ROS 2 to MCUs
eProsima
 
Redis v5 & Streams
Redis v5 & StreamsRedis v5 & Streams
Redis v5 & Streams
Itamar Haber
 
Micro XRCE-DDS: Bringing DDS into microcontrollers
Micro XRCE-DDS: Bringing DDS into microcontrollersMicro XRCE-DDS: Bringing DDS into microcontrollers
Micro XRCE-DDS: Bringing DDS into microcontrollers
eProsima
 
Traitement temps réel chez Streamroot - Golang Paris Juin 2016
Traitement temps réel chez Streamroot - Golang Paris Juin 2016Traitement temps réel chez Streamroot - Golang Paris Juin 2016
Traitement temps réel chez Streamroot - Golang Paris Juin 2016
Simon Caplette
 
Fast Streaming into Clickhouse with Apache Pulsar
Fast Streaming into Clickhouse with Apache PulsarFast Streaming into Clickhouse with Apache Pulsar
Fast Streaming into Clickhouse with Apache Pulsar
Timothy Spann
 
KrakenD API Gateway
KrakenD API GatewayKrakenD API Gateway
KrakenD API Gateway
Albert Lombarte
 
One Billion Black Friday Shoppers on a Distributed Data Store (Fahd Siddiqui,...
One Billion Black Friday Shoppers on a Distributed Data Store (Fahd Siddiqui,...One Billion Black Friday Shoppers on a Distributed Data Store (Fahd Siddiqui,...
One Billion Black Friday Shoppers on a Distributed Data Store (Fahd Siddiqui,...
DataStax
 
Realizing the promise of portable data processing with Apache Beam
Realizing the promise of portable data processing with Apache BeamRealizing the promise of portable data processing with Apache Beam
Realizing the promise of portable data processing with Apache Beam
DataWorks Summit
 
Porting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to RustPorting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to Rust
Evan Chan
 
CocoaConf: The Language of Mobile Software is APIs
CocoaConf: The Language of Mobile Software is APIsCocoaConf: The Language of Mobile Software is APIs
CocoaConf: The Language of Mobile Software is APIs
Tim Burks
 
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP IntegrationBKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
Linaro
 
Nanog75, Network Device Property as Code
Nanog75, Network Device Property as CodeNanog75, Network Device Property as Code
Nanog75, Network Device Property as Code
Damien Garros
 
Learn more about the tremendous value Open Data Plane brings to NFV
Learn more about the tremendous value Open Data Plane brings to NFVLearn more about the tremendous value Open Data Plane brings to NFV
Learn more about the tremendous value Open Data Plane brings to NFV
Ghodhbane Mohamed Amine
 
Ietf91 ad hoc-coap-lwm2m-ipso
Ietf91 ad hoc-coap-lwm2m-ipsoIetf91 ad hoc-coap-lwm2m-ipso
Ietf91 ad hoc-coap-lwm2m-ipso
Michael Koster
 
micro-ROS: Developing ROS 2 professional applications based on MCUs
micro-ROS: Developing ROS 2 professional applications based on MCUsmicro-ROS: Developing ROS 2 professional applications based on MCUs
micro-ROS: Developing ROS 2 professional applications based on MCUs
eProsima
 
Tungsten Fabric Overview
Tungsten Fabric OverviewTungsten Fabric Overview
Tungsten Fabric Overview
Michelle Holley
 
What you need to know about .NET Core 3.0 and beyond
What you need to know about .NET Core 3.0 and beyondWhat you need to know about .NET Core 3.0 and beyond
What you need to know about .NET Core 3.0 and beyond
Jon Galloway
 

Similar to Atom The Redis Streams-Powered Microservices SDK: Dan Pipemazo (20)

Apache Pulsar Development 101 with Python
Apache Pulsar Development 101 with PythonApache Pulsar Development 101 with Python
Apache Pulsar Development 101 with Python
 
FIWARE Wednesday Webinars - The Use of DDS Middleware in Robotics (Part 2)
FIWARE Wednesday Webinars - The Use of DDS Middleware in Robotics (Part 2)FIWARE Wednesday Webinars - The Use of DDS Middleware in Robotics (Part 2)
FIWARE Wednesday Webinars - The Use of DDS Middleware in Robotics (Part 2)
 
eProsima RPC over DDS - OMG June 2013 Berlin Meeting
eProsima RPC over DDS - OMG June 2013 Berlin MeetingeProsima RPC over DDS - OMG June 2013 Berlin Meeting
eProsima RPC over DDS - OMG June 2013 Berlin Meeting
 
micro-ROS: bringing ROS 2 to MCUs
micro-ROS: bringing ROS 2 to MCUsmicro-ROS: bringing ROS 2 to MCUs
micro-ROS: bringing ROS 2 to MCUs
 
Redis v5 & Streams
Redis v5 & StreamsRedis v5 & Streams
Redis v5 & Streams
 
Micro XRCE-DDS: Bringing DDS into microcontrollers
Micro XRCE-DDS: Bringing DDS into microcontrollersMicro XRCE-DDS: Bringing DDS into microcontrollers
Micro XRCE-DDS: Bringing DDS into microcontrollers
 
Traitement temps réel chez Streamroot - Golang Paris Juin 2016
Traitement temps réel chez Streamroot - Golang Paris Juin 2016Traitement temps réel chez Streamroot - Golang Paris Juin 2016
Traitement temps réel chez Streamroot - Golang Paris Juin 2016
 
Fast Streaming into Clickhouse with Apache Pulsar
Fast Streaming into Clickhouse with Apache PulsarFast Streaming into Clickhouse with Apache Pulsar
Fast Streaming into Clickhouse with Apache Pulsar
 
KrakenD API Gateway
KrakenD API GatewayKrakenD API Gateway
KrakenD API Gateway
 
One Billion Black Friday Shoppers on a Distributed Data Store (Fahd Siddiqui,...
One Billion Black Friday Shoppers on a Distributed Data Store (Fahd Siddiqui,...One Billion Black Friday Shoppers on a Distributed Data Store (Fahd Siddiqui,...
One Billion Black Friday Shoppers on a Distributed Data Store (Fahd Siddiqui,...
 
Realizing the promise of portable data processing with Apache Beam
Realizing the promise of portable data processing with Apache BeamRealizing the promise of portable data processing with Apache Beam
Realizing the promise of portable data processing with Apache Beam
 
Porting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to RustPorting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to Rust
 
CocoaConf: The Language of Mobile Software is APIs
CocoaConf: The Language of Mobile Software is APIsCocoaConf: The Language of Mobile Software is APIs
CocoaConf: The Language of Mobile Software is APIs
 
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP IntegrationBKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
BKK16-409 VOSY Switch Port to ARMv8 Platforms and ODP Integration
 
Nanog75, Network Device Property as Code
Nanog75, Network Device Property as CodeNanog75, Network Device Property as Code
Nanog75, Network Device Property as Code
 
Learn more about the tremendous value Open Data Plane brings to NFV
Learn more about the tremendous value Open Data Plane brings to NFVLearn more about the tremendous value Open Data Plane brings to NFV
Learn more about the tremendous value Open Data Plane brings to NFV
 
Ietf91 ad hoc-coap-lwm2m-ipso
Ietf91 ad hoc-coap-lwm2m-ipsoIetf91 ad hoc-coap-lwm2m-ipso
Ietf91 ad hoc-coap-lwm2m-ipso
 
micro-ROS: Developing ROS 2 professional applications based on MCUs
micro-ROS: Developing ROS 2 professional applications based on MCUsmicro-ROS: Developing ROS 2 professional applications based on MCUs
micro-ROS: Developing ROS 2 professional applications based on MCUs
 
Tungsten Fabric Overview
Tungsten Fabric OverviewTungsten Fabric Overview
Tungsten Fabric Overview
 
What you need to know about .NET Core 3.0 and beyond
What you need to know about .NET Core 3.0 and beyondWhat you need to know about .NET Core 3.0 and beyond
What you need to know about .NET Core 3.0 and beyond
 

More from Redis Labs

Redis Day Bangalore 2020 - Session state caching with redis
Redis Day Bangalore 2020 - Session state caching with redisRedis Day Bangalore 2020 - Session state caching with redis
Redis Day Bangalore 2020 - Session state caching with redis
Redis Labs
 
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020
Redis Labs
 
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020
Redis Labs
 
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...
Redis Labs
 
Redis for Data Science and Engineering by Dmitry Polyakovsky of Oracle
Redis for Data Science and Engineering by Dmitry Polyakovsky of OracleRedis for Data Science and Engineering by Dmitry Polyakovsky of Oracle
Redis for Data Science and Engineering by Dmitry Polyakovsky of Oracle
Redis Labs
 
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020
Redis Labs
 
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020
Redis Labs
 
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...
Redis Labs
 
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
Redis Labs
 
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...Highly Available Persistent Session Management Service by Mohamed Elmergawi o...
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...
Redis Labs
 
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...
Redis Labs
 
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...
Redis Labs
 
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020
Redis Labs
 
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020
Redis Labs
 
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020
Redis Labs
 
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020
Redis Labs
 
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...
Redis Labs
 
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...
Redis Labs
 
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...
Redis Labs
 
Redis as a High Scale Swiss Army Knife by Rahul Dagar and Abhishek Gupta of G...
Redis as a High Scale Swiss Army Knife by Rahul Dagar and Abhishek Gupta of G...Redis as a High Scale Swiss Army Knife by Rahul Dagar and Abhishek Gupta of G...
Redis as a High Scale Swiss Army Knife by Rahul Dagar and Abhishek Gupta of G...
Redis Labs
 

More from Redis Labs (20)

Redis Day Bangalore 2020 - Session state caching with redis
Redis Day Bangalore 2020 - Session state caching with redisRedis Day Bangalore 2020 - Session state caching with redis
Redis Day Bangalore 2020 - Session state caching with redis
 
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020
Protecting Your API with Redis by Jane Paek - Redis Day Seattle 2020
 
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020
SQL, Redis and Kubernetes by Paul Stanton of Windocks - Redis Day Seattle 2020
 
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...
Rust and Redis - Solving Problems for Kubernetes by Ravi Jagannathan of VMwar...
 
Redis for Data Science and Engineering by Dmitry Polyakovsky of Oracle
Redis for Data Science and Engineering by Dmitry Polyakovsky of OracleRedis for Data Science and Engineering by Dmitry Polyakovsky of Oracle
Redis for Data Science and Engineering by Dmitry Polyakovsky of Oracle
 
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020
Practical Use Cases for ACLs in Redis 6 by Jamie Scott - Redis Day Seattle 2020
 
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020
Moving Beyond Cache by Yiftach Shoolman Redis Labs - Redis Day Seattle 2020
 
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...
Leveraging Redis for System Monitoring by Adam McCormick of SBG - Redis Day S...
 
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
JSON in Redis - When to use RedisJSON by Jay Won of Coupang - Redis Day Seatt...
 
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...Highly Available Persistent Session Management Service by Mohamed Elmergawi o...
Highly Available Persistent Session Management Service by Mohamed Elmergawi o...
 
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...
Anatomy of a Redis Command by Madelyn Olson of Amazon Web Services - Redis Da...
 
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...
Building a Multi-dimensional Analytics Engine with RedisGraph by Matthew Goos...
 
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020
RediSearch 1.6 by Pieter Cailliau - Redis Day Bangalore 2020
 
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020
RedisGraph 2.0 by Pieter Cailliau - Redis Day Bangalore 2020
 
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020
RedisTimeSeries 1.2 by Pieter Cailliau - Redis Day Bangalore 2020
 
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020
RedisAI 0.9 by Sherin Thomas of Tensorwerk - Redis Day Bangalore 2020
 
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...
Rate-Limiting 30 Million requests by Vijay Lakshminarayanan and Girish Koundi...
 
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...
Three Pillars of Observability by Rajalakshmi Raji Srinivasan of Site24x7 Zoh...
 
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...
Solving Complex Scaling Problems by Prashant Kumar and Abhishek Jain of Myntr...
 
Redis as a High Scale Swiss Army Knife by Rahul Dagar and Abhishek Gupta of G...
Redis as a High Scale Swiss Army Knife by Rahul Dagar and Abhishek Gupta of G...Redis as a High Scale Swiss Army Knife by Rahul Dagar and Abhishek Gupta of G...
Redis as a High Scale Swiss Army Knife by Rahul Dagar and Abhishek Gupta of G...
 

Recently uploaded

Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
Zilliz
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
Mariano Tinti
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 

Recently uploaded (20)

Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 

Atom The Redis Streams-Powered Microservices SDK: Dan Pipemazo

  • 1. PRESENTED BY Atom The Redis Streams-Powered Microservices SDK Dan Pipe-Mazo Elementary Robotics, CTO
  • 2. PRESENTED BY Agenda: 1. Starting with a demo! We’ll see atom and redis in action using a depth-sensing camera 2. SDK Architecture (featuring Redis Streams!) We’ll dive into the SDK in the context of the demo and take a look at what’s going on under the hood 3. Open Source + Signup Give-Away We’ll discuss open-sourcing the core of atom and the hardware we’re giving away to our early developers
  • 3. PRESENTED BY DEMO: Object Detection and Segmentation Built with Atom & Redis
  • 4. PRESENTED BY Atom OS Overview An in-depth dive into how we built the core of Atom
  • 5. PRESENTED BY 1. Atom is a specification and a set of client libraries that allow users to create reusable microservices that interact with each other through Redis 2. Through Docker and docker-compose we can link together these microservices to launch applications 3. By abstracting applications into microservices we can do the following: ● Allow each piece of code to be developed in the optimal language. ● Easily reuse and share code elementary-robotics/atom atomdocs.io Atom OS: High Level
  • 6. PRESENTED BY 1. Use microservices to allow for reusable code elements with zero install or dependencies and scalable message passing. 2. Industries still rely on copying and pasting code into new projects far too often and we need better reusability to scale. 3. With full-stack hardware and software products, things like machine learning and computer vision (python) should be implemented in different language from your embedded code (C). The Goal of Atom OS
  • 7. PRESENTED BY Redis 5.0+ Server Unix socket and/or TCP Atom Command Line Interface English-like interface to interact with Atom Nucleus Architecture and Terminology
  • 9. PRESENTED BY - Any language with an atom language client - Publish data - Expose commands and send responses $MY_ELEMENT Your Code! FROM elementaryrobotics/atom Architecture and Terminology
  • 11. PRESENTED BY Atom: Powered by Redis Streams Powerful, efficient time-series data pub/sub and req/rep
  • 12. PRESENTED BY Our goal: ● Abstract out complex engineering problems into reusable, sharable elements. ● Don’t sacrifice performance or increase complexity in doing so Architecture Question: Why microservices? Questions we asked ourselves before building Atom: ● Do we need another microservice framework? (gRPC, thrift, REST, ROS, zeroMQ, DDS) ● How would we do it if we weren’t going to build this in a reusable, abstracted fashion?
  • 13. PRESENTED BY Data Publication and Subscription ● Publishing should be stateless and fire-and-forget ● Consumption should be able to be regulated by the consumer ○ Solve the “slow subscriber” problem, i.e. how to handle a subscriber who only wants 1Hz updates on a 1kHz stream ● Low latency ● Support many parallel clients without any extra burden on publisher / performance hit Command and Response ● Should be able to call commands and receive responses across as many languages as possible ● Easy to make command either synchronous or asynchronous ● Easy load-balancing without complicated multi-threading Serialization ● Optional and not overly burdensome on either the CPU or the user’s sanity ● If serialized, messages can ideally be read without knowing the schema Architecture Question: What are we looking for?
  • 14. PRESENTED BY Install and OS Requirements ● Write code once, it should work on any OS (including graphics!) ● Setup should be as minimal as possible. OS and/or system-related install bugs are the worst. Language Support ● Support as many languages as possible. ● Allows each problem to be solved in it (or its programmer’s) ideal language. ● Atwood’s law: any application that can be written in JavaScript, will eventually be written in JavaScript. Architecture Question: What are we looking for? ...Contd Service Discovery ● Should be able to discover other microservices in the system. ● For each microservice, should be able to identify its health, available commands and streams. Logging ● Everything should be able to be logged. ● Failures should be easily traceable to an outside observer.
  • 15. PRESENTED BY It turns out that’s a pretty big list of things we’re asking for, but there’s a solution! >25 languages Streams allow for novel data flows Production-tested and well-supported Redis Requirements installed in container Multi-OS Docker-compose Docker >25 languages Easy, fast, pretty much JSON Completely optional MessagePack + + Architecture Solution
  • 17. PRESENTED BY XADD s1 MAXLEN ~ X k1 v1 k2 v2 … stream: s1 0 - k1 v1 k2 v2 1 - k1 v1 k2 v2 2 - k1 v1 k2 v2 X - k1 v1 k2 v2 ... Redis Streams: Overview
  • 18. PRESENTED BY XADD s2 MAXLEN ~ X kA vA kB vB … XADD s1 MAXLEN ~ X k1 v1 k2 v2 … stream: s1 0 - k1 v1 k2 v2 1 - k1 v1 k2 v2 2 - k1 v1 k2 v2 X - k1 v1 k2 v2 ... 0 - kA vA kB vB 1 - kA vA kB vB 2 - kA vA kB vB X - kA vA kB vB ... stream: s2 Redis Streams: Overview
  • 19. PRESENTED BY XADD s2 MAXLEN ~ X kA vA kB vB … XADD s1 MAXLEN ~ X k1 v1 k2 v2 … stream: s1 0 - k1 v1 k2 v2 1 - k1 v1 k2 v2 2 - k1 v1 k2 v2 X - k1 v1 k2 v2 XREAD BLOCK N STREAMS s1 $ XREAD BLOCK N STREAMS s1 ID Subscribe to all entries from one stream ... 0 - kA vA kB vB 1 - kA vA kB vB 2 - kA vA kB vB X - kA vA kB vB ... stream: s2 Redis Streams: Overview
  • 20. PRESENTED BY XADD s2 MAXLEN ~ X kA vA kB vB … XADD s1 MAXLEN ~ X k1 v1 k2 v2 … stream: s1 0 - k1 v1 k2 v2 1 - k1 v1 k2 v2 2 - k1 v1 k2 v2 X - k1 v1 k2 v2 XREAD BLOCK N STREAMS s1 $ XREAD BLOCK N STREAMS s1 ID Subscribe to all entries from one stream ... 0 - kA vA kB vB 1 - kA vA kB vB 2 - kA vA kB vB X - kA vA kB vB ... stream: s2 XREAD BLOCK N STREAMS s1 s2 ID1 ID2 Subscribe to all entries from multiple streams Redis Streams: Overview
  • 21. PRESENTED BY XADD s2 MAXLEN ~ X kA vA kB vB … XADD s1 MAXLEN ~ X k1 v1 k2 v2 … stream: s1 0 - k1 v1 k2 v2 1 - k1 v1 k2 v2 2 - k1 v1 k2 v2 X - k1 v1 k2 v2 XREAD BLOCK N STREAMS s1 $ XREAD BLOCK N STREAMS s1 ID Subscribe to all entries from one stream ... 0 - kA vA kB vB 1 - kA vA kB vB 2 - kA vA kB vB X - kA vA kB vB ... stream: s2 XREAD BLOCK N STREAMS s1 s2 ID1 ID2 Subscribe to all entries from multiple streams XREVRANGE s1 + - COUNT N Get the latest N entries from a stream Redis Streams: Overview
  • 22. PRESENTED BY XADD s2 MAXLEN ~ X kA vA kB vB … XADD s1 MAXLEN ~ X k1 v1 k2 v2 … stream: s1 0 - k1 v1 k2 v2 1 - k1 v1 k2 v2 2 - k1 v1 k2 v2 X - k1 v1 k2 v2 XREAD BLOCK N STREAMS s1 $ XREAD BLOCK N STREAMS s1 ID Subscribe to all entries from one stream ... 0 - kA vA kB vB 1 - kA vA kB vB 2 - kA vA kB vB X - kA vA kB vB ... stream: s2 XREAD BLOCK N STREAMS s1 s2 ID1 ID2 Subscribe to all entries from multiple streams XREVRANGE s1 + - COUNT N Get the latest N entries from a stream XRANGE s1 - + COUNT N Get the oldest N entries from a stream Redis Streams: Overview
  • 24. PRESENTED BY Realsense USB Realsense element Host Compute XADD frames Stream viewer element XREAD BLOCK N realsense:pointcloud realsense:color realsense:depth Redis Streams: Overview
  • 25. PRESENTED BY Realsense USB Realsense element Host Compute XADD frames Stream viewer element Segmentation Runtime element XREAD BLOCK N XREVRANGE + - realsense:pointcloud realsense:color realsense:depth Redis Streams: Overview
  • 26. PRESENTED BY Realsense USB Realsense element Host Compute XADD frames Stream viewer element Segmentation Runtime element Segmentation retraining element XREAD BLOCK N XREVRANGE + - XRANGE last + realsense:pointcloud realsense:color realsense:depth Redis Streams: Overview
  • 27. PRESENTED BY Improvements over Pub/Sub ● Redis acts as an N-value last value cache ○ Can query for the most recent piece of data without having to monitor the stream ● Can traverse the stream as convenient, asking for all data since last read ● N is set by publisher and redis auto-prunes when efficient (when using XADD MAXLEN ~) Consumer Groups ● Single consumer: Redis keeps track of where you were in the stream ● Multiple consumers: Redis auto-routes messages and provides introspection and failover handling. (XACK) Multiple Interaction Paradigms ● Can replicate pub-sub if desired, else can use last value cache ● Producer doesn’t care how the clients are interacting with the data Benefits of Data Publication and Subscription
  • 28. PRESENTED BY Requestor: “foo” Responder: “bar” elem:bar:req XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID elem:foo:rep Redis Streams: Async or Sync Command and Response
  • 29. PRESENTED BY Requestor: “foo” Responder: “bar” elem:bar:reqXADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z elem:foo:rep XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID Redis Streams: Async or Sync Command and Response
  • 30. PRESENTED BY Requestor: “foo” Responder: “bar” elem:bar:req (entryID, {“elem”: foo, “cmd”: Y, “data”: Z}) elem:foo:rep XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID Redis Streams: Async or Sync Command and Response
  • 31. PRESENTED BY Requestor: “foo” Responder: “bar” elem:bar:req (entryID, {“elem”: foo, “cmd”: Y, “data”: Z}) elem:foo:rep XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID Redis Streams: Async or Sync Command and Response
  • 32. PRESENTED BY Requestor: “foo” Responder: “bar” elem:bar:req (entryID, {“elem”: foo, “cmd”: Y, “data”: Z}) elem:foo:rep XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T (entryID, {“elem”: bar, “id”: ID, “time”: T}) Redis Streams: Async or Sync Command and Response
  • 33. PRESENTED BY Requestor: “foo” Responder: “bar” elem:bar:req (entryID, {“elem”: foo, “cmd”: Y, “data”: Z}) elem:foo:rep XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T (entryID, {“elem”: bar, “id”: ID, “time”: T}) XREAD BLOCK T STREAMS elem:foo:rep lastEntryID Redis Streams: Async or Sync Command and Response
  • 34. PRESENTED BY Requestor: “foo” Responder: “bar” elem:bar:req (entryID, {“elem”: foo, “cmd”: Y, “data”: Z}) elem:foo:rep XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T (entryID, {“elem”: bar, “id”: ID, “time”: T}) XREAD BLOCK T STREAMS elem:foo:rep lastEntryID XADD elem:foo:rep MAXLEN ~ X elem bar id ID resp R Redis Streams: Async or Sync Command and Response
  • 35. PRESENTED BY Requestor: “foo” Responder: “bar” elem:bar:req (entryID, {“elem”: foo, “cmd”: Y, “data”: Z}) elem:foo:rep XADD elem:bar:req MAXLEN ~ X elem foo cmd Y data Z XREAD BLOCK 0 STREAMS elem:bar:req lastEntryID XREAD BLOCK 1000 STREAMS elem:foo:rep lastEntryID XADD elem:foo:rep MAXLEN ~ X elem bar id ID time T (entryID, {“elem”: bar, “id”: ID, “time”: T}) XREAD BLOCK T STREAMS elem:foo:rep lastEntryID (entryID, {“elem”: bar, “id”: ID, “resp”: R}) XADD elem:foo:rep MAXLEN ~ X elem bar id ID resp R Redis Streams: Async or Sync Command and Response
  • 36. PRESENTED BY Consumer Groups ● Single consumer: All commands go to single copy of element, redis keeps track of where you are in processing your command queue ● Multiple, idempotent consumers: Redis auto-routes commands to instances of the same element and load-balances for you Sync vs Async ● Completely up to the caller, can choose to wait for response or not Logging and Introspection ● Each command in the system can be uniquely identified by the tuple of (element, stream ID) Benefits of Command and Response Requestor REDIS elem:bar:req elem:foo:rep Responder
  • 37. PRESENTED BY Obligatory: None ● No serialization required; redis supports binary data ● Serialization agreement is left to the two sides of the message Supported in the spec: MessagePack ● Allows for type-strict messaging if desired using explicit casts of received messages ● Allows for optional parameters if using JSON-like objects ● Can sniff the wire and decode a packet since the types are encoded into the schema Camera Data ● Typically leave in native/raw format. Don’t waste time/CPU. Redis Streams Serialization Requestor REDIS elem:bar:req elem:foo:rep Responder
  • 38. PRESENTED BY DEMO: Voice-Activated Waveform Generation, Data Capture and Plotting
  • 39. PRESENTED BY Voice Elements Waveform Record Nucleus tmpfs Redis Unix Socket Demo Architecture: Voice Voice Demo
  • 41. PRESENTED BY Atom OS: What is it? ● A specification around using redis streams to implement an RPC and messaging protocol with the functionalities described in this talk ● A set of language clients that implement said specification in as many languages as possible ● A pre-compiled docker container that has all of the requirements and language clients you need to get up and running quickly ○ elementaryrobotics/atom ● A suite of reusable elements that are deployed by us and the community on dockerhub that expose functionality using the atom SDK ○ Realsense ○ Stream-viewer ○ Segmentation ○ Voice ○ Record ○ More coming soon!
  • 42. PRESENTED BY Atom OS: Open Source ● Source code for Atom and elements can be found on github ○ https://github.com/elementary-robotics ● Docker containers are built and shipped with CI/CD using CircleCI to dockerhub ○ https://circleci.com/gh/elementary-robotics/atom ○ https://hub.docker.com/u/elementaryrobotics/ ● Documentation with walkthroughs and examples ○ https://atomdocs.io ● Language support currently implemented for C, C++ and Python ○ Please help us add languages! ● Specification Improvements for v2.0 ○ Want to add heartbeat, better consumer groups, parameter server, any more ideas you have!
  • 44. PRESENTED BY Atom The Redis Streams-Powered Microservices SDK Dan Pipe-Mazo Elementary Robotics, CTO