From the Gaming Scalability event, June 2009 in London (http://gamingscalability.org).
Tony Garnock Jones presents RabbitMQ and talks about scaling with messaging in the clouds.
OSGi Users' Forum UK - OSGi Release 4 v4.2 Spec Overview - Peter Kriensmfrancis
Presentation by Peter Kriens to OSGi Users' Forum UK on 14th July 2009 providing an overview of key elements of the next release of the OSGi specification Release 4 v4.2.
AUTOR: JULIAN SÁNCHEZ GUTIÉRREZ
INGENIERO EN COMUNICACIONES ELÉCTRICAS Y ELECTRÓNICAS, MAESTRÍA EN CIENCIAS EN INGENIERÍA NUCLEAR Y DOCTORADO DE FILOSOFÍA EN INGENIERÍA.
Fecha: No existente
OSGi Users' Forum UK - OSGi Release 4 v4.2 Spec Overview - Peter Kriensmfrancis
Presentation by Peter Kriens to OSGi Users' Forum UK on 14th July 2009 providing an overview of key elements of the next release of the OSGi specification Release 4 v4.2.
AUTOR: JULIAN SÁNCHEZ GUTIÉRREZ
INGENIERO EN COMUNICACIONES ELÉCTRICAS Y ELECTRÓNICAS, MAESTRÍA EN CIENCIAS EN INGENIERÍA NUCLEAR Y DOCTORADO DE FILOSOFÍA EN INGENIERÍA.
Fecha: No existente
Crowdfunding für Museen – eine attraktive Finanzierungsmöglichkeit?Christian Reinboth
Vortrag zur Tagung "Den digitalen Zugang zu musealen Exponaten strukturiert und ressourceneffizient planen und gestalten: Werkzeuge, Aufwand und Kosten" des Museumsverbands Sachsen-Anhalt am 22.02.2016 an der Hochschule Harz.
The BForms open source framework consists of a collection of ASP.NET MVC HTML Helpers, Javascript AMD modules, custom CSS made with SASS that extends Twitter Bootstrap v3 and makes development of rich user interfaces easy.
hotel,restaurante,renta de autos,alberca,tours en pto escondido oaxaca.
http://hotelsurfolasaltas.blogspot.com/
http://www.directorioturisticodelacosta.com/
Réseaux sociaux d'entreprise, l'entrée dans l'ère du conversationnel - ExtraitArnaud Rayrole
L'étude s'adresse aux entreprises qui attendent un éclairage sur les usages, les solutions du marché et les points clefs pour réussir le développement de ces usages.
Cette étude de 160 pages propose un état des usages, de l'offre logicielle et des clefs pour développer les nouveaux usages liés à l'Entreprise 2.0 en interne :
• Décryptage du Social-collaboration, Social-crm, Social-KM, Social-messaging, Social-networking
• Analyse de 15 solutions du marché (Bluekiwi, Cubetree, Feedback20, Jalios, Jamespot, Jive, Knowledge Plaza, Lotus, Ning, Seemy, Sharepoint 2010, Socialtext, Talkspirit, Teamshaker, Yoolink)
Crowdfunding für Museen – eine attraktive Finanzierungsmöglichkeit?Christian Reinboth
Vortrag zur Tagung "Den digitalen Zugang zu musealen Exponaten strukturiert und ressourceneffizient planen und gestalten: Werkzeuge, Aufwand und Kosten" des Museumsverbands Sachsen-Anhalt am 22.02.2016 an der Hochschule Harz.
The BForms open source framework consists of a collection of ASP.NET MVC HTML Helpers, Javascript AMD modules, custom CSS made with SASS that extends Twitter Bootstrap v3 and makes development of rich user interfaces easy.
hotel,restaurante,renta de autos,alberca,tours en pto escondido oaxaca.
http://hotelsurfolasaltas.blogspot.com/
http://www.directorioturisticodelacosta.com/
Réseaux sociaux d'entreprise, l'entrée dans l'ère du conversationnel - ExtraitArnaud Rayrole
L'étude s'adresse aux entreprises qui attendent un éclairage sur les usages, les solutions du marché et les points clefs pour réussir le développement de ces usages.
Cette étude de 160 pages propose un état des usages, de l'offre logicielle et des clefs pour développer les nouveaux usages liés à l'Entreprise 2.0 en interne :
• Décryptage du Social-collaboration, Social-crm, Social-KM, Social-messaging, Social-networking
• Analyse de 15 solutions du marché (Bluekiwi, Cubetree, Feedback20, Jalios, Jamespot, Jive, Knowledge Plaza, Lotus, Ning, Seemy, Sharepoint 2010, Socialtext, Talkspirit, Teamshaker, Yoolink)
Source Code Management and Version Control Systems are tools for helping you track your file based assets (typically source code). Traditional SCM systems are centralised (CVS, Subversion, Visual Source Safe), Distributed version control systems systems provide new capabilities, work-flows, are becoming mature and are gaining mind share in the open source community.
Git is one of those Distributed Version Control Systems. It was invented by the creator of Linux (Linus Torvalds) for protecting the Linux kernel source code and coordinating the activity of hundreds of developers. This talk discusses what Distributed Version Control is, the history of Git, basic version control features and some very uncommon and amazing capabilities of git. Time permitting it will include live demonstration of the tools.
A comprehensive introduction to CMIS and to the existing vendors and frameworks, with focus on the Apache Chemistry works and the OpenCMIS client capabilities. Finally a demo introducing OpenCMIS integration with Spring Surf working against an Alfresco reopsitory.
Agile Testers: Becoming a key asset for your teamgojkoadzic
Slides for a presentation titled "Agile Testers: Becoming a Key Asset for your team" given at the Next Generation Testing Executive Briefing on 19 May 2010 in London
Specification by example and agile acceptance testinggojkoadzic
Specification by example and agile acceptance testing, presentation given to HSBC developers on 21/09/09 for more info see http://specificationbyexample.com
Getting business people and developers to listen to testersgojkoadzic
Presentation given at the 23rd UK Test Management forum on Wednesday 29th July 2009 about communication problems on software teams and specification workshops from a testing perspective.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
Generating a custom Ruby SDK for your web service or Rails API using Smithyg2nightmarescribd
Have you ever wanted a Ruby client API to communicate with your web service? Smithy is a protocol-agnostic language for defining services and SDKs. Smithy Ruby is an implementation of Smithy that generates a Ruby SDK using a Smithy model. In this talk, we will explore Smithy and Smithy Ruby to learn how to generate custom feature-rich SDKs that can communicate with any web service, such as a Rails JSON API.
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
4. Messaging Elements
...relaying, filtering, multicasting, forwarding, buffering,
distribution/scheduling, subscription, topics, streaming, ...
Element
Element
...
Element
Element
Element
Element
...
Thursday, 9 July 2009 4
Messaging is used to structure distributed applications. There are lots of messaging patterns
in use: for example, plain old request-response RPC; point-to-point messaging, like email or
IM; multicast messaging, like mailing lists and newsgroups; and general publish/subscribe
(essentially multicast plus filtering) and queueing (store-and-forward).
5. What is it good for?
Decoupling communication from behaviour, enabling:
• debuggability • cross-language
integration
• manageability
• fault-tolerance
• monitorability
• store-and-forward
• rolling upgrades
• ...
• load-balancing
Thursday, 9 July 2009 5
Decouples patterns of communication from the behaviour of the communicating elements
6. Messaging Elements
...relaying, filtering, multicasting, forwarding, buffering,
distribution/scheduling, subscription, topics, streaming, ...
messages
message
Element
subscribe unsubscribe
Thursday, 9 July 2009 6
One really common pattern in a messaging-based system is various incarnations of a
generalised publish/subscribe service, where messages flow in, are processed by the node,
and are forwarded on to subscribers. For example, with email mailing lists, joining the list is
a subscription, and your delivery settings - whether you want a digest or not, how frequently
you want the digest etc - are used by the mailing-list manager in making decisions about
what and how to forward incoming messages on to subscribers.
8. AMQP for Messaging
C
P X
C
P X
C
• Exchanges perform • Queues perform
relaying, copying, and buffering and round-
filtering robin delivery
Thursday, 9 July 2009 8
AMQP is a messaging protocol that’s designed to capture a lot of the common utility
elements in messaging systems. It can be seen as combining pub/sub with queueing.
[Explanation of the diagram]
9. It’s Easy
byte[] body = ...;
ch.basicPublish(exchange, routingKey, null, body);
ch.queueBind(queueName, exchange, routingKeyPattern);
QueueingConsumer consumer = new QueueingConsumer(ch);
ch.basicConsume(queueName, consumer);
while (true) {
QueueingConsumer.Delivery delivery =
consumer.nextDelivery();
// ... use delivery.getBody(), etc ...
ch.basicAck(delivery.getEnvelope().getDeliveryTag(),
false);
}
Thursday, 9 July 2009 9
10. RabbitMQ Universe
...plus new
developments like
RabbitHub, BBC
FeedsHub, Trixx, ...
Thursday, 9 July 2009 10
Naturally, since I work on RabbitMQ, I’m going to be focussing on systems built with it, but
generally a lot of the techniques for scaling out messaging work with other AMQP systems
and other kinds of messaging network.
RabbitMQ is an AMQP implementation with a server (“broker”) written in Erlang/OTP and
clients in many programming languages for many different environments. There are also
quite a few gateways to other kinds of messaging network, such as HTTP pubsub and various
flavours of XMPP.
12. Examples
• Soocial are using RabbitMQ + EC2 to
coordinate their contacts-database
synchronisation application
• The Ocean Observatories Initiative is using
RabbitMQ + relays + gateways for a global
sensing & data distribution network
Thursday, 9 July 2009 12
And of course there are many, many applications using different kinds of messaging, such as
SQS, XMPP and so forth, as well.
15. OOI – Ocean
Observatories Initiative
Service.DomainName
Region Virtual IP
Cloud IPs
Thursday, 9 July 2009 15
“Twitter for data”; applying a social networking model to applications in a very large scientific
distributed system. Messaging holds the core of the system together.
16. Nanite
• Developed by Ezra Zygmuntowicz at
Engineyard
• Presence (by pinging; we’re still working out the best way
of putting presence into RabbitMQ itself)
• Self-assembling compute fabric
• Load-balancing & recovers from failure
• An easy way of deploying to the cloud
Thursday, 9 July 2009 16
Besides those concrete applications that are using messaging in the cloud, there are also
frameworks to help you construct your own managed messaging-based cloud applications,
like Nanite, and the system that Heroku have built.
In Nanite, Agents do the work; Mappers manage directory, distribution, auto-scaling and
load-balancing
17. VPN3 (VPN-cubed)
• A secure Virtual Private Network in the
cloud
• Uses RabbitMQ as a backend for IP
multicast (!) which otherwise doesn’t work in EC2
• Uses BGP to arrange routing between
nodes
• Can meld your datacentre(s) with EC2
Thursday, 9 July 2009 17
A different kind of framework is support not for applications but for deployments of general
networks into the cloud. CohesiveFT use RabbitMQ to stitch together the different
components in their Elastic Server product, and they’ve also produced an impressive system
called VPN-cubed that among other things provides support for multicast in an Amazon EC2
environment by using RabbitMQ to distribute the multicast packets.
18. Achieving Scale
Thursday, 9 July 2009 18
Having touched on a few examples of messaging being used for cloud-based distributed
systems, I’m going to get into the technical details of approaches to achieving scale.
Most of the time the simplest of the techniques I’m about to discuss will be more than
adequate; for example, RabbitMQ on a single core can cope with several thousand messages
per second with latencies of around a millisecond. When that’s not enough, though, it’s nice
to know the options for scaling up further.
19. Paul Baran, Introduction to Distributed Communications Networks, 1964
Paul Baran’s Networks
Thursday, 9 July 2009 19
Back in the sixties, Paul Baran at the Rand Corporation performed the original, ground-
breaking research into fault-tolerant distributed systems. This diagram comes from a 1964
memo introducing the whole idea of a distributed network. I find it interesting because I see
many systems using messaging start with a centralised setup, which develops over time into
a more decentralised picture. Things can go two ways from that point: many networks
develop a scale-free aspect, becoming some hybrid of the middle and right pictures, but
some - like compute fabrics, workflow systems, and so forth - do develop into mesh-like
structures like the one on the right. So to me, reading this diagram left to right represents
the stages of scaling up a system.
20. Achieving Scale
• Capacity – throughput, latency,
responsiveness
• Synchronisation & Sharing
• Availability – uptime, data integrity
• Network Management – lots of devices,
lots of addresses, authentication &
authorisation
Thursday, 9 July 2009 20
There are lots of distinct but related ideas bundled up under the label of “scale”.
Scaling for capacity is one of the things the cloud is great for.
Once you move beyond the single, centralised broker, you often need to have some
communication between brokers.
Minimising downtime is important in many systems, and almost every system has at least a
few kinds of message that simply Must Not Get Lost, ever.
Finally, once you have a complex system, you start to need tools for cataloguing, exploring,
monitoring and debugging your network.
21. Capacity
• Service capacity: bandwidth, throughput
• Service responsiveness: latency
• Data capacity: storage
Thursday, 9 July 2009 21
Storage out-of-scope: messaging systems aren’t intended to store masses of data, but it’s
worth talking a little bit about what happens in exceptional situations where you need a
queue to act like a database temporarily while the rest of the system sorts itself out, ...
22. Simple load-balancing
Request Queue
(Private)
Reply
Queue
• Shared queue mediates • Load-balancing, live
access to service upgrades, fault-tolerance
instances
Thursday, 9 July 2009 22
Core RabbitMQ supports this pattern, and systems like Nanite provide easy-to-use
frameworks for working with it. This is often enough: frequently, it’s the service that’s the
bottleneck. But what about when the message broker itself becomes a chokepoint?
23. Clustering
Thursday, 9 July 2009 23
This is where RabbitMQ’s clustering comes in. Multiple Erlang virtual machines, all running
RabbitMQ, join together to create a giant virtual broker. Connecting clients all see the same
picture of the world: to them, it’s a single broker; the clustering is hidden away from them.
24. Clustering
Thursday, 9 July 2009 24
The nodes - Erlang VMs - in a cluster can run on separate cores within a box, or can run on
separate boxes connected over a network. Erlang’s built-in message passing is used for
communication between the nodes, and each node has a private disk-based store of its own.
Each node also listens on a separate socket of its own: at the moment, clients need to know
all the different socket addresses; DNS SRV records can be used for this.
25. Clustering
Physical
Machine
Erlang Node
Listening
Socket
Message Erlang’s inter-node
Store message routing
Virtual Host
Thursday, 9 July 2009 25
Erlang’s built-in mnesia database is used to maintain synchronisation of the routing and
filtering setup within the broker. Messages published to any node are transparently routed to
where they need to go. One important caveat is that the queues - message buffers, message
stores - in the system live on the node on which they were created, so while they’re
accessible from any other node in the cluster, their state is held only on a single node. We’re
working on improving this situation; and in the meantime, the whole problem can be made to
go away by using some of the techniques for high availability I’ll talk about in a little bit.
26. Divide and Conquer
• By record – parallelisable data lets separate
broker clusters handle separate shards of
your data
• By component – each independent part of
your application can use separate brokers;
“federation of distributed systems”
Thursday, 9 July 2009 26
Once even a clustered single broker no longer copes with the load you’re throwing at it, it’s
time to move on to the decentralised network we saw before in Paul Baran’s diagram earlier.
If your data parallelises nicely, you can shard your data, effectively running a collection of
identical systems side-by-side, each responsible for a subset of the database; and if your
application has some serial processing aspect to it, you can let each stage use a separate
broker cluster for communicating with the next stage. There’s no intrinsic requirement to
route all your messages through a single broker.
27. WAN Cluster
The WAN cluster has local
queues but global exchanges
Apps decide
which broker-
cluster to
publish to
Thursday, 9 July 2009 27
A particularly interesting multi-broker design works well when you have multiple datacentres
or multiple branch offices. A RabbitMQ WAN cluster with a node in each location can be used
to perform message routing, filtering and delivery between locations, and local clusters can
be used for within-location communication. Since queues in a RabbitMQ cluster live on the
node they are created on, you get the advantages of a distributed, WAN-scale routing setup
with the actual mailboxes holding messages intended for applications nice and close to the
applications themselves. It’s not seamless, in that applications to have to know which cluster
to talk to for each particular task, but it is simple to set up, to understand, and to use.
28. Overfeeding the server
• Message backlogs can cause catastrophe
• Goal: O(0) RAM cost per message
• Spool out to disk when memory pressure
gets high
• Testing and tuning: should land for
RabbitMQ 1.7
Thursday, 9 July 2009 28
Before I move on to talking about synchronisation and relaying, a quick word about data
storage capacity...
29. Synchronisation
When clustering might
not be right:
• huge networks
• intermittent
connectivity
• ruling bandwidth
with an iron fist
• different
administrative
domains
Thursday, 9 July 2009 29
So clustering’s fine: but in some cases, it’s not enough. [Explanation of when clustering
might not be right] [Explanation of diagram]
30. Synchronisation
Thursday, 9 July 2009 30
The important part: Don’t Create Mail Loops!
AMQP has a standard field called “cluster ID” that isn’t formally defined, but that every AMQP
broker is required to pass on. This is a really convenient place to put mail-loop-breaking
information into: keep a record of who has seen each message, to avoid forwarding it
inappropriately.
31. Ring
Pass it on to your
neighbour if your
neighbour’s name
isn’t in the list yet
Thursday, 9 July 2009 31
High latency, economical with bandwidth, poor fault-tolerance
32. Complete
Graph
Pass it on to your
neighbour if it
hasn’t been
labelled at all yet
Thursday, 9 July 2009 32
Low latency, wasteful of bandwidth, good fault-tolerance
33. Multicast
Pass it on to your
neighbour if it
hasn’t been
labelled at all yet
Thursday, 9 July 2009 33
Low latency, economical, but of course unreliable!
We’ve been getting good initial results experimenting with reliable multicast synchronisation
groups in which there are three roles: publishers, subscribers, and acknowledger-replayers.
Publishers keep retrying until an acknowledger ACKs the delivery. Subscribers are silent
unless they detect that they’ve missed a message, in which case they request it from a
replayer using a NACK. There are so many variables to explore here, we’re very much just
beginning.
34. Availability
• Broker Availability
• Application/Service Availability
• Data Availability
Thursday, 9 July 2009 34
Here’s where making the system robust in the face of failure comes in.
Broker availability – plain old clustering, or running many separate instances (warm/hot
standby)
App availability - we’ve already covered the basic idea in the “simple load balancing slide”
Data availability - not losing messages, reliable delivery (better known as responsibility
transfer), redundancy for improving the odds
35. Responsibility transfer
Consumer Broker
basic.deliver
basic.deliver
basic.deliver
...
basic.ack
Thursday, 9 July 2009 35
So to address responsibility transfer first: all that’s required is that the receiving party
acknowledge acceptance of responsibility for a received message to the sender. In AMQP,
that’s done with a “basic.ack” message, which lets the server know that the client received the
message OK and that it’s safe to delete the server’s copy.
36. Responsibility transfer
Producer Broker
basic.publish
basic.publish
basic.publish
...
tx.commit
tx.commit-ok
Thursday, 9 July 2009 36
Things are a little awkward on the publishing side with AMQP, though. The protocol isn’t
symmetric - yet! - so you have to use a transactional delivery mode. The “commit-ok”
response coming back from the server acts as the acknowledgement for the published
messages.
37. Responsibility transfer
Producer Broker Consumer
...
...
Thursday, 9 July 2009 37
Ideally, AMQP would permit this kind of situation, where the broker passes messages on to
consumers as they arrive and acknowledges them to the sender once the ultimate consumer
takes responsibility for them, but...
38. Responsibility transfer
Producer Broker Consumer
Thursday, 9 July 2009 38
... because of the grouping induced by the use of transactional mode, this is the closest you
can get by staying within the letter of the specification. The server isn’t free to pass on the
messages it’s received until it hears that transaction commit request from the publisher.
39. Redundancy for HA
Pfailure = (Ploss) n
(assuming independence)
Thursday, 9 July 2009 39
The next aspect of Availability I want to mention is the use of redundant intermediate
systems for broker availability.
The probability of total failure decreases exponentially with each independent redundant path
for data through the system. Just to illustrate that, here’s a back-of-the-envelope table; you
can see how redundant data paths really pay off very quickly.
Of course, this simple equation only applies if the probabilities of each delivery failing are
independent; usually they’ll not be completely independent. The idea is to make each delivery
path as independent as possible for maximum reliability.
40. Redundancy for HA
Pfailure = (Ploss) n
Uptime Ploss n Pfailure Overall Uptime
99% 0.01 2 0.0001 99.99%
99% 0.01 3 0.000001 99.9999%
99.9% 0.001 2 0.000001 99.9999%
99.9% 0.001 3 0.000000001 99.9999999%
(assuming independence)
Thursday, 9 July 2009 39
The next aspect of Availability I want to mention is the use of redundant intermediate
systems for broker availability.
The probability of total failure decreases exponentially with each independent redundant path
for data through the system. Just to illustrate that, here’s a back-of-the-envelope table; you
can see how redundant data paths really pay off very quickly.
Of course, this simple equation only applies if the probabilities of each delivery failing are
independent; usually they’ll not be completely independent. The idea is to make each delivery
path as independent as possible for maximum reliability.
41. Redundancy for HA
P P
One X X X X Two
broker, brokers,
two nodes one node
each each
C C
Thursday, 9 July 2009 40
With redundant paths through the broker, individual outages can be tolerated. The main
difference between the two configurations shown here is that on the right, the producer
needs to explicitly send every message to both broker instances. On the left, the built-in
RabbitMQ clustering takes care of that for you; on the other hand, the server admin tasks
involved in managing a cluster are slightly more complex than managing separate broker
instances, so there’s a tradeoff there.
At the bottom of the two pictures here, there’s a horizontal bar, representing a deduplication
filter.
42. Deduplication
(“Idempotency Barrier”)
id=123 id=123
id=123
id=123
many messages one message
enter leaves
Thursday, 9 July 2009 41
The basic idea here is ...
Need a predicate for determining message identity: a simple, workable solution is to attach
UUIDs to messages, but sometimes hashing (e.g. SHA-1) the content is a good solution
Fault tolerance, but also exactly-once delivery: the server is free to redeliver previously-
attempted messages in certain circumstances, and a deduplication filter can be used to keep
things sane for the message receivers.
(((Needs a memory of what it’s seen. Can expire things: keep them for the duration of the
longest *automatically-recovered* service outage you want to support, plus a bit. So long as
longer outages are manually-recovered, the queues can be purged and the system monitored
to ensure that nothing’s lost or duplicated.)))
43. Network Management
• Small systems can be managed by hand
• Large systems need automation:
• Naming & address management
• Service directories
• Authentication & authorization
• Logging, monitoring & alerting
Thursday, 9 July 2009 42
Finally, a few words about management and monitoring of large networks.
Large systems: e.g. the internet itself, the cellular network (all those iPhones!), auto-scaling
systems running in the cloud
Messaging can be applied to management and monitoring tasks just as well as to application
tasks. Brokers can provide rich support for all these tasks; systems like Nanite, which uses
RabbitMQ for managing agents as well as letting them communicate, are helping to discover
and define the kinds of things that can be moved into the broker in these areas.
44. The Future
Thursday, 9 July 2009 43
We’re working on making it as easy as possible to use the design patterns I’ve been talking
about. In particular, solid support for synchronising relays, for gateway plugins, and for
deduplication (in support of redundancy-for-HA and so forth) is high on our to-do list.
People are already building things around RabbitMQ and making it easy to deploy in the
cloud; I’m looking forward to seeing what people do with it.
45. Questions?
http://www.rabbitmq.com/how
Thursday, 9 July 2009 44