Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

53

Transcript of Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Page 1: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler
Page 2: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Die Jagd nach mehr KonversionFluch oder Segen für den Entwickler

Bernd Zuther - IT Consultant Big Datacodecentric AG

Page 3: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Bernd Zuther

@Bernd_Z github.com/zutherb [email protected]

Page 4: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler
Page 5: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

How can we increase sales?

Page 6: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

A/B Testing

Page 7: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Conversion

Conversion Rate =Number of Goals achieved

Visits

act of converting site visitors into paying customersproportion of visits to a website which take action to go beyond a website visit

··

Page 8: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

FeatureToggle

public class TopSellerRecommendationPanel extends AbstractShopBasePanel {

@SpringBean private FeatureToogleBean featureToogleBean;

...

@Override protected void onConfigure() { super.onConfigure(); setVisible(featureToogleBean.isTopSellerFeatureEnabled()); }

...

}

JAVA

Page 9: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Checkout - Variant A

Page 10: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Checkout - Variant B

Page 11: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

ProjectScrum + 98% forecast (commitment) guaranteeregular deployment 1 x 2 weekshot fix/feature deployments 2-4 per sprintaround 1 1/2 h to get into production

····

35min per build40min per ITIL stuff:

20min per manual deployment

--

callsticketetc.

---

-

Page 12: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

How can we deliver faster?

Page 13: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

What have we done?

Page 14: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

How does it work?

Page 15: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Disadvantages of a MonolithReduction of development speedIncrease of turnaround timesIncrease of build timeStrange behavior after changesIncrease of time to marketA/B testing of process changes nearly impossibleScalability (e.g. application and teams)

·······

Page 16: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

How can we build software smarter?

Page 17: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Microservice

Data

Functionality

Page 18: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Microservice Architecture

Data

Functionality

Data

Functionality

Data

Functionality

Functionality

Data

Functionality

Data

Page 19: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Service-Oriented Architecture (SOA / 1996)SOA is an architectural style that supports service-orientation.Service-orientation is a way of thinking in terms of services.A service:

···

Is a logical representation of a repeatable business activity(e.g., submit order)Is self-containedMay be composed of other servicesIs a “black box” to consumers of the service

-

---

Page 20: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

SOA taxonomy

Page 21: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Differences to SOALightweight infrastructure and protocols (e.g. REST)Greater flexibility of architecture (e.g. can contain GUI)Managed as products, with their own lifecycle and deliveryDeployed as processes (Unix packages or Container)

····

Page 22: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Online Shop - Use casesOnline Shop

order products

Buyer

view catalog

<include>

create cart

<include>

Page 23: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Online Shop - Migration

<<device>>Microservice Server

<<web server>>Ngnix

<<service>>Cart Service

<<service>>Product Service

<<device>>Monolith Server

<<application server>>Tomcat

<<artifact>>shop.war

<<artifact>>Catalog View

<<artifact>>cart-service.jar

<<artifact>>product-

service.jar

Page 24: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Challenges of MicroservicesRequire integration.Require a multi deployment pipeline.Require automation of deployment and configuration.Require logging and monitoring.

····

Page 25: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Leavitt - Communication Structure

Type Star Chain Circle Complete Structure

centralization high medium low very low

communication low medium much very much

controllability much medium low very low

Page 26: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Conway's Law

<<device>>Microservice Server

<<web server>>Ngnix

<<service>>Cart Service

<<service>>Product Service

<<device>>Monolith Server

<<application server>>Tomcat

<<artifact>>shop.war

<<artifact>>Catalog View

<<artifact>>cart-service.jar

<<artifact>>product-

service.jar

Page 27: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler
Page 28: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Rest Communication

{ firstname: "Bernd", lastname: "Zuther", street: "Elsenheimerstraße 55a", city: "München", zip: 80687}

JAVASCRIPT

Page 29: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Rest Communication

{ firstname: "Bernd", lastname: "Zuther", birthday: "1983/08/15", street: "Elsenheimerstraße 55a", city: "München", zip: 80687}

JAVASCRIPT

Page 30: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler
Page 31: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Rest Communication

{ firstname: "Bernd", lastname: "Zuther", birthday: "1983/08/15", addresses : [{ street: "Elsenheimerstraße 55a", city: "München", zip: 80687, type: "WORK" }]}

JAVASCRIPT

Page 32: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler
Page 33: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Versionless Rest Communication

{ firstname: "Bernd", lastname: "Zuther", birthday: "1983/08/15", street: "Elsenheimerstraße 55a", city: "München", zip: 80687, addresses : [{ street: "Elsenheimerstraße 55a", city: "München", zip: 80687, type: "WORK" }]}

JAVASCRIPT

Page 34: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler
Page 35: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

AlternativesURL:

Custom request header:

Accept header:

·simply whack the API version into the URL, e.g. https://shop/api/v2/cart/all-

·same URL as before but add a header “api-version: 2”-

·modify accept header to specify the version, e.g. “Accept:application/vnd.cart.v2+json”

-

Page 36: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler
Page 37: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Multi Deployment Pipeline

Build Test Publish

UI-Test

Build Test Publish

Deployment

Load-Test

Catalog View

Productservice

Page 38: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Deployment

@RestControllerclass CartController {

@Autowired def CartRepository cartRepository;

@RequestMapping(value = "/create", produces = MediaType.APPLICATION_JSON_VALUE, method = RequestMethod.PUT) @ResponseBody def UUID create(@RequestBody CartItem item) { cartRepository .create(item)}

<<executable>>cart-service.jar

build

ConfigurationCART_SERVICE_PROFILES=productionCART_SERVICE_PORT=18100CART_SERVICE_REDIS_URL=redis.microservice.io

release

release

<<package>>cart-service.debrelease

Infrastructure Code#! /bin/shPIDFILE=/var/run/cart.pidBASE_DIRECTORY=/usr/share/shop/cart/bin

Page 39: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Unix Package Repository

Page 40: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

How can we describe infrastructureand products?

Page 41: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Docker Environment

<<device>>Docker Deamon

<<container>>Ngnix

<<container>>Cart Service

<<container>>Product Service

<<artifact>>checkout

.war<<artifact>>catalog.tar

<<artifact>>cart-service.jar

<<artifact>>product-

service.jar

<<container>>Tomcat

<<container>>MongoDB

<<container>>Redis

<<container>>Navigation

Service

<<artifact>>navigation-service.jar

Page 42: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Kubernetes - Cluster Management

Page 43: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Pod

kind: PoddesiredState: manifest: containers: - name: mongodb image: dockerfile/mongodb cpu: 100 memory: 50000000 ports: - containerPort: 27017

YAML

Page 44: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Replication Controller

kind: ReplicationController,desiredState: replicas: 4 podTemplate: desiredState: manifest: containers: - name: product image: zutherb/product-service

YAML

Page 45: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Service

Page 46: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler
Page 47: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Experiment with your customers!

Page 48: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

Summary

Pro Needs

better A/B testing monitoring

effective technologies centralised logging

solution orientation fully automated deployment pipeline

incremental migration cluster management

Microservices do not guarantee more conversion!You need to run experiments with your customers!

Page 49: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

<Thank You!>

g+ plus.google.com/+BerndZuthertwitter @Bernd_Zwww bernd-zuther.degithub github.com/zutherb/

Page 50: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

LinksJava Aktuell 02/15 - Microservices und die Jagd nach mehr KonversionLean StartupTest Driven Business Featuring Lean StartUpContinuous Delivery mit dem FeatureToggle PatternFeatureToggleDo Good Microservices Architectures Spell the Death of the Enterprise ServiceBus?MicroservicesPipeService Oriented Architecture : What Is SOA?The Twelve FactorsThree Golden Rules for Continuous Delivery

······

·····

Page 51: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

LinksYour API versioning is wrong, which is why I decided to do it 3 different wrongwaysMicroservices im Zusammenspiel mit Continuous Delivery, Teil 1 – die TheorieFast, isolated development environments using DockerMicroservices versus OSGi: Über Sinn und Unsinn der 'neuen Inkarnation desWebserviceWarnung vor dem Microservice – Versuch einer DefinitionMicro Services in der Praxis: Nie wieder Monolithen!Netflix NebulaDeployment ganz einfach – Microservice Deployment mit Hilfe der LinuxPaketverwaltungSplunk – Marke Eigenbau mit Elasticsearch, Logstash und Kibana (ELK Stack)Scaling Docker with KubernetesAppstash Project

·

···

····

···

Page 52: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

ImagesDelivery of semlorFreebooksSOACuba CarLandschaftspark Duisburg-NordUnfall von Herbert StengerLieferwagenIndianapolis ZooDeveloper At WorkIcom IC735 + TunerJust a face in the crowd[119/366] Thumbs UpContainers

·············

Page 53: Javaland 2015 - Bernd Zuther - Die Jagd nach mehr Konversion - Fluch oder Segen für den Entwickler

ImagesCafé con leche - Milchkaffee (CC)Cloning Experiments: Jess PayneBLM NevadaThere's a light at the end of the tunnel...

····