How Wix.com migrated from a monolith to microservices architecture, what was the effect on the company structure and how Wix built a top of the line engineering group
3. @aviranm
Wix In Numbers
Over 87M users
Static storage is >2Pb of data
3 data centers + 2 clouds (Google, Amazon)
2B HTTP requests/day
1200 people work at Wix
8. @aviranm
The Monolithic Giant
One monolithic server that handled everything
Dependency between features
Changes in unrelated areas caused deployment of the whole system
Failure in unrelated areas will cause system wide downtime
Lighttpd
(file serving) MySQL
DB
Wix
(Tomcat)
11. @aviranm
Concerns and SLA
Many feature request
Lower performance requirement
Lower availability requirement
Write intensive
Edit websites
Not many product changes
High performance
High availability
Read intensive
View sites, created by Wix editor
15. @aviranm
Separation by Product Lifecycle
Decouple architecture => Decouple teams
Deployment independence
Areas with frequent changes
Editor service Public service
16. @aviranm
Separation by Service Level
Scale independently
Use different data store
Optimize data per use case (Read vs Write)
Run on different datacenters / clouds / zones
System resiliency (degradation of service vs. downtime)
Faster recovery time
Editor service Public service
19. @aviranm
Separation of Databases
Copy data between segments
Optimize data per use case (read vs. write intensive)
Different data stores
Public serviceEditor service
Copy necessary data
32. @aviranm
Failure Points = Network I/O
Public serviceEditor service
Retry policy
Circuit breaker
Throttlers Be careful – you may cause downtime
Retry only on idempotent operations
39. @aviranm
The Size of a Microservice is the Size
of the Team That is Building it.
“Organizations which design systems ... are
constrained to produce designs which are copies of the
communication structures of these organizations”
Conway, Melvin
40. @aviranm
How many Engineers can Work on a Single Project
?
http://cdn.wp.sunmotors.co.uk/get/2014/03/cars.28.620x413.jpg
43. @aviranm
Team Work
Microservice is owned by a team
You build it – you run it
No microservice is left without a clear owner
Microservice is NOT a library – it is a live production system
45. @aviranm
What Is The Common Denominator?
Product manager
Project manager
QA
Operations
DBA
Develpers
can do
these jobs
@aviranm
46. @aviranm
Develop
er
Product
QA
Manage
ment
Operatio
n
BI
Dev Centric Culture – Involve The Developer
Product definition (with product)
Development
Testing (with QA engineers)
Deployment / Rollback (with operations)
Monitoring / BI (with BI team)
DevOps – to enable deployment and rollback, fully
automated
Support Circle
@aviranm
47. What did you Learn from Just 2 Services
● Service boundary
● Monitoring infrastructure
● Serialization format
● Synchronous communication protocol (HTTP/Binary)
● Asynchronous (queuing infra)
● Service SLA
● API definition (REST/ RPC / Versioning)
● Data separation
● Deployment strategy
● Testing infrastructure (integration test, e2e test)
● Compatibility (backwards / forward)
49. @aviranm
HTML
Editor
Flash
Editor
MSM
Private
Media
Public
Media
Editor Segment Public Segment
Premium
Services
List DB
App
Builder
App
Store
App
Market
Dashboard
Mailer
TimeZone
Public
HTML API
Public API
(Flash)
MSP
Public
Server
HTML
Renderer
HTML SEO
Renderer
Flash
Renderer
Flash SEO
Renderer
Sitemap
Renderer
Robots.txt
Renderer
User
Server
Template
Viewer
ContactsHUBActivity
Site
Members
Store Mgr
Comments
Snapshoter
User Pref
Feed Me
Shout-out Hotels
PETRI
Site Pref
Dist LoggerSlicer
eCom
Renderer
eCom Cart
eCom
Checkout
eCom
Catalog
eCom
Orders
Payment
Facade
Account Info
HTML API
HTML
Embeder
BlogMobile
Mostly writes
2 Data centers
Db active-standby (preferably active-active)
Performance < 2s 99%
Serves mostly site builders
Uptime > 99.9
Mostly reads
>2 Data centers
Db active-active(-active)
Performance < 500ms 99%
Serves mostly site viewers
Uptime > 99.99
51. @aviranm
Microservice or Library?
Do I create deployment dependency?
What is DevOps overhead (managing middleware) ?
Who owns it?
Does it have its own development lifecycle?
Does it fit the scalability / availability concerns?
Can a different team develop it?
I need time zone from an IP address
61. @aviranm
Wix’s Company Model
Company
Guild
Guild
Company
Gang GangGang Gang
Product Product
Cross-Engineering Teams
A Guild is a group of people that
share expertise, knowledge, tools,
code and practice
Company focus on large segment
Has all the resources it needs to be
independent
People within the company are aligned
with the Guilds
64. @aviranm @aviranm
Quality = Better Engineers
Better Engineers = Professional Growth
Professional Growth = Investment in People
65. @aviranm
Guild Day
Engineers work 4 days with their company
Thursday is Guild day.
Developers conduct quality enhancing activities with the
Guild.
66. @aviranm
Guild Day Goals
Builds cross-team relationships
Shares knowledge
Assimilate the culture
Lesson learned
Continuous improvement
Promotes innovation
Professional development
@aviranm
70. @aviranm
Guild Week – Games of Gangs
One week each quarter
Pair programming with a person from another company
Enhancing infrastructure
Building tools
Helping companies
Work on open source
Goal #1 – Improve engineering skills and
quality