vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

47
Continuous Delivery Patterns for Modern Architectures and Java Daniel Bryant @danielbryantuk

Transcript of vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Page 1: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Continuous Delivery Patterns for Modern Architectures and Java

Daniel Bryant

@danielbryantuk

Page 2: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Architecture: Expectations versus reality

25/10/2017 @danielbryantuk

“DevOps”

Page 3: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

tl;dr

• We are moving from complicated systems to complex systems

• Architecture is becoming more about technical leadership

• We must encode all requirements into a continuous delivery pipeline

25/10/2017 @danielbryantuk

Page 4: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

@danielbryantuk

• Independent Technical Consultant, CTO at SpectoLabs

• Architecture, DevOps, Java, microservices, cloud, containers

• Continuous Delivery (CI/CD) advocate

• Leading change through technology and teams

25/10/2017 @danielbryantuk

bit.ly/2jWDSF7

Page 5: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Setting the Scene

25/10/2017 @danielbryantuk

Page 6: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Continuous Delivery

• Produce valuable and robust software in short cycles

• Optimising for feedback and learning

• Not (necessarily) Continuous Deployment

25/10/2017 @danielbryantuk

Page 7: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Velocity (with stability) is key to business success

“Continuous delivery is achieved when stability and speed can satisfy business demand.

Discontinuous delivery occurs when stability and speed are insufficient.”

- Steve Smith (@SteveSmithCD)

25/10/2017 @danielbryantuk

Page 8: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

25/10/2017 @danielbryantuk

Feedback: - Was our hypothesis proven?- How can we improve biz,

architecture and ops?

Page 9: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Let’s bring in some containers (or additional packaging)

25/10/2017 @danielbryantuk

Page 10: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

25/10/2017 @danielbryantuk

Page 11: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

What are our core challenges with modern Java app architectures?

25/10/2017 @danielbryantuk

Page 12: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

25/10/2017 @danielbryantuk

Gated application deployment

1.

2.

3.

Page 13: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

25/10/2017 @danielbryantuk

Independent service deployment

Page 14: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Architecture

25/10/2017 @danielbryantuk

Page 15: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

From monolith to…

25/10/2017 @danielbryantuk

UI / Biz / Repo

Monolith

Domains

Modules, components,frameworks, libraries

http://scs-architecture.org/

Page 16: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

25/10/2017 @danielbryantuk

Self Contained Systems (SCS)

Microservices

Function-as-a-Service“Serverless”

Page 17: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

25/10/2017 @danielbryantuk

Monoliths SOA Microservices / SCS FaaS / Serverless

Scope Project Enterprise Product Feature (or glue?)

Focus Swiss Army Knife Reuse, governance, control

Domain modelling, SRP, evolution

Function (in/out),rapid evolution

Organisation Implemented and maintained (typically) by single team

Implemented by different org units. Maintenance done elsewhere

Services implemented and owned by product teams

Implemented by pioneers (hipsters?)

Deployment Monolithic deployment Monolithic orchestration of multiple services

Services deployed individually

Functions deployed individually

Management None Centralised Distributed Chaotic / Orchestrated

Inter-process communication

None RPC or messaging, typically via middleware (ESB/MQ)

RPC via dumb pipesand smart endpoints, messaging/events

Events

Pioneers / stewards

Organisations, community or individuals

Enterprises and Vendors

Community and highperf organisations

Vendors/community

Core ArchitecturalConstraints

Language and framework Canonical domain model, standards

Interoperability Cost (Gbs/ms)

Page 18: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

25/10/2017 @danielbryantuk

Monoliths SOA Microservices / SCS FaaS / Serverless

Scope Project Enterprise Product Feature (or glue?)

Focus Swiss Army Knife Reuse, governance, control

Domain modelling, SRP, evolution

Function (in/out),rapid evolution

Organisation Implemented and maintained (typically) by single team

Implemented by different org units. Maintenance done elsewhere

Services implemented and owned by product teams

Implemented by pioneers (hipsters?)

Deployment Monolithic deployment Monolithic orchestration of multiple services

Services deployed individually

Functions deployed individually

Management None Centralised Distributed Chaotic / Orchestrated

Inter-process communication

None RPC or messaging, typically via middleware (ESB/MQ)

RPC via dumb pipesand smart endpoints, messaging/events

Events

Pioneers / stewards

Organisations, community or individuals

Enterprises and Vendors

Community and highperf organisations

Vendors/community

Core ArchitecturalConstraints

Language and framework Canonical domain model, standards

Interoperability Cost (Gbs/ms)

Page 19: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Architecture fundamentals

• Coupling• ”Components have little or no knowledge of other components”

• Interfaces

• Schema

• Cohesion • “Degree to which the elements within a component belong together”

• Single reason to change

• Separation of concerns

25/10/2017 @danielbryantuk

Page 20: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Coupling, Cohesion and Continuous Delivery

• Design• Cohesion makes reasoning easy

• Loose coupling reduces impact

• Build, unit and integration• Cohesion limits dependencies

• Loose coupling allows simulation

• End-to-end tests• Cohesion/coupling orchestration

• Deployment• Cohesion minimises number of

components in play

• Coupling leads to “monoliths”

• Observability• Cohesive is easier to understand

• High coupling typically leads to large blast radius and “murder mystery” style debugging

25/10/2017 @danielbryantuk

Page 21: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

A journey of a thousand miles…

25/10/2017 @danielbryantuk

Page 22: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Working locally

25/10/2017 @danielbryantuk

https://cloud.google.com/functions/docs/emulatorhttps://azure.microsoft.com/en-gb/blog/announcing-the-preview-of-java-support-for-azure-functions/https://github.com/awslabs/aws-sam-local

Page 23: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Developing/Integrating locally

25/10/2017 @danielbryantuk

https://news.ycombinator.com/item?id=13960107https://opencredo.com/working-locally-with-microservices/https://www.datawire.io/telepresence/ | https://hoverfly.io/

Page 24: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Testing

25/10/2017 @danielbryantuk

Page 25: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Testing: Core concepts

25/10/2017 @danielbryantuk

/lisacrispin.com/2011/11/08/using-the-agile-testing-quadrants/martinfowler.com/bliki/TestPyramid.html

Page 26: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Testing: Core concepts

25/10/2017 @danielbryantuk

martinfowler.com/articles/microservice-testing/#testing-progress-3

Page 27: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Functional testing: End-to-end

25/10/2017 @danielbryantuk

Page 28: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Functional Testing: Outside-in

25/10/2017 @danielbryantuk

https://specto.io/blog/2016/8/16/recipe-for-designing-building-testing-microservices/http://www.thucydides.info/docs/serenity/

Page 29: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Functional

25/10/2017 @danielbryantuk

Page 30: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Talking of contracts…

25/10/2017 @danielbryantuk

Page 31: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Talking of (service) contracts…

• APIs are service contracts

• Consumer-driven Contracts

• martinfowler.com/articles/consumerDrivenContracts.html

25/10/2017 @danielbryantuk

Page 32: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Talking of (service) contracts…

25/10/2017 @danielbryantukdocs.pact.io

cloud.spring.io/spring-cloud-contractgithub.com/spring-cloud-samples/spring-cloud-contract-samples

Page 33: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Talking of (messaging) contracts…

• What about messaging?

• Message schema are an API

• www.infoq.com/presentations/contracts-streaming-microservices

25/10/2017 @danielbryantuk

Page 34: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Talking of (messaging) contracts…

25/10/2017 @danielbryantuk

www.infoq.com/presentations/contracts-streaming-microservices

docs.confluent.io/current/schema-registry/docs/maven-plugin.html

Page 35: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Contract verification

• Is it worth the cost?

• Tradeoff: Trust and comms• Startups / SMEs

• Enterprises…

• My (anecdotal) experience

• Choreography vs orchestration

25/10/2017 @danielbryantuk

Page 36: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

25/10/2017 @danielbryantuk

https://netflix.github.io/conductor/http://rockscript.io/https://nifi.apache.org/docs.htmlhttps://aws.amazon.com/documentation/step-functions/http://camel.apache.org/

Page 37: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Contract verification

• Is it worth the cost?

• Tradeoff: Trust and comms• Startups / SMEs

• Enterprises…

• My (anecdotal) experience

• Choreography vs orchestration

• Choreography• Asserting behaviour (interactions)

• Contracts are part of this!

• Orchestration:• Asserting state (output)

• Verify orchestration DSL

25/10/2017 @danielbryantuk

Page 38: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Testing NFRs in the build pipeline

• Architecture quality• SonarQube / Code Climate

• Performance and Load testing • Gatling / Locust / Bees with m’guns

• Security testing • OWASP Dependency check / Bdd-security

• Docker Bench for Security / CoreOS Clair

25/10/2017 @danielbryantuk

Page 39: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

25/10/2017 @danielbryantuk

www.owasp.org/index.php/OWASP_Dependency_Check

Page 40: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

25/10/2017 @danielbryantuk

github.com/arminc/clair-scanner

Page 41: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Delaying NFRs to the ‘Last Responsible Moment’

Newsflash!

Sometimes the

last responsible moment

is up-front

Modern architectures don’t necessarily make this easier

25/10/2017 @danielbryantuk

Page 42: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Wrapping Up

25/10/2017 @danielbryantuk

Page 43: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

25/10/2017 @danielbryantuk

Monoliths SOA Microservices / SCS FaaS / Serverless

Scope Project Enterprise Product Feature (or glue?)

Focus Swiss Army Knife Reuse, governance, control

Domain modelling, SRP, evolution

Function (in/out),rapid evolution

Organisation Implemented and maintained (typically) by single team

Implemented by different org units. Maintenance done elsewhere

Services implemented and owned by product teams

Implemented by pioneers (hipsters?)

Deployment Monolithic deployment Monolithic orchestration of multiple services

Services deployed individually

Functions deployed individually

Management None Centralised Distributed Chaotic / Orchestrated

Inter-process communication

None RPC or messaging, typically via middleware (ESB/MQ)

RPC via dumb pipes/smart endpoints, messaging/events

Events

Pioneers / stewards

Organisations, community or individuals

Enterprises and Vendors

Community and highperf organisations

Vendors/community

Core ArchitecturalConstraints

Language and framework Canonical domain model, standards

Interoperability Cost

Page 44: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

25/10/2017 @danielbryantuk

Monoliths SOA Microservices / SCS FaaS / Serverless

Cohesion and coupling enforced at modules

CD focuses on end-to-end functionality

Provide goals and “best practice” examples

Cohesion and coupling enforced at

service level

CD focuses on service integrity

Provide objectives and standards

Cohesion and coupling enforced at

service API level

CD focuses on service interaction

Provide principles and guidelines

Cohesion and coupling enforced at

function API level

CD focuses on service output/state

Provide principles and guidelines

Page 45: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

In conclusion…

• We are moving from complicated systems to complex systems• Design and test with coupling and cohesion in mind

• Architecture is becoming more about technical leadership• Recognise your situation and influence accordingly

• We must encode all requirements into a continuous delivery pipeline• Both functional and nonfunctional requirements

25/10/2017 @danielbryantuk

Page 46: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Bedtime reading…

25/10/2017 @danielbryantuk

blog.christianposta.com/microservices/low-risk-monolith-to-microservice-evolution-part-iii/

Page 47: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"

Thanks for listening…

Twitter: @danielbryantuk

Email: [email protected]

Writing: https://www.infoq.com/profile/Daniel-Bryant

Talks: https://www.youtube.com/playlist?list=PLoVYf_0qOYNeBmrpjuBOOAqJnQb3QAEtM

25/10/2017 @danielbryantuk

bit.ly/2jWDSF7

Coming soon!