don't fear the walking dead @ phpughh

Post on 14-Apr-2017

662 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

jobs@kartenmacherei.de

http://www.kartenmacherei.de/recruiting

top related