Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for...

55
Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk

Transcript of Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for...

Page 1: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Continuous Delivery Patterns for Modern Java Architectures

Daniel Bryant

@danielbryantuk

Page 2: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Architecture: Expectations versus reality

11/04/2018 @danielbryantuk

“DevOps”

Page 3: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

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

11/04/2018 @danielbryantuk

Page 4: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

@danielbryantuk

• Independent Technical Consultant, Product Architect at Datawire

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

• Continuous Delivery (CI/CD) advocate

• Leading change through technology and teams

11/04/2018 @danielbryantuk

bit.ly/2jWDSF7

Page 5: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Setting the Scene

11/04/2018 @danielbryantuk

Page 6: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Continuous Delivery

• Produce valuable and robust software in short cycles

• Optimising for feedback and learning

• Not (necessarily) Continuous Deployment

11/04/2018 @danielbryantuk

Page 7: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

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)

11/04/2018 @danielbryantuk

Page 8: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

11/04/2018 @danielbryantuk

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

architecture and ops?

Page 9: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

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

11/04/2018 @danielbryantuk

Page 10: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

11/04/2018 @danielbryantuk

Page 11: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

What are our core challenges with modern Java app architectures?

11/04/2018 @danielbryantuk

Page 12: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

11/04/2018 @danielbryantuk

Page 13: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

11/04/2018 @danielbryantuk

Multiple services/pipelines

Page 14: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

11/04/2018 @danielbryantuk

Gated application deployment

1.

2.

3.

Page 15: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

11/04/2018 @danielbryantuk

Independent service deployment

Page 16: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Architecture 101

11/04/2018 @danielbryantuk

Page 17: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

From monolith to…

11/04/2018 @danielbryantuk

UI / Biz / Repo

Monolith

Domains

Modules, components,frameworks, libraries

http://scs-architecture.org/

Page 18: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

11/04/2018 @danielbryantuk

Self Contained Systems (SCS)

Microservices

Function-as-a-Service“Serverless”

Page 19: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

11/04/2018 @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 20: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

11/04/2018 @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 21: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

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

11/04/2018 @danielbryantuk

Page 22: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

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

11/04/2018 @danielbryantuk

Page 23: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Testing 101

11/04/2018 @danielbryantuk

Page 24: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Testing: Core concepts

11/04/2018 @danielbryantuk

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

Page 25: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Testing: Core concepts

11/04/2018 @danielbryantuk

martinfowler.com/articles/microservice-testing/#testing-progress-3 martinfowler.com/articles/practical-test-pyramid.html

Page 26: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Testing: Core (microservice) concepts

11/04/2018 @danielbryantuk

https://medium.com/@copyconstruct/testing-microservices-the-sane-way-9bb31d158c16

Page 27: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Testing microservice integration

11/04/2018 @danielbryantuk

Page 28: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Functional testing: End-to-end

11/04/2018 @danielbryantuk

Page 29: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Functional Testing: Outside-in

11/04/2018 @danielbryantuk

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

Page 30: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Functional

11/04/2018 @danielbryantuk

Page 31: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Talking of contracts…

11/04/2018 @danielbryantuk

Page 32: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Talking of (service) contracts…

• APIs are service contracts

• Consumer-driven Contracts

• martinfowler.com/articles/consumerDrivenContracts.html

11/04/2018 @danielbryantuk

Page 33: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Talking of (service) contracts…

11/04/2018 @danielbryantukdocs.pact.io

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

Page 34: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Talking of (messaging) contracts…

• What about messaging?

• Message schema are an API

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

11/04/2018 @danielbryantuk

Page 35: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Talking of (messaging) contracts…

11/04/2018 @danielbryantuk

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

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

Page 36: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Contract verification

• Is it worth the cost?

• Tradeoff: Trust/comms vs time• Startups / SMEs

• Enterprises…

• My (anecdotal) experience

• Choreography vs orchestration

11/04/2018 @danielbryantuk

Page 37: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

11/04/2018 @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/https://blog.bernd-ruecker.com/orchestrating-azure-functions-using-bpmn-and-camunda-a-case-study-ff71264cfad6

Page 38: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Contract verification

• Is it worth the cost?

• Tradeoff: Trust and comms• Startups / SMEs

• Enterprises…

• My (anecdotal) experience

• Choreography vs orchestration

• Choreography• Verifying behaviour (interactions)

• Contracts are part of this!

• London school TDD

• Orchestration• Verify state (output)

• Lint/validate orchestration DSL

• Chicago school TDD

11/04/2018 @danielbryantuk

Page 39: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Measure what matters

11/04/2018 @danielbryantuk

Page 40: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

11/04/2018 @danielbryantuk

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

architecture and ops?

Page 41: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Visibility for the business

11/04/2018 @danielbryantuk

Page 42: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

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

11/04/2018 @danielbryantuk

Page 43: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Architectural Visibility

11/04/2018 @danielbryantuk

Page 44: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Unit Testing Architecture

11/04/2018 @danielbryantuk

https://www.archunit.org/

Page 45: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Security Visibility: Basic Java Code Scanning

11/04/2018 @danielbryantuk

Page 46: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Security Visibility: Static Package Scanning

11/04/2018 @danielbryantuk

https://github.com/arminc/clair-scanner

Page 47: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Serverless security

“Since the OS is unreachable, attackers will shift their attention to the areas that remain exposed – and first amongst those would

be the application itself.”

Responsibility for addressing vulnerable app libraries falls to you – the function developer.

11/04/2018 @danielbryantuk

https://www.infoq.com/articles/serverless-security

Page 48: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Security Visibility: Dependencies

11/04/2018 @danielbryantuk

www.owasp.org/index.php/OWASP_Dependency_Check

Page 49: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Delaying NFRs to the ‘Last Responsible Moment’

Newsflash!

Sometimes the

last responsible moment

is up-front

Modern architectures don’t necessarily make this easier

11/04/2018 @danielbryantuk

Page 50: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Wrapping Up

11/04/2018 @danielbryantuk

Page 51: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

11/04/2018 @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 52: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

11/04/2018 @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 53: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

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

11/04/2018 @danielbryantuk

Page 54: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

Bedtime reading…

11/04/2018 @danielbryantuk

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

Page 55: Continuous Delivery Patterns for Modern Java Architectures · Continuous Delivery Patterns for Modern Java Architectures Daniel Bryant @danielbryantuk. ... •Architecture is becoming

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

11/04/2018 @danielbryantuk

bit.ly/2jWDSF7

Coming soon!