Paris Devops - Monitoring And Feature Toggle Pattern With JMX

Post on 06-May-2015

3,911 views 2 download

description

Monitoring and Feature Toggle Pattern with JMX @ Paris Devops Meetup

transcript

Monitoring and Feature Toggle Pattern

with JMX

Bruno Bonfils Cyrille Le Clerc 15/06/2011

Thursday, June 16, 2011

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

The use case

3Thursday, June 16, 2011

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

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

Part 1Monitoring with JMX

6Thursday, June 16, 2011

Simplified Use Case

7Thursday, June 16, 2011

Simplified Use Case

8

Monitoring Booking and Credit Card Service

Corporate Data Center

travel-ecommerce

Tomcat

Credit Card ServiceMock

Thursday, June 16, 2011

Simplified Use Case

9

Monitoring Booking and Credit Card Service

Corporate Data Center

travel-ecommerce

Tomcat

Credit Card ServiceMock

Thursday, June 16, 2011

Custom/business indicator monitoringwith JMX

10Thursday, June 16, 2011

Custom Indicator Monitoring with JMX

11

CreditCardService MonitoringImpl

#purchase()

CreditCardServiceImpl

#purchase()

CreditCardService

#purchase()

monitoring logic isolated with a delegate pattern

Thursday, June 16, 2011

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

Accessing JMX is not so difficult

13Thursday, June 16, 2011

JMX Monitoring with Visual VM

14Thursday, June 16, 2011

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

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

Monotoring systems

17

Hyperic

AppDynamics

All others ...

Thursday, June 16, 2011

Part 2Feature Toggle Pattern with JMX

19Thursday, June 16, 2011

Simplified Use Case

20Thursday, June 16, 2011

Simplified Use Case

21

Corporate Data Center

travel-ecommerce

Tomcat

Credit Card Service

anti-fraud

Tomcat

Enable anti-fraud

Thursday, June 16, 2011

What ? Why ?

22Thursday, June 16, 2011

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

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

Coding Patterns

25Thursday, June 16, 2011

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

Coding PatternsTo duplicate or not to duplicate ?

27

Version 2

Version 1

Dispatching

Dispatching

Smart reuse and mutualization

Brutal duplication

Thursday, June 16, 2011

Coding PatternsTo duplicate or not to duplicate ?

28

Version 2

Version 1

Dispatching

Dispatching

Smart reuse and mutualization

Brutal duplication

Thursday, June 16, 2011

Coding PatternsTo duplicate or not to duplicate ?

29

Version 2

Version 1

Dispatching

Dispatching

Smart reuse and mutualization

Brutal duplication

Thursday, June 16, 2011

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

Coding PatternsTo duplicate or not to duplicate ?

31

Old code removal is simpler with brutal duplication

Thursday, June 16, 2011

Demo

32Thursday, June 16, 2011

Questions / Answers

33

?

Thursday, June 16, 2011