SlideShare una empresa de Scribd logo
1 de 47
Descargar para leer sin conexión
@adamwarski#Voxxed
Evaluating persistent, replicated
message queues
Adam Warski
SoftwareMill
@adamwarski
About me
❖ coder @
❖ open-source: Supler, MacWire, Envers, …
❖ long time interest in message queues
❖ ElasticMQ - local SQS implementation
❖ http://www.warski.org / @adamwarski
@adamwarski
Why message queues?
❖ Reactive Manifesto: message
driven
❖ Microservices integration:
❖ REST
❖ MQ
❖ Any kind of asynchronous
processing
@adamwarski
Jobs? messages? tasks?
❖ Similar concepts:
❖ message queue
❖ job queue
❖ asynchronous task
@adamwarski
Exactly-once
❖ Everybody would like that
❖ Hard to achieve
❖ needs distributed transactions
❖ Systems advertised as exactly-once are usually not
@adamwarski
At-[least | most]-once
❖ “Almost exactly once”
❖ Least/most: tradeoffs
❖ Message acknowledgments
❖ Idempotent processing
@adamwarski
Why persistent & replicated?
❖ Reactive manifesto: responsive, resilient
❖ We want to be sure no messages are lost
❖ Brings new problems
❖ But, “it depends”
@adamwarski
Scenario: send
❖ Client wants to send a message
❖ If the request completes, we want to be sure that the
message will be eventually processed
❖ Making sure by:
❖ writing to disk
❖ replicating
@adamwarski
Scenario: receive
❖ At-least-once-delivery
❖ Message is received from queue
❖ Processed
❖ And acknowledged (deleted)
@adamwarski
Systems under test
❖ RabbitMQ
❖ HornetQ
❖ Kafka
❖ SQS
❖ MongoDB
❖ (EventStore)
@adamwarski
What is measured
❖ Number of messages per second sent & received
❖ Msg size: 100 bytes
❖ Other interesting metrics, not covered:
❖ Send latency
❖ Total msg processing time
❖ Resource consumption at a given msg rate
@adamwarski
Testing methodology
❖ Message broker: 3 nodes
❖ 1-4 nodes sending, 1-4 nodes receiving
❖ Each sender/receiver node: 1-25 threads
❖ Each thread:
❖ sending messages in batches, random size 1-10
(1-100/1-1000)
❖ receiving messages in batches, acknowledging
@adamwarski
Servers
❖ Single EC2 availability zone
❖ -> fast internal network
❖ m3.large
❖ 2 CPUs
❖ 7.5 GiB RAM
❖ 32GB SSD storage
@adamwarski
❖ RedHat/JBoss project
❖ multi-protocol, embeddable, high-performance,
asynchronous messaging system
❖ JMS, STOMP, AMQP, native
@adamwarski
HornetQ replication
❖ Live-backup pairs
❖ Data replicated to one node
❖ Fail-over:
❖ manual, or
❖ automatic, but: split-brain
@adamwarski
HornetQ replication
❖ Once a transaction commits, it is written to the primary
node’s journal
❖ Replication is asynchronous
@adamwarski
HornetQ operations
❖ Send: transactions
❖ Receive:
❖ one message at a time
❖ blocking confirmations turned off
@adamwarski
HornetQ results
Threads Nodes
Send
msgs/s
Receive
msgs/s
1 1 1 108 1 106
25 1 12 791 12 802
1 4 3 768 3 627
25 4 17 402 16 160
@adamwarski
HornetQ notes
❖ Poor documentation of replication guarantees
❖ Poor documentation on network failure behaviours
❖ Very high load: primary node considered dead even
though working
@adamwarski
❖ Leading open-source messaging system
❖ AMQP
❖ Very rich messaging options
@adamwarski
RabbitMQ replication
❖ 3 nodes
❖ Using publisher acknowledgments
❖ AMQP extension
❖ cluster-wide
❖ Does not cope well with network partitions
❖ documented!
@adamwarski
RabbitMQ operations
❖ Sending a batch, waiting for confirmations
❖ Receiving batch, acknowledging one-by-one
❖ Redelivery: connection broken
@adamwarski
RabbitMQ results
@adamwarski
RabbitMQ results
Threads Nodes
Send
msgs/s
Receive
msgs/s
1 1 1 829 1 811
1 4 3 158 3 124
Batch 100
Threads Nodes
Send
msgs/s
Receive
msgs/s
1 1 3 181 2 549
1 4 3 566 3 533
Batch 1000
@adamwarski
RabbitMQ notes
❖ Publisher confirms seems to be killing it
❖ Documented network partition behaviour
❖ Shovel/Federation plugins
@adamwarski
SQS
❖ As-a-service
❖ Part of Amazon’s Web Services
❖ Simple interface
❖ Priced basing on load
❖ Easy to set up
@adamwarski
SQS replication
❖ We don’t really know ;)
❖ If a send completes, the message is replicated to
multiple nodes
❖ Unfair competition: might use multiple replicated
clusters with routing/load-balancing clients
@adamwarski
SQS operations
❖ Sending messages in batches
❖ Receiving messages in batches (long polling).
❖ Redelivery: after timeout (message blocked for some
time)
❖ Deleting (acknowledging) in batches
@adamwarski
SQS results
@adamwarski
SQS results
@adamwarski
SQS notes
❖ Can re-deliver even if no failure in the client
❖ failure in SQS
@adamwarski
❖ Different approach to messaging
❖ Streaming publish-subscribe system
❖ Topics with multiple partitions
❖ more partitions -> more concurrency
@adamwarski
Point-to-point messaging in Kafka
❖ Messages in each partition are processed in-order
❖ Consumers should consume at the same speed
❖ Messages can’t be selectively acknowledged, only “up
to offset”
❖ No “advanced” messaging options
@adamwarski
Point-to-point messaging in Kafka
@adamwarski
Kafka replication
❖ Multiple nodes (here: 3)
❖ Replication factor (here: 3)
❖ Uses Zookeeper for coordination
@adamwarski
Kafka operations
❖ Send: blocks until accepted by partition leader, no
guarantees for replication
❖ Consumer offsets: committed every 10 seconds
manually; during that time, message receiving is
blocked
❖ Redelivery: starting from last known stream position
@adamwarski
Kafka results
Threads Nodes
Send
msgs/s
Receive
msgs/s
1 1 2 558 2 561
25 1 29 691 27 093
25 4 33 587 31 891
@adamwarski
Kafka notes
❖ Scaling potential:
❖ adding more nodes
❖ increasing number of partitions
@adamwarski
❖ Not really a queue - I know ;)
❖ Very simple replication setup
❖ Document-level atomic operations: find-and-modify
@adamwarski
Mongo replication
❖ 3 nodes
❖ Controllable guarantees:
❖ WriteConcern.ACKNOWLEDGED
❖ WriteConcern.REPLICA_ACKNOWLEDGED
(majority)
@adamwarski
Mongo operations
❖ Sending: in batches, waiting until the DB write
completes
❖ Receiving: find-and-modify, one-by-one
❖ Redelivery: after timeout (message blocked for some
time)
❖ Deleting: in batches, DB delete
@adamwarski
Mongo results
Threads Nodes
Send
msgs/s
Receive
msgs/s
1 1 7 968 1 914
25 1 10 903 3 266
“Safe”
Threads Nodes
Send
msgs/s
Receive
msgs/s
1 1 1 489 1 483
25 2 6 550 2 841
“Replica safe”
@adamwarski
❖ Primary use-case: event sourcing
❖ Competing consumers: servers keeps track
❖ Hybrid acknowledgment model:
❖ selective
❖ with checkpoints
❖ Message time-outs
@adamwarski
Summing up
❖ SQS: good performance, easy setup
❖ Mongo: no need to maintain separate system
❖ RabbitMQ: rich messaging options, good persistence
❖ HornetQ: good performance, many interfaces
❖ Kafka: best performance and scalability
@adamwarski
Summary - batch 10
@adamwarski
Summary - batch 100
@adamwarski
Thanks!
❖ Questions?
Scalar
11/04/2015

Más contenido relacionado

La actualidad más candente

The Future of Messaging: RabbitMQ and AMQP
The Future of Messaging: RabbitMQ and AMQP The Future of Messaging: RabbitMQ and AMQP
The Future of Messaging: RabbitMQ and AMQP
Eberhard Wolff
 
クックパッドのLVSについて
クックパッドのLVSについてクックパッドのLVSについて
クックパッドのLVSについて
Sugawara Genki
 
Mailerqnewpresentation
MailerqnewpresentationMailerqnewpresentation
Mailerqnewpresentation
Copernica BV
 
My S Q L Replication Getting The Most From Slaves
My S Q L  Replication  Getting  The  Most  From  SlavesMy S Q L  Replication  Getting  The  Most  From  Slaves
My S Q L Replication Getting The Most From Slaves
PerconaPerformance
 
Five Workload-to-Cloud Migration Methods
Five Workload-to-Cloud Migration MethodsFive Workload-to-Cloud Migration Methods
Five Workload-to-Cloud Migration Methods
Peak 10
 

La actualidad más candente (20)

The Future of Messaging: RabbitMQ and AMQP
The Future of Messaging: RabbitMQ and AMQP The Future of Messaging: RabbitMQ and AMQP
The Future of Messaging: RabbitMQ and AMQP
 
Zebus - Pitfalls of a P2P service bus
Zebus - Pitfalls of a P2P service busZebus - Pitfalls of a P2P service bus
Zebus - Pitfalls of a P2P service bus
 
Messaging with amqp and rabbitmq
Messaging with amqp and rabbitmqMessaging with amqp and rabbitmq
Messaging with amqp and rabbitmq
 
Reaching 5 Million Messaging Connections: Our Journey with Kubernetes
Reaching 5 Million Messaging Connections:  Our Journey with KubernetesReaching 5 Million Messaging Connections:  Our Journey with Kubernetes
Reaching 5 Million Messaging Connections: Our Journey with Kubernetes
 
RabbitMQ + CouchDB = Awesome
RabbitMQ + CouchDB = AwesomeRabbitMQ + CouchDB = Awesome
RabbitMQ + CouchDB = Awesome
 
Swarm mode
Swarm modeSwarm mode
Swarm mode
 
RabbitMQ vs Apache Kafka Part II Webinar
RabbitMQ vs Apache Kafka Part II WebinarRabbitMQ vs Apache Kafka Part II Webinar
RabbitMQ vs Apache Kafka Part II Webinar
 
VerneMQ - Distributed MQTT Broker
VerneMQ - Distributed MQTT BrokerVerneMQ - Distributed MQTT Broker
VerneMQ - Distributed MQTT Broker
 
Top4top Showcase
Top4top ShowcaseTop4top Showcase
Top4top Showcase
 
クックパッドのLVSについて
クックパッドのLVSについてクックパッドのLVSについて
クックパッドのLVSについて
 
Mailerqnewpresentation
MailerqnewpresentationMailerqnewpresentation
Mailerqnewpresentation
 
RabbitMq
RabbitMqRabbitMq
RabbitMq
 
(BDT323) Amazon EBS & Cassandra: 1 Million Writes Per Second
(BDT323) Amazon EBS & Cassandra: 1 Million Writes Per Second(BDT323) Amazon EBS & Cassandra: 1 Million Writes Per Second
(BDT323) Amazon EBS & Cassandra: 1 Million Writes Per Second
 
My S Q L Replication Getting The Most From Slaves
My S Q L  Replication  Getting  The  Most  From  SlavesMy S Q L  Replication  Getting  The  Most  From  Slaves
My S Q L Replication Getting The Most From Slaves
 
Woo: Writing a fast web server
Woo: Writing a fast web serverWoo: Writing a fast web server
Woo: Writing a fast web server
 
Woo: Writing a fast web server @ ELS2015
Woo: Writing a fast web server @ ELS2015Woo: Writing a fast web server @ ELS2015
Woo: Writing a fast web server @ ELS2015
 
ONE Tips & Tricks
ONE Tips & Tricks ONE Tips & Tricks
ONE Tips & Tricks
 
Rabbitmq basics
Rabbitmq basicsRabbitmq basics
Rabbitmq basics
 
Network latency - measurement and improvement
Network latency - measurement and improvementNetwork latency - measurement and improvement
Network latency - measurement and improvement
 
Five Workload-to-Cloud Migration Methods
Five Workload-to-Cloud Migration MethodsFive Workload-to-Cloud Migration Methods
Five Workload-to-Cloud Migration Methods
 

Destacado

The Art of Message Queues - TEKX
The Art of Message Queues - TEKXThe Art of Message Queues - TEKX
The Art of Message Queues - TEKX
Mike Willbanks
 

Destacado (7)

Parasoft Capabilities - Features
Parasoft Capabilities - FeaturesParasoft Capabilities - Features
Parasoft Capabilities - Features
 
Message Queue (MQ) Testing
Message Queue (MQ) TestingMessage Queue (MQ) Testing
Message Queue (MQ) Testing
 
ElasticMQ: a fully asynchronous, Akka-based SQS server
ElasticMQ: a fully asynchronous, Akka-based SQS serverElasticMQ: a fully asynchronous, Akka-based SQS server
ElasticMQ: a fully asynchronous, Akka-based SQS server
 
The RabbitMQ Message Broker
The RabbitMQ Message BrokerThe RabbitMQ Message Broker
The RabbitMQ Message Broker
 
Streaming Data Ingest and Processing with Apache Kafka
Streaming Data Ingest and Processing with Apache KafkaStreaming Data Ingest and Processing with Apache Kafka
Streaming Data Ingest and Processing with Apache Kafka
 
Kafka for DBAs
Kafka for DBAsKafka for DBAs
Kafka for DBAs
 
The Art of Message Queues - TEKX
The Art of Message Queues - TEKXThe Art of Message Queues - TEKX
The Art of Message Queues - TEKX
 

Similar a Evaluating persistent, replicated message queues

Newsql 2015-150213024325-conversion-gate01
Newsql 2015-150213024325-conversion-gate01Newsql 2015-150213024325-conversion-gate01
Newsql 2015-150213024325-conversion-gate01
Jagadeesha DG
 
Spinnaker VLDB 2011
Spinnaker VLDB 2011Spinnaker VLDB 2011
Spinnaker VLDB 2011
sandeep_tata
 
NoSQL afternoon in Japan Kumofs & MessagePack
NoSQL afternoon in Japan Kumofs & MessagePackNoSQL afternoon in Japan Kumofs & MessagePack
NoSQL afternoon in Japan Kumofs & MessagePack
Sadayuki Furuhashi
 
NoSQL afternoon in Japan kumofs & MessagePack
NoSQL afternoon in Japan kumofs & MessagePackNoSQL afternoon in Japan kumofs & MessagePack
NoSQL afternoon in Japan kumofs & MessagePack
Sadayuki Furuhashi
 
apachekafka-160907180205.pdf
apachekafka-160907180205.pdfapachekafka-160907180205.pdf
apachekafka-160907180205.pdf
TarekHamdi8
 

Similar a Evaluating persistent, replicated message queues (20)

Kafka Tutorial, Kafka ecosystem with clustering examples
Kafka Tutorial, Kafka ecosystem with clustering examplesKafka Tutorial, Kafka ecosystem with clustering examples
Kafka Tutorial, Kafka ecosystem with clustering examples
 
Kafka Tutorial - introduction to the Kafka streaming platform
Kafka Tutorial - introduction to the Kafka streaming platformKafka Tutorial - introduction to the Kafka streaming platform
Kafka Tutorial - introduction to the Kafka streaming platform
 
Newsql 2015-150213024325-conversion-gate01
Newsql 2015-150213024325-conversion-gate01Newsql 2015-150213024325-conversion-gate01
Newsql 2015-150213024325-conversion-gate01
 
NewSQL overview, Feb 2015
NewSQL overview, Feb 2015NewSQL overview, Feb 2015
NewSQL overview, Feb 2015
 
Kafka Tutorial - Introduction to Apache Kafka (Part 1)
Kafka Tutorial - Introduction to Apache Kafka (Part 1)Kafka Tutorial - Introduction to Apache Kafka (Part 1)
Kafka Tutorial - Introduction to Apache Kafka (Part 1)
 
Kafka Tutorial: Streaming Data Architecture
Kafka Tutorial: Streaming Data ArchitectureKafka Tutorial: Streaming Data Architecture
Kafka Tutorial: Streaming Data Architecture
 
Messaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQMessaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQ
 
Message queues
Message queuesMessage queues
Message queues
 
kafka-tutorial-cloudruable-v2.pdf
kafka-tutorial-cloudruable-v2.pdfkafka-tutorial-cloudruable-v2.pdf
kafka-tutorial-cloudruable-v2.pdf
 
Kafka as a message queue
Kafka as a message queueKafka as a message queue
Kafka as a message queue
 
Kafka Intro With Simple Java Producer Consumers
Kafka Intro With Simple Java Producer ConsumersKafka Intro With Simple Java Producer Consumers
Kafka Intro With Simple Java Producer Consumers
 
Brief introduction to Kafka Streaming Platform
Brief introduction to Kafka Streaming PlatformBrief introduction to Kafka Streaming Platform
Brief introduction to Kafka Streaming Platform
 
Spinnaker VLDB 2011
Spinnaker VLDB 2011Spinnaker VLDB 2011
Spinnaker VLDB 2011
 
Kafka Tutorial - basics of the Kafka streaming platform
Kafka Tutorial - basics of the Kafka streaming platformKafka Tutorial - basics of the Kafka streaming platform
Kafka Tutorial - basics of the Kafka streaming platform
 
Comparing ZooKeeper and Consul
Comparing ZooKeeper and ConsulComparing ZooKeeper and Consul
Comparing ZooKeeper and Consul
 
Introduction to Kafka Streams Presentation
Introduction to Kafka Streams PresentationIntroduction to Kafka Streams Presentation
Introduction to Kafka Streams Presentation
 
NoSQL afternoon in Japan Kumofs & MessagePack
NoSQL afternoon in Japan Kumofs & MessagePackNoSQL afternoon in Japan Kumofs & MessagePack
NoSQL afternoon in Japan Kumofs & MessagePack
 
NoSQL afternoon in Japan kumofs & MessagePack
NoSQL afternoon in Japan kumofs & MessagePackNoSQL afternoon in Japan kumofs & MessagePack
NoSQL afternoon in Japan kumofs & MessagePack
 
Kafka tutorial
Kafka tutorialKafka tutorial
Kafka tutorial
 
apachekafka-160907180205.pdf
apachekafka-160907180205.pdfapachekafka-160907180205.pdf
apachekafka-160907180205.pdf
 

Más de Adam Warski

The ideal module system and the harsh reality
The ideal module system and the harsh realityThe ideal module system and the harsh reality
The ideal module system and the harsh reality
Adam Warski
 

Más de Adam Warski (8)

What have the annotations done to us?
What have the annotations done to us?What have the annotations done to us?
What have the annotations done to us?
 
Hejdyk maleńka część mazur
Hejdyk maleńka część mazurHejdyk maleńka część mazur
Hejdyk maleńka część mazur
 
Slick eventsourcing
Slick eventsourcingSlick eventsourcing
Slick eventsourcing
 
The no-framework Scala Dependency Injection Framework
The no-framework Scala Dependency Injection FrameworkThe no-framework Scala Dependency Injection Framework
The no-framework Scala Dependency Injection Framework
 
The ideal module system and the harsh reality
The ideal module system and the harsh realityThe ideal module system and the harsh reality
The ideal module system and the harsh reality
 
Recommendation systems with Mahout: introduction
Recommendation systems with Mahout: introductionRecommendation systems with Mahout: introduction
Recommendation systems with Mahout: introduction
 
Scala Macros
Scala MacrosScala Macros
Scala Macros
 
CDI Portable Extensions
CDI Portable ExtensionsCDI Portable Extensions
CDI Portable Extensions
 

Último

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
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
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
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
 
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
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - 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
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 

Evaluating persistent, replicated message queues