HOW WE GET RID OF OUR MONOLITH
DON’T
How we started• built on top of a standard e-commerce platform
• a lot of custom code to support a wide combination of product options
Feature X Feature Y Feature Z
Core Code Customization
The challenges of a growing business
• serious performance issues
• own developers don’t feel comfortable with the code
• adding individual features is too complex
• upgrading is hard
Finding a way out
You don’t have to replace everything at once!
What part of the software causes the highest amount of pain?
• category pages
• product detail pages
Planning
Current Setup
Legacy System
Session Storage
RDBMS
Webserver
Idea
Legacy System
Session Storage
RDBMS
Webserver New Software
FURY Frontend Key-Value Storage
getCategoryPage(341);
"<html><head>…</head><body>…</body></html>"
FURY Frontend
Key-Value Storage
["SBU06HE"
,"TEOD3HE"
,"ANW04HD"
]
Search
search("{'
category':
341, 'filt
ers':{...}
}");
getTiles(["SBU06HE","TEOD3HE","ANW04HD"]);
["<div class="category-item">…</div>", …]
Webserver
Key-Value Storage
Search
FURY Frontend FURY Backend
FURY Components
Webserver
Key-Value Storage
Search
FURY Frontend FURY Backend
Legacy RDBMSLegacy System Session
Storage
Collect & Export
Webserver
Key-Value Storage
Search
FURY Frontend FURY Backend
Legacy RDBMSLegacy System Session
Storage
FURY Requests
200 OK
Webserver
Key-Value Storage
Search
FURY Frontend FURY Backend
Legacy RDBMSLegacy System Session
Storage
Requests to Legacy System
404 NOT FOUND
Webserver
Key-Value Storage
Search
FURY Frontend FURY Backend
Legacy RDBMSLegacy System Session
Storage
Requests to Legacy System
404 NOT FOUND
200 OK
Learnings• We have full responsibility now
• No framework needed
• No relational database needed
Goods and Bads• fully object-oriented
• easy refactoring thanks to 100% code coverage
• not enough automated acceptance tests
• dependencies to legacy software (database changes, API calls)
Deployment
Webserver (Router)
Webserver
FURY Frontend
Server A
K/V StorageSearch
FURY Backend
Webserver
FURY Frontend
Server B
K/V StorageSearch
FURY Backend
Webserver (Router)
Webserver
FURY Frontend
Server A
K/V StorageSearch
FURY Backend
Webserver
FURY Frontend
Server B
K/V StorageSearch
FURY Backend
active = A
Webserver (Router)
Webserver
FURY Frontend
Server A
K/V StorageSearch
FURY Backend
Webserver
FURY Frontend
Server B
K/V StorageSearch
FURY Backend
active = B
RDBMS Read Slave
Webserver
FURY Frontend
Server A
K/V StorageSearch
FURY Backend
Webserver (Router)
Build Server
Deploy Code
active = B
RDBMS Read Slave
Webserver
FURY Frontend
Server A
K/V StorageSearch
FURY Backend
Webserver (Router)
Build Server
Deploy Code
Collect & Export
active = B
RDBMS Read Slave
Webserver
FURY Frontend
Server A
K/V StorageSearch
FURY Backend
Webserver (Router)
Build Server
Deploy Code
Collect & Export
Smoke Tests
active = B
RDBMS Read Slave
Webserver
FURY Frontend
Server A
K/V StorageSearch
FURY Backend
Webserver (Router)
Build Server
Deploy Code
Collect & Export
Smoke Tests
Switch to A
active = A
RDBMS Read Slave
Webserver
FURY Frontend
Server A
K/V StorageSearch
FURY Backend
active = B Webserver (Router)
Build Server
Deploy Code
Collect & Export
We are very close to launch!
What next?• party hard!
• identify the next pain points we want to work on
• replace the next parts of the legacy system with new, self-contained components / services
https://www.instagram.com/kartenmacherei/
Q&A
https://www.facebook.com/kartenmacherei/ +49 40 468996861
http://www.kartenmacherei.de/recruiting