![Page 1: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/1.jpg)
Continuous Delivery Patterns for Modern Architectures and Java
Daniel Bryant
@danielbryantuk
![Page 2: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/2.jpg)
Architecture: Expectations versus reality
25/10/2017 @danielbryantuk
“DevOps”
![Page 3: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/3.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/4.jpg)
@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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/5.jpg)
Setting the Scene
25/10/2017 @danielbryantuk
![Page 6: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/6.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/7.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/8.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/9.jpg)
Let’s bring in some containers (or additional packaging)
25/10/2017 @danielbryantuk
![Page 10: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/10.jpg)
25/10/2017 @danielbryantuk
![Page 11: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/11.jpg)
What are our core challenges with modern Java app architectures?
25/10/2017 @danielbryantuk
![Page 12: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/12.jpg)
25/10/2017 @danielbryantuk
Gated application deployment
1.
2.
3.
![Page 13: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/13.jpg)
25/10/2017 @danielbryantuk
Independent service deployment
![Page 14: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/14.jpg)
Architecture
25/10/2017 @danielbryantuk
![Page 15: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/15.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/16.jpg)
25/10/2017 @danielbryantuk
Self Contained Systems (SCS)
Microservices
Function-as-a-Service“Serverless”
![Page 17: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/17.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/18.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/19.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/20.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/21.jpg)
A journey of a thousand miles…
25/10/2017 @danielbryantuk
![Page 22: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/22.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/23.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/24.jpg)
Testing
25/10/2017 @danielbryantuk
![Page 25: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/25.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/26.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/27.jpg)
Functional testing: End-to-end
25/10/2017 @danielbryantuk
![Page 28: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/28.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/29.jpg)
Functional
25/10/2017 @danielbryantuk
![Page 30: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/30.jpg)
Talking of contracts…
25/10/2017 @danielbryantuk
![Page 31: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/31.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/32.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/33.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/34.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/35.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/36.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/37.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/38.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/39.jpg)
25/10/2017 @danielbryantuk
www.owasp.org/index.php/OWASP_Dependency_Check
![Page 41: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/41.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/42.jpg)
Wrapping Up
25/10/2017 @danielbryantuk
![Page 43: vJUG24 2017 "Continuous Delivery Patterns for Contemporary Architecture"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/43.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/44.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/45.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/46.jpg)
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"](https://reader031.vdocuments.us/reader031/viewer/2022030318/5a64797a7f8b9a40568b4721/html5/thumbnails/47.jpg)
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!