320 likes | 428 Views
Felix Ehm CERN BE-CO. JMS – High level messaging. Content. Introduction JMS in the Controls System Deployment and Operation Conclusion. Introduction. Introduction to JMS – The API. J ava M essaging S ervice Messaging API defined in 2002 Decouples Source and Destination
E N D
Felix EhmCERN BE-CO JMS – High level messaging
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 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 Broker
Introduction to JMS - A Broker • Many broker implementations available • ProprietaryIBM WebsphereMQ, SonicMQ, TIBCO, RedHat MRG, … • OpenSourceApache 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 • Due to intermediate Broker two hops are required Broker sends Requestor RequestMSG Replier Request Queue creates ReplyMSG sends Temporary Reply Queue
Introduction to JMS - Selectors • Filter messages from one Destination usingMessages Selectors • Each message can be enriched with Attributes • Subscriber receives filtered messages via defined selector HEADERSCYCLE=ATIME=9845 JMS Message BODY Broker selector: BUILDING ≠ A BUILDING=A Topic/Queue Subscriber BUILDING=B BUILDING=C
Introduction to JMS - Persistency • JMS defines persistent and non-persistentmessages • Broker stores message to disk before acknowledging to sender • Avoids loss of data when broker crashes • Drawbacks • Higher disk load • Slower message processing 1. send Sender 2. store 3. ack
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, …. • Today vital part of Beam Operations • Product choice: No JMS - No Beam !
JMS in the Controls System - History • History • SonicMQ since 2001 for CERN’s Alarmand CO Monitoring system • OpenSourceActiveMQ 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 ofnetwork error • Routing overhead
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 • 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 • ActiveMQwas agood 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 Consumer connects % CPU load time 40% less CPU load thanks to optimization
Broker Memory Consumption • Initial Memory is proportional to • Connections • Subscriptions 1000 Subscription / Connection 500 Subscriptions / Connection