33
Monitoring and Feature Toggle Pattern with JMX Bruno Bonfils Cyrille Le Clerc 15/06/2011 Thursday, June 16, 2011

Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Embed Size (px)

DESCRIPTION

Monitoring and Feature Toggle Pattern with JMX @ Paris Devops Meetup

Citation preview

Page 1: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Monitoring and Feature Toggle Pattern

with JMX

Bruno Bonfils Cyrille Le Clerc 15/06/2011

Thursday, June 16, 2011

Page 2: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Speaker

2

Cyrille Le Clerc

@cyrilleleclerc

blog.xebia.fr

Open Source (Apache CXF, ...)

In Memory Data Grid

Large Scale

“you build it, you run it”

Thursday, June 16, 2011

Page 3: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

The use case

3Thursday, June 16, 2011

Page 4: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

The Use Case

4

Corporate Data Center

travel-ecommerce

Tomcat

Credit Card Service

travel-ecommerce

Tomcat

anti-fraud

Tomcat

anti-fraud

Tomcat

Travel e-commerce application

Thursday, June 16, 2011

Page 5: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

The Use Case

xebia-spring-travel source code▶ http://xebia-france.googlecode.com/svn/training/xebia-spring-travel/tags/xebia-spring-travel-1.0.0/

▶Groovy JMX scripts» http://xebia-france.googlecode.com/svn/training/xebia-spring-travel/tags/xebia-spring-travel-1.0.0/xebia-spring-travel-

ecommerce/src/main/scripts/

▶ JMXTrans Configuration» http://xebia-france.googlecode.com/svn/training/xebia-spring-travel/tags/xebia-spring-travel-1.0.0/xebia-spring-travel-

ecommerce/src/main/jmxtrans/

▶ JMeter plan» http://xebia-france.googlecode.com/svn/training/xebia-spring-travel/tags/xebia-spring-travel-1.0.0/xebia-spring-travel-

ecommerce/src/main/jmeter/

xebia-management-extras JMX library▶ http://code.google.com/p/xebia-france/wiki/XebiaManagementExtras

5Thursday, June 16, 2011

Page 6: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Part 1Monitoring with JMX

6Thursday, June 16, 2011

Page 7: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Simplified Use Case

7Thursday, June 16, 2011

Page 8: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Simplified Use Case

8

Monitoring Booking and Credit Card Service

Corporate Data Center

travel-ecommerce

Tomcat

Credit Card ServiceMock

Thursday, June 16, 2011

Page 9: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Simplified Use Case

9

Monitoring Booking and Credit Card Service

Corporate Data Center

travel-ecommerce

Tomcat

Credit Card ServiceMock

Thursday, June 16, 2011

Page 10: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Custom/business indicator monitoringwith JMX

10Thursday, June 16, 2011

Page 11: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Custom Indicator Monitoring with JMX

11

CreditCardService MonitoringImpl

#purchase()

CreditCardServiceImpl

#purchase()

CreditCardService

#purchase()

monitoring logic isolated with a delegate pattern

Thursday, June 16, 2011

Page 12: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Custom Indicator Monitoring with JMX

12

@ManagedResourcepublic class CreditCardServiceMonitoringImpl implements CreditCardService {

// delegate private CreditCardService creditCardService; // counters private final AtomicInteger purchaseInvocationCounter = new AtomicInteger(); private final AtomicLong purchaseInvocationDurationInNanosCounter = new AtomicLong(); private final AtomicInteger threeDSecureVerificationExceptionCounter = new AtomicInteger();

@Override public PaymentTransaction purchase(MonetaryAmount total, Order order, String requestId) { long nanosBefore = System.nanoTime();

try { return creditCardService.purchase(total, order, requestId);

} catch (ThreeDSecureVerificationException e) { threeDSecureVerificationExceptionCounter.incrementAndGet(); throw e; } finally { purchaseInvocationCounter.incrementAndGet(); purchaseInvocationDurationInNanosCounter.addAndGet(System.nanoTime() - nanosBefore); } }

http://code.google.com/p/xebia-france/source/browse/training/xebia-spring-travel/tags/xebia-spring-travel-1.0.0/xebia-spring-travel-ecommerce/src/main/java/fr/xebia/monitoring/demo/payment/CreditCardServiceMonitoringImpl.java

Thursday, June 16, 2011

Page 13: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Accessing JMX is not so difficult

13Thursday, June 16, 2011

Page 14: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

JMX Monitoring with Visual VM

14Thursday, June 16, 2011

Page 15: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

JMX Monitoring with JSP Pages

Human friendly or script friendly pages

Beware of security▶Basic Auth▶Obfuscated URL : /my-app/seye5E7E/jmx/cxf.jsp

15

Powered by JMX !

Thursday, June 16, 2011

Page 16: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Graphite - JMXTrans Style Reporting Tools

16

{ "servers" : [ { "port" : "6969", "host" : "my-server-1", "alias" : "travel-ecommerce-1", "queries" : [ { "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.GraphiteWriter", "settings" : { "port" : 2003, "host" : "graphite-server" } }], "obj": "travel-ecommerce:name=CreditCardServiceMonitoringImpl,...", "resultAlias" : "CreditCardService", "attr":["PurchaseInvocationCount", "ThreeDSecureVerificationExceptionCount", ...] } ], "numQueryThreads" : 2 } ]} JMX Trans Configuration

Graphite

http://code.google.com/p/xebia-france/source/browse/training/xebia-spring-travel/tags/xebia-spring-travel-1.0.0/xebia-spring-travel-ecommerce/src/main/jmxtrans/xebia-spring-travel-ecommerce-jmxtrans.json

Thursday, June 16, 2011

Page 17: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Monotoring systems

17

Hyperic

AppDynamics

All others ...

Thursday, June 16, 2011

Page 19: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Part 2Feature Toggle Pattern with JMX

19Thursday, June 16, 2011

Page 20: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Simplified Use Case

20Thursday, June 16, 2011

Page 21: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Simplified Use Case

21

Corporate Data Center

travel-ecommerce

Tomcat

Credit Card Service

anti-fraud

Tomcat

Enable anti-fraud

Thursday, June 16, 2011

Page 22: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

What ? Why ?

22Thursday, June 16, 2011

Page 23: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

What is it ?

Technique to enable/disable a feature without redeploying

Can be simple : on/off

Can be sophisticated : f(user), f(server), etc

23Thursday, June 16, 2011

Page 24: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Benefits of the Feature Toggle Pattern

Dissociate deployment & feature activation

Progressive activation of a feature

Measure impacts of a new version

Differ feature activation on production

Trunk based development

24

Canary Testing

A/B Testing

Thursday, June 16, 2011

Page 25: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Coding Patterns

25Thursday, June 16, 2011

Page 26: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Coding PatternsDispatcher

26

The dispatcher holds the feature toggle

JMXpersistenttransient

AntiFraudServiceV1Impl

AntiFraudServiceV2Impl

AntiFraudServiceDispatchingImpl

AntiFraudService<<Interface>>

http://code.google.com/p/xebia-france/source/browse/training/xebia-spring-travel/tags/xebia-spring-travel-1.0.0/xebia-spring-travel-ecommerce/src/main/java/fr/xebia/ws/travel/antifraud/v1_0/AntiFraudServiceDispatchingImpl.java

Thursday, June 16, 2011

Page 27: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Coding PatternsTo duplicate or not to duplicate ?

27

Version 2

Version 1

Dispatching

Dispatching

Smart reuse and mutualization

Brutal duplication

Thursday, June 16, 2011

Page 28: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Coding PatternsTo duplicate or not to duplicate ?

28

Version 2

Version 1

Dispatching

Dispatching

Smart reuse and mutualization

Brutal duplication

Thursday, June 16, 2011

Page 29: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Coding PatternsTo duplicate or not to duplicate ?

29

Version 2

Version 1

Dispatching

Dispatching

Smart reuse and mutualization

Brutal duplication

Thursday, June 16, 2011

Page 30: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Coding PatternsTo duplicate or not to duplicate ?

30

Version 2

Version 1

Smart reuse and mutualization

Brutal duplication

Old version removal requires cleanup

Old version removal is clean

Thursday, June 16, 2011

Page 31: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Coding PatternsTo duplicate or not to duplicate ?

31

Old code removal is simpler with brutal duplication

Thursday, June 16, 2011

Page 32: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Demo

32Thursday, June 16, 2011

Page 33: Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Questions / Answers

33

?

Thursday, June 16, 2011