![Page 1: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/1.jpg)
Software Architektur für DevOps
und Continuous Delivery
Eberhard Wolff Freelance Consultant / Trainer
Head Technology Advisory Board adesso AG http://ewolff.com
![Page 2: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/2.jpg)
Eberhard Wolff - @ewolff
Overview • DevOps
• Continuous Delivery
• Architecture
• 7 Rules
![Page 3: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/3.jpg)
Eberhard Wolff - @ewolff
Overview • DevOps
• Continuous Delivery
• Architecture
• 7 Rules
![Page 4: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/4.jpg)
Eberhard Wolff - @ewolff
DevOps Development + Operations
=DevOps
Organizational change
No more silos
![Page 5: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/5.jpg)
Eberhard Wolff - @ewolff
Overview • DevOps
• Continuous Delivery
• Architecture
• 7 Rules
![Page 6: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/6.jpg)
Eberhard Wolff - @ewolff
Overview • DevOps
• Continuous Delivery
• Architecture
• 7 Rules
![Page 7: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/7.jpg)
Eberhard Wolff - @ewolff
Continuous Delivery: Build Pipeline
Commit Stage
Automated Acceptance
Testing
Automated Capacity Testing
Manual Explorative
Testing
Release
![Page 8: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/8.jpg)
Eberhard Wolff - @ewolff
Continuous Delivery Needs Deployment
Automation • But it is not the same
• Many test systems required
• Automation less error prone
![Page 9: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/9.jpg)
Eberhard Wolff - @ewolff
Continuous Delivery Releases
• Blue / Green Deployments • New version on separate production
environment
• Canary Releasing • Release to a few servers in the
cluster
![Page 10: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/10.jpg)
Eberhard Wolff - @ewolff
Overview • DevOps
• Continuous Delivery
• Architecture
• 7 Rules
![Page 11: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/11.jpg)
Eberhard Wolff - @ewolff
Overview • DevOps
• Continuous Delivery
• Architecture
• 7 Rules
![Page 12: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/12.jpg)
Eberhard Wolff - @ewolff
Architecture: Wikipedia Set of structures
needed to reason about the software system
Comprises software elements
relations between them properties of both
![Page 13: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/13.jpg)
Eberhard Wolff - @ewolff
Why Architecture? • System too large to understand
• Understand components in isolation
• Understand how components interact
![Page 14: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/14.jpg)
Eberhard Wolff - @ewolff
Architecture & Non-functional Requirements
• Architecture defines technical foundation
• Technical foundation influences • Performance • Security • Scalability • Etc
![Page 15: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/15.jpg)
Eberhard Wolff - @ewolff
Overview • DevOps
• Continuous Delivery
• Architecture
• 7 Rules
![Page 16: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/16.jpg)
Eberhard Wolff - @ewolff
Overview • DevOps
• Continuous Delivery
• Architecture
• 7 Rules
![Page 17: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/17.jpg)
Eberhard Wolff - @ewolff
Example
Order
Warehouse Customer
Functional decomposition Technology independent
![Page 18: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/18.jpg)
Eberhard Wolff - @ewolff
Order
Warehouse Customer
Database
Libraries e.g. jar, dll Method calls
One deployment unit
![Page 19: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/19.jpg)
Eberhard Wolff - @ewolff
Architecture Simple
High performance
![Page 20: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/20.jpg)
Eberhard Wolff - @ewolff
Change • Modify order process slightly • Customer & Warehouse unchanged
Order
Warehouse Customer
Database
![Page 21: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/21.jpg)
Eberhard Wolff - @ewolff
Order
Warehouse Customer
Database
![Page 22: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/22.jpg)
Eberhard Wolff - @ewolff
Continuous Delivery: Build Pipeline
Commit Stage
Automated Acceptance
Testing
Automated Capacity Testing
Manual Explorative
Testing
Release Order
Warehouse Customer
Database
![Page 23: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/23.jpg)
Eberhard Wolff - @ewolff
Build Pipeline • Just one component changed!
• Lots of unneeded work
• Takes much too long
![Page 24: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/24.jpg)
Eberhard Wolff - @ewolff
Order
Warehouse Customer
Database
Call Center Payment Provider
No retesting for new versions
![Page 25: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/25.jpg)
Eberhard Wolff - @ewolff
Order
Warehouse Customer
Database
Libraries e.g. jar, dll Method calls
One deployment unit
![Page 26: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/26.jpg)
Eberhard Wolff - @ewolff
Order
Warehouse Customer
Database
Services Service calls Three
deployment units
![Page 27: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/27.jpg)
Eberhard Wolff - @ewolff
Components = Services • Independent deployment
• REST/JSON • ProtoBuf • MessageBus
• Micro Services: even smaller?
![Page 28: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/28.jpg)
Eberhard Wolff - @ewolff
Order
Warehouse Customer
Database
![Page 29: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/29.jpg)
Eberhard Wolff - @ewolff
Continuous Delivery: Build Pipeline
Commit Stage
Automated Acceptance
Testing
Automated Capacity Testing
Manual Explorative
Testing
Release Order
![Page 30: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/30.jpg)
Eberhard Wolff - @ewolff
Release • Just a single component
• Much easier to do Blue/Green • or Canary Releases
• Rollback of single service also easier
![Page 31: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/31.jpg)
Eberhard Wolff - @ewolff
Other Benefits • Might use different technologies per
component
• For specific requirements
• For specific developer skills
![Page 32: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/32.jpg)
Eberhard Wolff - @ewolff
#1 Small Deployment Units Less testing
Faster deployment Less waste
Easier rollback
![Page 33: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/33.jpg)
Eberhard Wolff - @ewolff
Change • Optimized algorithm for warehouses
• Additional information must be passed in from order
![Page 34: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/34.jpg)
Eberhard Wolff - @ewolff
Order
Warehouse Customer
Database
Interface changes Order must also be deployed
![Page 35: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/35.jpg)
Eberhard Wolff - @ewolff
Problems • Order and Warehouse must be
deployed together
• Hard to coordinate
• More complex pipeline • Harder rollback
![Page 36: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/36.jpg)
Eberhard Wolff - @ewolff
Solution • New warehouse version supports
old interface
• Warehouse can be deployed first • …and then Order
• Old interface must be phased out
![Page 37: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/37.jpg)
Eberhard Wolff - @ewolff
Robustness Principle • aka Postel’s Law • Be conservative in what you send • be liberal in what you accept • e.g. accept calls to the old version of
the interface
• Better interoperability
![Page 38: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/38.jpg)
Eberhard Wolff - @ewolff
#2 Interface Backwards Compatibility
Faster deployment Deploy components independently
Less waste
![Page 39: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/39.jpg)
Eberhard Wolff - @ewolff
Order
Warehouse Customer
Database
Bug Fix Warehouse must be deployed again
![Page 40: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/40.jpg)
Eberhard Wolff - @ewolff
Problems • Warehouse stores current state in
RAM
• Information lost during update
![Page 41: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/41.jpg)
Stateless
![Page 42: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/42.jpg)
Eberhard Wolff - @ewolff
Stateless • Keep components stateless
• Might store state in database etc.
![Page 43: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/43.jpg)
Eberhard Wolff - @ewolff
#3 Stateless Easier to update
State e.g. in database
![Page 44: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/44.jpg)
Eberhard Wolff - @ewolff
Order
Warehouse Customer
Database
Component failure Domino effect
![Page 45: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/45.jpg)
Eberhard Wolff - @ewolff
Component Interfaces • Design for Failure • I.e. do not fail if other component
fail
• Default values • Simpler algorithm • Graceful Degradation
![Page 46: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/46.jpg)
Architecture deals with
Failure
![Page 47: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/47.jpg)
Resilience
![Page 48: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/48.jpg)
Eberhard Wolff - @ewolff
Resilience & Small Deployment Units
• Downtime during deployment might be acceptable
• More flexibility for deployments
![Page 49: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/49.jpg)
Eberhard Wolff - @ewolff
Circuit Breaker • Do not call a broken system • Instead throw exception • Retry after some time
• Protect broke system • Do not call it in vain
![Page 50: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/50.jpg)
Eberhard Wolff - @ewolff
#4 Design for Failure More stable
Better for Ops Better for new releases
![Page 51: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/51.jpg)
Eberhard Wolff - @ewolff
Change • SEPA
• Additional customer information
![Page 52: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/52.jpg)
Eberhard Wolff - @ewolff
Order
Warehouse Customer
Database
Column must be added to database
![Page 53: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/53.jpg)
Eberhard Wolff - @ewolff
Database Changes Are Hard • Schema changes
• Converting existing data • Potential lots of data
• Hard or even impossible to rollback
![Page 54: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/54.jpg)
Eberhard Wolff - @ewolff
1 - Keep database schema stable
2 - Database = component
![Page 55: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/55.jpg)
Eberhard Wolff - @ewolff
Keep Database Schema Stable
• Change database before components use it
• Change database seldom • i.e. schema changes not part of
deployment • No rollback
![Page 56: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/56.jpg)
Eberhard Wolff - @ewolff
#5a Keep database schema stable
No rollback Less agile
![Page 57: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/57.jpg)
Eberhard Wolff - @ewolff
Databases = Component • Support old “interface” • i.e. schema
![Page 58: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/58.jpg)
Eberhard Wolff - @ewolff
Order
Warehouse Customer
Database
Database must support different data structures
V42
V43
![Page 59: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/59.jpg)
Eberhard Wolff - @ewolff
Dealing withDatabase Changes
• Add an abstraction layer
• Stored procedures • No direct access to tables • Persistence layer in the database • Database is another component
with an API
![Page 60: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/60.jpg)
Eberhard Wolff - @ewolff
Dealing withDatabase Changes
• Support previous version schema
• Default value for new columns • Remove column only if not used
any more • Use views • …
![Page 61: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/61.jpg)
Eberhard Wolff - @ewolff
#5b Databases = Component
Need to be backwards compatible Probably even more important than
for components
![Page 62: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/62.jpg)
Eberhard Wolff - @ewolff
NoSQL • Schema changes much easier
• Can support different schemas in parallel
• Still need to convert data • Same rules for compatibility apply
![Page 63: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/63.jpg)
Eberhard Wolff - @ewolff
Change • Support for new logistic partner
• Won’t start until next month
![Page 64: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/64.jpg)
Eberhard Wolff - @ewolff
Feature Branch • Additional instance of the delivery
pipeline
• Deployment must be synced to start of new partner
![Page 65: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/65.jpg)
Eberhard Wolff - @ewolff
Feature Toggle
• Implement the feature
• Can be activated by feature toggle • i.e. part of the configuration
![Page 66: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/66.jpg)
Eberhard Wolff - @ewolff
Feature Toggle • Implementation & deployment
independent • Can deploy early – less risk • Can evaluate in production • A/B testing • Slow ramp up possible • Probably one toggle: Old / new
version
![Page 67: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/67.jpg)
Eberhard Wolff - @ewolff
Feature Toggle • Add another dimension to the
architecture
• Must eventually be cleaned up
![Page 68: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/68.jpg)
Eberhard Wolff - @ewolff
DevOps • Support for new logistics partner
crashes system
• Feature toggle allows Ops to disable feature
• One toggle per feature • Resilience
![Page 69: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/69.jpg)
Eberhard Wolff - @ewolff
#6 Feature Toggle Decouple release / new features
Resilience: Provide fallback
![Page 70: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/70.jpg)
Eberhard Wolff - @ewolff
After the Change • New logistics partner
• Revenue declined
• Some orders were lost
![Page 71: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/71.jpg)
Eberhard Wolff - @ewolff
Business Monitoring • Provide metrics with business
meaning • i.e. revenue • #orders • #registrations • etc • Feed into monitoring / metrics
![Page 72: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/72.jpg)
Eberhard Wolff - @ewolff
#7 Monitoring Dev provides (business) metrics
Ops provides monitoring infrastructure
![Page 73: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/73.jpg)
Eberhard Wolff - @ewolff
• #1 Small Deployment Units • #2 Interface Backwards
Compatibility • #3 Stateless • #4 Design For Failure • #5a Keep database schema stable • #5b Databases = Component • #6 Feature Toggle • #7 Monitoring
![Page 74: Software Architecture for DevOps and Continuous Delivery](https://reader031.vdocuments.us/reader031/viewer/2022020217/554f4f61b4c905b9508b4c49/html5/thumbnails/74.jpg)
Eberhard Wolff - @ewolff
Thank You!