SlideShare a Scribd company logo
1 of 39
Download to read offline
Large-scale Messaging at IMVU,[object Object],Jon Watte,[object Object],Technical Director, IMVU Inc,[object Object],@jwatte,[object Object]
Presentation Overview,[object Object],Describe the problem,[object Object],Low-latency game messaging and state distribution,[object Object],Survey available solutions,[object Object],Quick mention of also-rans,[object Object],Dive into implementation,[object Object],Erlang!,[object Object],Discuss gotchas,[object Object],Speculate about the future,[object Object]
From Chat to Games,[object Object]
Context,[object Object],Caching,[object Object],Web Servers,[object Object],HTTP,[object Object],Load Balancers,[object Object],Databases,[object Object],Caching,[object Object],Long Poll,[object Object],Load Balancers,[object Object],Game Servers,[object Object],HTTP,[object Object]
What Do We Want?,[object Object],Any-to-any messaging with ad-hoc structure,[object Object],Chat; Events; Input/Control,[object Object],Lightweight (in-RAM) state maintenance,[object Object],Scores; Dice; Equipment,[object Object]
New Building Blocks,[object Object],Queues provide a sane view of distributed state for developers building games,[object Object],Two kinds of messaging:,[object Object],Events (edge triggered, “messages”),[object Object],State (level triggered, “updates”),[object Object],Integrated into a bigger system,[object Object]
From Long-poll to Real-time,[object Object],Caching,[object Object],Web Servers,[object Object],Load Balancers,[object Object],Databases,[object Object],Caching,[object Object],Long Poll,[object Object],Load Balancers,[object Object],Game Servers,[object Object],Connection Gateways,[object Object],Message Queues,[object Object],Today’s Talk,[object Object]
Functions,[object Object],Game Server,[object Object],HTTP,[object Object],Validation users/requests,[object Object],Notification,[object Object],Client,[object Object],Connect,[object Object],Listen message/state/user,[object Object],Send message/state,[object Object],Create/delete ,[object Object],   queue/mount,[object Object],Join/remove user,[object Object],Send message/state,[object Object],Queue,[object Object]
Performance Requirements,[object Object],Simultaneous user count:,[object Object],80,000 when we started,[object Object],150,000 today,[object Object],1,000,000 design goal,[object Object],Real-time performance (the main driving requirement),[object Object],Lower than 100ms end-to-end through the system,[object Object],Queue creates and join/leaves (kill a lot of contenders),[object Object],>500,000 creates/day when started,[object Object],>20,000,000 creates/day design goal,[object Object]
Also-rans: Existing Wheels,[object Object],AMQP, JMS: Qpid, Rabbit, ZeroMQ, BEA, IBM etc,[object Object],Poor user and authentication model,[object Object],Expensive queues,[object Object],IRC,[object Object],Spanning Tree; Netsplits; no state,[object Object],XMPP / Jabber,[object Object],Protocol doesn’t scale in federation,[object Object],Gtalk, AIM, MSN Msgr, Yahoo Msgr,[object Object],If only we could buy one of these!,[object Object]
Our Wheel is Rounder!,[object Object],Inspired by the 1,000,000-user mochiweb app,[object Object],http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-1,[object Object],A purpose-built general system,[object Object],Written in Erlang,[object Object]
Section: Implementation,[object Object],Journey of a message,[object Object],Anatomy of a queue,[object Object],Scaling across machines,[object Object],Erlang,[object Object]
The Journey of a Message,[object Object]
Queue Node,[object Object],Gateway,[object Object],The Journey of a Message,[object Object],Gateway for User,[object Object],Queue Node,[object Object],Queue Process,[object Object],Message in Queue: /room/123,[object Object],Mount: chat,[object Object],Data: Hello, World!,[object Object],Find node for /room/123,[object Object],Find queue /room/123,[object Object],List of subscribers,[object Object],Gateway,[object Object],Validation,[object Object],Gateway,[object Object],Gateway for User,[object Object],Forward message,[object Object]
Anatomy of a Queue,[object Object],Queue Name: /room/123,[object Object],Mount,[object Object],Type: message,[object Object],Name: chat,[object Object],User A: I win.,[object Object],User B: OMG Pwnies!,[object Object],User A: Take that!,[object Object],…,[object Object],Subscriber List,[object Object],User A @ Gateway C,[object Object],User B @ Gateway B,[object Object],Mount,[object Object],Type: state,[object Object],Name: scores,[object Object],User A: 3220 ,[object Object],User B: 1200,[object Object]
A Single Machine Isn’t Enough,[object Object],1,000,000 users, 1 machine?,[object Object],25 GB/s memory bus,[object Object],40 GB memory (40 kB/user),[object Object],Touched twice per message,[object Object],one message per is 3,400 ms,[object Object]
Scale Across Machines,[object Object],Gateway,[object Object],Queues,[object Object],Gateway,[object Object],Queues,[object Object],Internet,[object Object],Gateway,[object Object],Queues,[object Object],Consistent Hashing,[object Object],Gateway,[object Object],Queues,[object Object]
Consistent Hashing,[object Object],The Gateway maps queue name -> node,[object Object],This is done using a fixed hash function,[object Object],A prefix of the output bits of the hash function is used as a look-up into a table, with a minimum of 8 buckets per node,[object Object],Load differential is 8:9 or better (down to 15:16),[object Object],Updating the map of buckets -> nodes is managed centrally,[object Object],Hash(“/room/123”) = 0xaf5…,[object Object],Node A,[object Object],Node B,[object Object],Node C,[object Object],Node D,[object Object],Node E,[object Object],Node F,[object Object]
Consistent Hash Table Update,[object Object],Minimizes amount of traffic moved,[object Object],If nodes have more than 8 buckets, steal 1/N of all buckets from those with the most and assign to new target,[object Object],If not, split each bucket, then steal 1/N of all buckets and assign to new target,[object Object]
Erlang,[object Object],Developed in ‘80s by Ericsson for phone switches,[object Object],Reliability, scalability, and communications,[object Object],Prolog-based functional syntax (no braces!),[object Object],25% the code of equivalent C++,[object Object],Parallel Communicating Processes,[object Object],Erlang processes much cheaper than C++ threads,[object Object],(Almost) No Mutable Data,[object Object],No data race conditions,[object Object],Each process separately garbage collected,[object Object]
Example Erlang Process,[object Object],% spawn process,[object Object],MyCounter = spawn(my_module, counter, [0]).,[object Object],% increment counter,[object Object],MyCounter! {add, 1}.,[object Object],% get valueMyCounter! {get, self()};,[object Object],receive,[object Object],    {value, MyCounter, Value} ->           Value,[object Object],end.,[object Object],% stop processMyCounter! stop.,[object Object],counter(stop) ->  stopped;,[object Object],counter(Value) ->NextValue = receive    {get, Pid} ->Pid! {value, self(), Value},          Value;    {add, Delta} ->          Value + Delta;    stop ->           stop;    _ ->          Valueend,  counter(NextValue).  % tail recursion,[object Object]
Section: Details,[object Object],Load Management,[object Object],Marshalling,[object Object],RPC / Call-outs,[object Object],Hot Adds and Fail-over,[object Object],The Boss!,[object Object],Monitoring,[object Object]
Load Management,[object Object],Gateway,[object Object],Queues,[object Object],Internet,[object Object],Gateway,[object Object],Queues,[object Object],HAProxy,[object Object],HAProxy,[object Object],Gateway,[object Object],Queues,[object Object],Consistent Hashing,[object Object],Gateway,[object Object],Queues,[object Object]
Marshalling,[object Object],message MsgG2cResult {,[object Object],    required uint32 op_id = 1;,[object Object],    required uint32 status = 2;,[object Object],    optional string error_message = 3;,[object Object],},[object Object]
RPC,[object Object],Web Server,[object Object],PHP,[object Object],HTTP + JSON,[object Object],admin,[object Object],Gateway,[object Object],Message Queue,[object Object],Erlang,[object Object]
Call-outs,[object Object],Web Server,[object Object],PHP,[object Object],HTTP + JSON,[object Object],Message Queue,[object Object],Gateway,[object Object],Erlang,[object Object],Mount,[object Object],Credentials,[object Object],Rules,[object Object]
Management,[object Object],Gateway,[object Object],Queues,[object Object],The Boss,[object Object],Gateway,[object Object],Queues,[object Object],Gateway,[object Object],Queues,[object Object],Consistent Hashing,[object Object],Gateway,[object Object],Queues,[object Object]
Monitoring,[object Object],Example counters:,[object Object],Number of connected users,[object Object],Number of queues,[object Object],Messages routed per second,[object Object],Round trip time for routed messages,[object Object],Distributed clock work-around!,[object Object],Disconnects and other error events,[object Object]
Hot Add Node,[object Object]
Section: Problem Cases,[object Object],User goes silent,[object Object],Second user connection,[object Object],Node crashes,[object Object],Gateway crashes,[object Object],Reliable messages,[object Object],Firewalls,[object Object],Build and test,[object Object]
User Goes Silent,[object Object],Some TCP connections will stop(bad WiFi, firewalls, etc),[object Object],We use a ping message,[object Object],Both ends separately detect ping failure,[object Object],This means one end detects it before the other,[object Object]
Second User Connection,[object Object],Currently connected usermakes a new connection,[object Object],To another gateway because of load balancing,[object Object],Auser-specific queue arbitrates,[object Object],Queues are serializedthere is always a winner,[object Object]
State is ephemeralit’s lost when machine is lost,[object Object],A user “management queue”contains all subscription state,[object Object],If the home queue node dies, the user is logged out,[object Object],If a queue the user is subscribed to dies, the user is auto-unsubscribed (client has to deal),[object Object],Node Crashes,[object Object]
Gateway Crashes,[object Object],When a gateway crashesclient will reconnect,[object Object],Historyallow us to avoid re-sending for quick reconnects,[object Object],The application above the queue API doesn’t notice,[object Object],Erlang message send does not report error,[object Object],Monitor nodes to remove stale listeners,[object Object]
Reliable Messages,[object Object],“If the user isn’t logged in, deliver the next log-in.”,[object Object],Hidden at application server API level, stored in database,[object Object],Return “not logged in”,[object Object],Signal to store message in database,[object Object],Hook logged-in call-out,[object Object],Re-check the logged in state after storing to database (avoids a race),[object Object]
Firewalls,[object Object],HTTP long-poll has one main strength:,[object Object],It works if your browser works,[object Object],Message Queue uses a different protocol,[object Object],We still use ports 80 (“HTTP”) and 443 (“HTTPS”),[object Object],This makes us horriblepeople,[object Object],We try a configured proxy with CONNECT,[object Object],We reach >99% of existing customers,[object Object],Future improvement: HTTP Upgrade/101,[object Object]
Build and Test,[object Object],Continuous Integration and Continuous Deployment,[object Object],Had to build our own systems,[object Object],ErlangIn-place Code Upgrades,[object Object],Too heavy, designed for “6 month” upgrade cycles,[object Object],Use fail-over instead (similar to Apache graceful),[object Object],Load testing at scale,[object Object],“Dark launch” to existing users,[object Object]
Section: Future,[object Object],Replication,[object Object],Similar to fail-over,[object Object],Limits of Scalability (?),[object Object],M x N (Gateways x Queues) stops at some point,[object Object],Open Source,[object Object],We would like to open-source what we can,[object Object],Protobuf for PHP and Erlang?,[object Object],IMQ core? (not surrounding application server),[object Object]
Q&A,[object Object],Survey,[object Object],If you found this helpful, please circle “Excellent”,[object Object],If this sucked, don’t circle “Excellent”,[object Object],Questions?,[object Object],@jwatte,[object Object],jwatte@imvu.com,[object Object],IMVU is a great place to work, and we’re hiring!,[object Object]

More Related Content

What's hot

Copy of Kafka-Camus
Copy of Kafka-CamusCopy of Kafka-Camus
Copy of Kafka-CamusDeep Shah
 
Troubleshooting Kafka's socket server: from incident to resolution
Troubleshooting Kafka's socket server: from incident to resolutionTroubleshooting Kafka's socket server: from incident to resolution
Troubleshooting Kafka's socket server: from incident to resolutionJoel Koshy
 
Lessons from managing a Pulsar cluster (Nutanix)
Lessons from managing a Pulsar cluster (Nutanix)Lessons from managing a Pulsar cluster (Nutanix)
Lessons from managing a Pulsar cluster (Nutanix)StreamNative
 
RedisConf18 - Writing modular & encapsulated Redis code
RedisConf18 - Writing modular & encapsulated Redis codeRedisConf18 - Writing modular & encapsulated Redis code
RedisConf18 - Writing modular & encapsulated Redis codeRedis Labs
 
A la rencontre de Kafka, le log distribué par Florian GARCIA
A la rencontre de Kafka, le log distribué par Florian GARCIAA la rencontre de Kafka, le log distribué par Florian GARCIA
A la rencontre de Kafka, le log distribué par Florian GARCIALa Cuisine du Web
 
Hadoop engineering bo_f_final
Hadoop engineering bo_f_finalHadoop engineering bo_f_final
Hadoop engineering bo_f_finalRamya Sunil
 
12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQL12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQLKonstantin Gredeskoul
 
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013mumrah
 
Kafka Security 101 and Real-World Tips
Kafka Security 101 and Real-World Tips Kafka Security 101 and Real-World Tips
Kafka Security 101 and Real-World Tips confluent
 
Pulsar Storage on BookKeeper _Seamless Evolution
Pulsar Storage on BookKeeper _Seamless EvolutionPulsar Storage on BookKeeper _Seamless Evolution
Pulsar Storage on BookKeeper _Seamless EvolutionStreamNative
 
Realtime classroom analytics powered by apache druid
Realtime classroom analytics powered by apache druid Realtime classroom analytics powered by apache druid
Realtime classroom analytics powered by apache druid Karthik Deivasigamani
 
Streaming millions of Contact Center interactions in (near) real-time with Pu...
Streaming millions of Contact Center interactions in (near) real-time with Pu...Streaming millions of Contact Center interactions in (near) real-time with Pu...
Streaming millions of Contact Center interactions in (near) real-time with Pu...Frank Kelly
 
Introducing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pu...
Introducing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pu...Introducing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pu...
Introducing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pu...StreamNative
 
The Easiest Way to Configure Security for Clients AND Servers (Dani Traphagen...
The Easiest Way to Configure Security for Clients AND Servers (Dani Traphagen...The Easiest Way to Configure Security for Clients AND Servers (Dani Traphagen...
The Easiest Way to Configure Security for Clients AND Servers (Dani Traphagen...confluent
 
Pulsar Summit Asia - Running a secure pulsar cluster
Pulsar Summit Asia -  Running a secure pulsar clusterPulsar Summit Asia -  Running a secure pulsar cluster
Pulsar Summit Asia - Running a secure pulsar clusterShivji Kumar Jha
 
Tool Academy: Web Archiving
Tool Academy: Web ArchivingTool Academy: Web Archiving
Tool Academy: Web Archivingnullhandle
 
HadoopCon2015 Multi-Cluster Live Synchronization with Kerberos Federated Hadoop
HadoopCon2015 Multi-Cluster Live Synchronization with Kerberos Federated HadoopHadoopCon2015 Multi-Cluster Live Synchronization with Kerberos Federated Hadoop
HadoopCon2015 Multi-Cluster Live Synchronization with Kerberos Federated HadoopYafang Chang
 
Zoo keeper in the wild
Zoo keeper in the wildZoo keeper in the wild
Zoo keeper in the wilddatamantra
 
Large scale near real-time log indexing with Flume and SolrCloud
Large scale near real-time log indexing with Flume and SolrCloudLarge scale near real-time log indexing with Flume and SolrCloud
Large scale near real-time log indexing with Flume and SolrCloudDataWorks Summit
 
Comparing high availability solutions with percona xtradb cluster and percona...
Comparing high availability solutions with percona xtradb cluster and percona...Comparing high availability solutions with percona xtradb cluster and percona...
Comparing high availability solutions with percona xtradb cluster and percona...Marco Tusa
 

What's hot (20)

Copy of Kafka-Camus
Copy of Kafka-CamusCopy of Kafka-Camus
Copy of Kafka-Camus
 
Troubleshooting Kafka's socket server: from incident to resolution
Troubleshooting Kafka's socket server: from incident to resolutionTroubleshooting Kafka's socket server: from incident to resolution
Troubleshooting Kafka's socket server: from incident to resolution
 
Lessons from managing a Pulsar cluster (Nutanix)
Lessons from managing a Pulsar cluster (Nutanix)Lessons from managing a Pulsar cluster (Nutanix)
Lessons from managing a Pulsar cluster (Nutanix)
 
RedisConf18 - Writing modular & encapsulated Redis code
RedisConf18 - Writing modular & encapsulated Redis codeRedisConf18 - Writing modular & encapsulated Redis code
RedisConf18 - Writing modular & encapsulated Redis code
 
A la rencontre de Kafka, le log distribué par Florian GARCIA
A la rencontre de Kafka, le log distribué par Florian GARCIAA la rencontre de Kafka, le log distribué par Florian GARCIA
A la rencontre de Kafka, le log distribué par Florian GARCIA
 
Hadoop engineering bo_f_final
Hadoop engineering bo_f_finalHadoop engineering bo_f_final
Hadoop engineering bo_f_final
 
12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQL12-Step Program for Scaling Web Applications on PostgreSQL
12-Step Program for Scaling Web Applications on PostgreSQL
 
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
 
Kafka Security 101 and Real-World Tips
Kafka Security 101 and Real-World Tips Kafka Security 101 and Real-World Tips
Kafka Security 101 and Real-World Tips
 
Pulsar Storage on BookKeeper _Seamless Evolution
Pulsar Storage on BookKeeper _Seamless EvolutionPulsar Storage on BookKeeper _Seamless Evolution
Pulsar Storage on BookKeeper _Seamless Evolution
 
Realtime classroom analytics powered by apache druid
Realtime classroom analytics powered by apache druid Realtime classroom analytics powered by apache druid
Realtime classroom analytics powered by apache druid
 
Streaming millions of Contact Center interactions in (near) real-time with Pu...
Streaming millions of Contact Center interactions in (near) real-time with Pu...Streaming millions of Contact Center interactions in (near) real-time with Pu...
Streaming millions of Contact Center interactions in (near) real-time with Pu...
 
Introducing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pu...
Introducing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pu...Introducing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pu...
Introducing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pu...
 
The Easiest Way to Configure Security for Clients AND Servers (Dani Traphagen...
The Easiest Way to Configure Security for Clients AND Servers (Dani Traphagen...The Easiest Way to Configure Security for Clients AND Servers (Dani Traphagen...
The Easiest Way to Configure Security for Clients AND Servers (Dani Traphagen...
 
Pulsar Summit Asia - Running a secure pulsar cluster
Pulsar Summit Asia -  Running a secure pulsar clusterPulsar Summit Asia -  Running a secure pulsar cluster
Pulsar Summit Asia - Running a secure pulsar cluster
 
Tool Academy: Web Archiving
Tool Academy: Web ArchivingTool Academy: Web Archiving
Tool Academy: Web Archiving
 
HadoopCon2015 Multi-Cluster Live Synchronization with Kerberos Federated Hadoop
HadoopCon2015 Multi-Cluster Live Synchronization with Kerberos Federated HadoopHadoopCon2015 Multi-Cluster Live Synchronization with Kerberos Federated Hadoop
HadoopCon2015 Multi-Cluster Live Synchronization with Kerberos Federated Hadoop
 
Zoo keeper in the wild
Zoo keeper in the wildZoo keeper in the wild
Zoo keeper in the wild
 
Large scale near real-time log indexing with Flume and SolrCloud
Large scale near real-time log indexing with Flume and SolrCloudLarge scale near real-time log indexing with Flume and SolrCloud
Large scale near real-time log indexing with Flume and SolrCloud
 
Comparing high availability solutions with percona xtradb cluster and percona...
Comparing high availability solutions with percona xtradb cluster and percona...Comparing high availability solutions with percona xtradb cluster and percona...
Comparing high availability solutions with percona xtradb cluster and percona...
 

Similar to Message Queuing on a Large Scale: IMVUs stateful real-time message queue for chat and games

The experiences of migrating a large scale, high performance healthcare network
The experiences of migrating a large scale, high performance healthcare networkThe experiences of migrating a large scale, high performance healthcare network
The experiences of migrating a large scale, high performance healthcare networkgeorge.james
 
Network Programming in Java
Network Programming in JavaNetwork Programming in Java
Network Programming in JavaTushar B Kute
 
Network and distributed systems
Network and distributed systemsNetwork and distributed systems
Network and distributed systemsSri Prasanna
 
Network programming in Java
Network programming in JavaNetwork programming in Java
Network programming in JavaTushar B Kute
 
Interoperable Web Services with JAX-WS and WSIT
Interoperable Web Services with JAX-WS and WSITInteroperable Web Services with JAX-WS and WSIT
Interoperable Web Services with JAX-WS and WSITCarol McDonald
 
WebCamp 2016: PHP.Алексей Петров.PHP at Scale: System Architect Toolbox
WebCamp 2016: PHP.Алексей Петров.PHP at Scale: System Architect ToolboxWebCamp 2016: PHP.Алексей Петров.PHP at Scale: System Architect Toolbox
WebCamp 2016: PHP.Алексей Петров.PHP at Scale: System Architect ToolboxWebCamp
 
Network programming in Java
Network programming in JavaNetwork programming in Java
Network programming in JavaTushar B Kute
 
Network visibility and control using industry standard sFlow telemetry
Network visibility and control using industry standard sFlow telemetryNetwork visibility and control using industry standard sFlow telemetry
Network visibility and control using industry standard sFlow telemetrypphaal
 
21. Application Development and Administration in DBMS
21. Application Development and Administration in DBMS21. Application Development and Administration in DBMS
21. Application Development and Administration in DBMSkoolkampus
 
Проксирование HTTP-запросов web-акселератором / Александр Крижановский (Tempe...
Проксирование HTTP-запросов web-акселератором / Александр Крижановский (Tempe...Проксирование HTTP-запросов web-акселератором / Александр Крижановский (Tempe...
Проксирование HTTP-запросов web-акселератором / Александр Крижановский (Tempe...Ontico
 
When Web Services Go Bad
When Web Services Go BadWhen Web Services Go Bad
When Web Services Go BadSteve Loughran
 
The experiences of migrating a large scale, high performance healthcare network
The experiences of migrating a large scale, high performance healthcare networkThe experiences of migrating a large scale, high performance healthcare network
The experiences of migrating a large scale, high performance healthcare networkgeorge.james
 
Taking Spark Streaming to the Next Level with Datasets and DataFrames
Taking Spark Streaming to the Next Level with Datasets and DataFramesTaking Spark Streaming to the Next Level with Datasets and DataFrames
Taking Spark Streaming to the Next Level with Datasets and DataFramesDatabricks
 
Building Continuous Application with Structured Streaming and Real-Time Data ...
Building Continuous Application with Structured Streaming and Real-Time Data ...Building Continuous Application with Structured Streaming and Real-Time Data ...
Building Continuous Application with Structured Streaming and Real-Time Data ...Databricks
 
Taking a Quantum Leap with Html 5 WebSocket
Taking a Quantum Leap with Html 5 WebSocketTaking a Quantum Leap with Html 5 WebSocket
Taking a Quantum Leap with Html 5 WebSocketShahriar Hyder
 
Don't call us - we'll push - cross tier push architecture (JavaOne 2011)
Don't call us - we'll push - cross tier push architecture (JavaOne 2011)Don't call us - we'll push - cross tier push architecture (JavaOne 2011)
Don't call us - we'll push - cross tier push architecture (JavaOne 2011)Lucas Jellema
 

Similar to Message Queuing on a Large Scale: IMVUs stateful real-time message queue for chat and games (20)

The experiences of migrating a large scale, high performance healthcare network
The experiences of migrating a large scale, high performance healthcare networkThe experiences of migrating a large scale, high performance healthcare network
The experiences of migrating a large scale, high performance healthcare network
 
Real-time ASP.NET with SignalR
Real-time ASP.NET with SignalRReal-time ASP.NET with SignalR
Real-time ASP.NET with SignalR
 
Network Programming in Java
Network Programming in JavaNetwork Programming in Java
Network Programming in Java
 
Network and distributed systems
Network and distributed systemsNetwork and distributed systems
Network and distributed systems
 
Network programming in Java
Network programming in JavaNetwork programming in Java
Network programming in Java
 
Velocity 2010 - ATS
Velocity 2010 - ATSVelocity 2010 - ATS
Velocity 2010 - ATS
 
Interoperable Web Services with JAX-WS and WSIT
Interoperable Web Services with JAX-WS and WSITInteroperable Web Services with JAX-WS and WSIT
Interoperable Web Services with JAX-WS and WSIT
 
Thaker q3 2008
Thaker q3 2008Thaker q3 2008
Thaker q3 2008
 
WebCamp 2016: PHP.Алексей Петров.PHP at Scale: System Architect Toolbox
WebCamp 2016: PHP.Алексей Петров.PHP at Scale: System Architect ToolboxWebCamp 2016: PHP.Алексей Петров.PHP at Scale: System Architect Toolbox
WebCamp 2016: PHP.Алексей Петров.PHP at Scale: System Architect Toolbox
 
Network programming in Java
Network programming in JavaNetwork programming in Java
Network programming in Java
 
Network visibility and control using industry standard sFlow telemetry
Network visibility and control using industry standard sFlow telemetryNetwork visibility and control using industry standard sFlow telemetry
Network visibility and control using industry standard sFlow telemetry
 
21. Application Development and Administration in DBMS
21. Application Development and Administration in DBMS21. Application Development and Administration in DBMS
21. Application Development and Administration in DBMS
 
Проксирование HTTP-запросов web-акселератором / Александр Крижановский (Tempe...
Проксирование HTTP-запросов web-акселератором / Александр Крижановский (Tempe...Проксирование HTTP-запросов web-акселератором / Александр Крижановский (Tempe...
Проксирование HTTP-запросов web-акселератором / Александр Крижановский (Tempe...
 
Introduction To Cloud Computing
Introduction To Cloud ComputingIntroduction To Cloud Computing
Introduction To Cloud Computing
 
When Web Services Go Bad
When Web Services Go BadWhen Web Services Go Bad
When Web Services Go Bad
 
The experiences of migrating a large scale, high performance healthcare network
The experiences of migrating a large scale, high performance healthcare networkThe experiences of migrating a large scale, high performance healthcare network
The experiences of migrating a large scale, high performance healthcare network
 
Taking Spark Streaming to the Next Level with Datasets and DataFrames
Taking Spark Streaming to the Next Level with Datasets and DataFramesTaking Spark Streaming to the Next Level with Datasets and DataFrames
Taking Spark Streaming to the Next Level with Datasets and DataFrames
 
Building Continuous Application with Structured Streaming and Real-Time Data ...
Building Continuous Application with Structured Streaming and Real-Time Data ...Building Continuous Application with Structured Streaming and Real-Time Data ...
Building Continuous Application with Structured Streaming and Real-Time Data ...
 
Taking a Quantum Leap with Html 5 WebSocket
Taking a Quantum Leap with Html 5 WebSocketTaking a Quantum Leap with Html 5 WebSocket
Taking a Quantum Leap with Html 5 WebSocket
 
Don't call us - we'll push - cross tier push architecture (JavaOne 2011)
Don't call us - we'll push - cross tier push architecture (JavaOne 2011)Don't call us - we'll push - cross tier push architecture (JavaOne 2011)
Don't call us - we'll push - cross tier push architecture (JavaOne 2011)
 

Recently uploaded

KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostMatt Ray
 
Things you didn't know you can use in your Salesforce
Things you didn't know you can use in your SalesforceThings you didn't know you can use in your Salesforce
Things you didn't know you can use in your SalesforceMartin Humpolec
 
Cloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial DataCloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial DataSafe Software
 
RAG Patterns and Vector Search in Generative AI
RAG Patterns and Vector Search in Generative AIRAG Patterns and Vector Search in Generative AI
RAG Patterns and Vector Search in Generative AIUdaiappa Ramachandran
 
Cybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxCybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxGDSC PJATK
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...DianaGray10
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdfPedro Manuel
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024SkyPlanner
 
Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?SANGHEE SHIN
 
Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioChristian Posta
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URLRuncy Oommen
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemAsko Soukka
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPathCommunity
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaborationbruanjhuli
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsSeth Reyes
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfDaniel Santiago Silva Capera
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.YounusS2
 

Recently uploaded (20)

KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
 
Things you didn't know you can use in your Salesforce
Things you didn't know you can use in your SalesforceThings you didn't know you can use in your Salesforce
Things you didn't know you can use in your Salesforce
 
Cloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial DataCloud Revolution: Exploring the New Wave of Serverless Spatial Data
Cloud Revolution: Exploring the New Wave of Serverless Spatial Data
 
RAG Patterns and Vector Search in Generative AI
RAG Patterns and Vector Search in Generative AIRAG Patterns and Vector Search in Generative AI
RAG Patterns and Vector Search in Generative AI
 
Cybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxCybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptx
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdf
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024
 
Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?Do we need a new standard for visualizing the invisible?
Do we need a new standard for visualizing the invisible?
 
Comparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and IstioComparing Sidecar-less Service Mesh from Cilium and Istio
Comparing Sidecar-less Service Mesh from Cilium and Istio
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URL
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystem
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation Developers
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and Hazards
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.
 

Message Queuing on a Large Scale: IMVUs stateful real-time message queue for chat and games

  • 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.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.