JMS as Middleware for CERN*s ACCELERATOR CONTROL SYSTEM

advertisement
Felix Ehm
CERN BE-CO
Content

Introduction

JMS in the Controls System

Deployment and Operation

Conclusion
Introduction to JMS – The API

Java Messaging Service
 Messaging API defined in 2002
 Decouples Source and Destination
 Topic / Queue Concepts for named Destinations
Introduction to JMS – A Broker

Technology originated from the financial sector
 “Few” sources and large set of readers

A Broker is the central entity
 Accepts messages from 1..* publisher and
Broker
re-distributes to 0..* subscribers
 Provides Quality of Service for Messages
○ Persistency, Transactions, Buffering, Expiration Policies,
Slow Client Handling
 Design to distribute data reliably and scalable
 Load balancing / fail-over / embedded
deployment scenarios possible
Introduction to JMS - A Broker

Many broker implementations available
 Proprietary
IBM WebsphereMQ, SonicMQ, TIBCO, RedHat MRG, …
 OpenSource
Apache ActiveMQ, Apache Apollo, RabbitMQ, HornetMQ, …

Broker may be implemented in another language
than Java (e.g. Qpid & RabbitMQ)

Communication protocol is non-standard
 Brokers of different vendors are not interoperable
 AMQP & STOMP address this issue
Introduction to JMS - Request/Reply

“Direct communication” via Broker using
Request – Reply mechanism
Requestor
sends
creates
Broker
Request
MSG
Request Queue
Temporary Reply
Queue

Replier
Reply
MSG
sends
Due to intermediate Broker two hops are required
Introduction to JMS - Selectors

 Each message can be enriched
CYCLE=A
TIME=9845
with Attributes
 Subscriber receives filtered
messages via defined selector
Broker
BUILDING=A
BUILDING=B
BUILDING=C
Topic/
Queue
BODY
selector:
BUILDING ≠ A
Subscriber
JMS Message
Filter messages from one Destination using
Messages Selectors
HEADERS
Introduction to JMS - Persistency
JMS defines persistent and non-persistent
messages
1. send
 Broker stores message to
Sender
disk before acknowledging
2. store
3. ack
to sender

Avoids loss of data when broker crashes
 Drawbacks

 Higher disk load
 Slower message processing
CERN’s Accelerator Complex
CERN’s Accelerator Complex
JMS in the Controls System

Purpose
 Reliable transport of data between (Java) Processes
 High level controls applications + middle tier servers
○ Alarm System
○ Data Rendering Services
○ (Control) GUIs
○ Logging Services
○ Beam Security System(s)
○ Access Systems, ….
No JMS No Beam !
Today vital part of Beam Operations
 Product choice:

JMS in the Controls System - History

History
 SonicMQ since 2001 for CERN’s Alarm
and CO Monitoring system
 OpenSource ActiveMQ since 2005
○ Middle tier servers update GUIs
○ Middle tier to Middle tier
Phased out
in 2013
JMS for Accelerator Controls

Early days only Java clients via JAPC
 japc-ext-remote contains JMS communication

Today multi-language clients
 JAPC clients remain
 Java using ActiveMQ client libraries directly
 C++/Python using STOMP
Deployment and Operation
29 production brokers
 Single or broker cluster


Large spectrum of usage patterns
 from few topics to 40K topics
 from few subscribers to >23 K subscribers
 from couple msg / minute to 10K msg / sec
 from few bytes/msg to 3 Mbyte/msg
Deployment and Operation
Some numbers :
 300 Applications
 4’400 Connections
 40’000 Subscriptions
 85’000 Topics
 8 Million msg/h IN,
3.5M msg/h OUT
Archived Uptime
in 2012: 99.998%
Not all data which
is produced is also
consumed
Deployment and Operation

Distribute Load
 Interconnect two Brokers
 Consumers/Producer can
choose any Broker
 Sharing of work

Smooth Upgrades possible
 Client library version != Broker version OK

Drawbacks
 Consumer might not get all messages in case of
network error
 Routing overhead
The STOMProtocol
The STOMProtocol
Simple Text Oriented Message Protocol
 Defines messaging API + wire format
 Many open source clients libraries available

 Python, C/C++, Java, Perl, Ruby, PHP, Erlang, …
Targets the messaging interoperability among
language, platforms and brokers
 Supported by many brokers
 Very easy to use

Example to send STOMP in Python
mysocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
mysocket.connect( ("jms-co-dev", 61680) )
text = '''SEND\n\
destination:/queue/CERN.DEPLOYMENT\n\
HOST:%s\n\
INSTALLPATH:%s\n\
PRODUCT:%s\n\
TIME:%s\n\
persistent:false\n\n\x00''‘
mysocket.sendall(text)
mysocket.sendall("DISCONNECT\x00")
mysocket.close()
The AMQProtocol
The AMQProtocol
Advanced Message Queue Protocol
 Defines messaging API + wire format
 Next evolution after JMS

 Consortium of RedHat, Credit Suisse, Microsoft,
JPMorgen, Barclays, VMWare, Cisco, …

Released as Version 1.0
 More and more brokers implement it

Direction for the future ?
Conclusion

JMS is vital part of Accelerator Controls System

Performs very well for publish - subscribe scenarios

ActiveMQ was a good choice
 Running reliably
 Low maintenance and flexible deployments
 Provides many metrics for diagnostic and monitoring

Multi-language applications can use service

Central (redundant) service
Result Example
Messages received/sec over time
AVG Messages / sec

time
Result Example
Histogram of delayed message distribution
# Messages

Delay time [msec]
Result Example
Number of “late” (>300ms) messages for test
duration
Delayed Messages

time
Message Delay Summary

Measuring delayed Message
 ~ 99.32% of messages delivered < 300ms
 Rest < 1 sec

Doubling numbers of messages
(~9500 msg/sec)
 100% between 5 and 10 seconds
 Further studies for improvement needed
Result Example

CPU load
Consumer
disconnects
% CPU load
Consumer
connects
time
40% less CPU load thanks to optimization
Broker Memory Consumption

Initial Memory is proportional to
 Connections
 Subscriptions
1000 Subscription / Connection
500 Subscriptions / Connection
400
800
350
700
300
600
250
500
200
400
150
300
100
200
50
100
0
0
0
5000
10000
Heap Memory Usage
20000
30000
Live Threads
40000
0
10000
20000
Heap Memory Usage
40000
60000
Live Threads
80000
Download