#Architecture201xStefan Tilkov | innoQ
stefan.tilkov@innoq.com@stilkov
Thursday 6 February 14
Disclaimer first
Thursday 6 February 14
Let’s start with the enterprise
Thursday 6 February 14
The J2EE(TM) 1.4 Tutorial, http://docs.oracle.com/cd/E17802_01/j2ee/j2ee/1.4/docs/tutorial-update2/doc/Overview7.html
Thursday 6 February 14
GỬI PHẢN HỒI, http://ejbvn.wordpress.com
Thursday 6 February 14
DB
Application
Browser
Thursday 6 February 14
DB
Backend
Frontend
Browser
Thursday 6 February 14
Assumptions to be challengedOne single system
One single environmentPredictable load
Clear & distinct rolesPlanned releases
Built because they have to be
Thursday 6 February 14
Somewhat Limited Agility
Thursday 6 February 14
Increased Desaster Potential
Thursday 6 February 14
Cut Things into Pieces
321
Thursday 6 February 14
Small, lightweight, focused apps
Thursday 6 February 14
My favorite programmer’s story
Thursday 6 February 14
Task: Read a file of text, determine the n most frequently used words, and print out a sorted list of those
words along with their frequencies.
Thursday 6 February 14
Donald Knuth Doug McIlroy
Dr. Drang, http://www.leancrew.com/all-this/2011/12/more-shell-less-egg/
10-page literal Pascal program,
including innovative new data structure
tr -‐cs A-‐Za-‐z '\n' |tr A-‐Z a-‐z |sort |uniq -‐c |sort -‐rn |sed ${1}q
Thursday 6 February 14
Small, lightweight, focused apps
Thursday 6 February 14
Simple process run model
Thursday 6 February 14
Back to building servers
Thursday 6 February 14
Closer to the metal
Thursday 6 February 14
http://12factor.net
Thursday 6 February 14
Isolation and independence
Thursday 6 February 14
Polyglotism
Thursday 6 February 14
Built for replacement,not for re-use
Thursday 6 February 14
FAQ
Press Release
Customer Experience
User Manual
Werner Vogels, http://www.allthingsdistributed.com/2006/11/working_backwards.html
Thursday 6 February 14
Dismantled monolith
Backend & front-end services
(Re-Implementation in Node.js)
https://engineering.groupon.com/2013/misc/i-tier-dismantling-the-monoliths/
Thursday 6 February 14
DB
Service
Frontend
Browser
Service Service
Thursday 6 February 14
DB
Service
Frontend
Browser
Service Service
DB DB
Thursday 6 February 14
DB
Service
FE
Browser
Service Service
DB DB
FE FE
Thursday 6 February 14
Organization ⟷ Architecture
Thursday 6 February 14
Kraus, Steinacker, Wegner: Teile und Herrsche – Kleine Systeme für große Architekturen, http://bit.ly/152cXbx
Independent “Verticals”
REST-based macro architecture
Individual micro architecture
Thursday 6 February 14
App
DB
Browser
App App
DB DB
Thursday 6 February 14
Services as DNA
“Dogfooding”
Two-pizza rule
Steve Yegge, https://plus.google.com/110981030061712822816/posts/AaygmbzVeRq
Thursday 6 February 14
Tools
Play
Node.js
Modern Java EE containers
Akka
Embedded Jetty
vert.x
DropWizard
Netty
Thursday 6 February 14
Thursday 6 February 14
Integrate pieces to form a whole
321
Thursday 6 February 14
Robust systemsUnreliable networks
Thursday 6 February 14
S1
S2 S3
Thursday 6 February 14
Tools
HystrixAkka
Finagle
Thursday 6 February 14
Smart aggregation
Thursday 6 February 14
REST APIs
Client-specific orchestration
Streaming architecture
Thursday 6 February 14
Browser
DB
Service
Frontend
Service Service
DB DB
MobileApp
Thursday 6 February 14
Browser
DB
Service
Frontend
Service Service
DB DB
MobileApp
Orch 1 Orch 2
Thursday 6 February 14
S1
S2 S3
S4 S5 S6
Thursday 6 February 14
Tools
ql.io
StormRx
Playspray
Thursday 6 February 14
Web-native front-end integration
Thursday 6 February 14
Service Interface Service Interface
Client Logic
Thursday 6 February 14
Service Interface Service Interface
Client Logic
Thursday 6 February 14
Service Interface Service Interface
Client Logic
Thursday 6 February 14
Service Interface Service Interface
Presentation Logic
Orchestration Logic
Thursday 6 February 14
Business Logic Business Logic
Presentation Logic
Thursday 6 February 14
Business Logic Business Logic
Presentation Logic Presentation Logic
Thursday 6 February 14
Simple semantic HTML
Open Data
Single domain – no portal
“Google as the homepage”
Polyglot environment
https://gds.blog.gov.uk/govuk-launch-colophon/
Thursday 6 February 14
Tools & Approaches
RESTful HTTP
ROCA
MVC Web Frameworks
Thursday 6 February 14
Change & run efficiently
321
Thursday 6 February 14
Horizontal scaling
Thursday 6 February 14
Virtualized operating system as container
Thursday 6 February 14
Fully automated, repeatable deployment
Thursday 6 February 14
Transparent monitoring
Thursday 6 February 14
Small changesets
Everyone deploys
Fast deploys
Change flags
Graphs/metrics
Fix fast/roll forward
Ross Snyder, http://www.slideshare.net/beamrider9/continuous-deployment-at-etsy-a-tale-of-two-approaches
Thursday 6 February 14
Fully cloud-based
Self-made PaaS
Simian Army
Adrian Cockcroft, http://www.infoq.com/presentations/Netflix-Architecture
Thursday 6 February 14
Tools
PuppetMetrics
docker
Vagrant
Chef
logstash
Zipkin
Packer
Thursday 6 February 14
Thursday 6 February 14
Summary
Thursday 6 February 14
Build smaller
Thursday 6 February 14
Aggregate smartly
Thursday 6 February 14
Merge run & change
Thursday 6 February 14
Thank you!Questions?Comments?
Stefan Tilkov, @stilkovstefan.tilkov@innoq.comhttp://www.innoq.com/blog/st/Phone: +49 170 471 2625
innoQ Deutschland GmbH
Krischerstr. 10040789 Monheim am RheinGermanyPhone: +49 2173 3366-0
innoQ Schweiz GmbH
Gewerbestr. 11CH-6330 ChamSwitzerlandPhone: +41 41 743 0116www.innoq.com
Ohlauer Straße 4310999 BerlinGermanyPhone: +49 2173 3366-0
Robert-Bosch-Straße 764293 DarmstadtGermanyPhone: +49 2173 3366-0
Radlkoferstraße 2D-81373 MünchenGermanyTelefon +49 (0) 89 741185-270
Thursday 6 February 14