MicroCPH 2019 conference in Copenhagen (https://microcph.dk/) abstract:
So you’ve decided to migrate from monolith to microservices, what next? Such a redesign to service-oriented architecture (SOA) is a long, arduous journey that benefits from an incremental, iterative approach. Yet, such a migration often must be done while still shipping new features, accelerating developer velocity, and growing the team in addition to ensuring there are no performance regressions.
This talk will focus on how Airbnb is building, operating, and scaling its expanding network of services. Though our re-architecture to SOA is still ongoing, we are already seeing various benefits including improved performance, developer productivity, build and deploy times, and site reliability.
Key takeaways:
* Understand design principles for building scalable, performant services
* Plan for dependencies: how to sequence decomposition into services and an API gateway
* Learn best practices for standardization, reliability, and performance when migrating architecture
* Identify ways to shift product culture to empower migration work
* Recognize tradeoffs with operating microservices
30. MIDDLE TIER
Shared business logic
Servicetypes
STRICT FLOW OF DEPENDENCIES
PRESENTATION
Synthesize
DERIVED DATA
Shared context, multiple sources
DATA
Entity read and writes
@jessicamtai
31. MIDDLE TIER
Shared business logic
PRESENTATION
Synthesize
DERIVED DATA
Shared context, multiple sources
DATA
Entity read and writes
Servicetypes
STRICT FLOW OF DEPENDENCIES
@jessicamtai
32. MIDDLE TIER
Shared business logic
PRESENTATION
Synthesize
DERIVED DATA
Shared context, multiple sources
DATA
Entity read and writes
Servicetypes
STRICT FLOW OF DEPENDENCIES
@jessicamtai
33. MIDDLE TIER
Shared business logic
DERIVED DATA
Shared context, multiple sources
DATA
Entity read and writes
PRESENTATION
Synthesize
Servicetypes
STRICT FLOW OF DEPENDENCIES
@jessicamtai
38. Homes data
service
Shared
database
Monorail
Data access query
Business logic
3.Migratecoreproductviews
Presentation view
Homes
database
Pricing derived
data service
Pricing trends
data store
Checkout
presentation
service
@jessicamtai
39. Homes data
service
Shared
database
Monorail
Data access query
Business logic
4.Migratecoreproductwrites
Presentation view
Homes
database
Homes
validation
middle-tier
Pricing derived
data service
Pricing trends
data store
Checkout
presentation
service
@jessicamtai
54. Writecomparison
DUAL WRITE TO SEPARATE DATABASES
Presentation service
Write validation
middle tier service
Write path A
Write path B
Data service
(production)
Data service
(shadow)
Consumer +
offline comparison
framework
Monorail
Payload A Payload B
@jessicamtai
55. s
Writecomparison
DUAL WRITE TO SEPARATE DATABASES
Presentation service
Write validation
middle tier service
The only write path
Data service
(shadow)
Monorail
@jessicamtai
59. ! Production traffic with partially complete service
○ e.g. batch API /loadUsers
○ Fetch users only by user id
! Unblock clients
Migratebyendpoint
@jessicamtai
66. Service
Service&clientsetup
Business logic
Server metrics
Server
diagnostics
Startup /
teardown
Endpoint logic
Metrics
Data
validation
Server
transport
Server
resilience
Java client
Ruby client
Metrics
Client
transport
Data
validation
Error
handling
Resilience
Metrics
Client
transport
Data
validation
Error
handling
Resilience
Type
checking
@jessicamtai
67. Service
Endpoint logic
Service&clientsetup
Business logic
Server metrics
Server
diagnostics
Startup /
teardown
Dashboard
Dashboard
Alert
Alert
Alert
Runbook
documentation
Metrics
Data
validation
Server
transport
Server
resilience
Java client
Ruby client
Metrics
Client
transport
Data
validation
Error
handling
Resilience
Metrics
Client
transport
Data
validation
Error
handling
Resilience
Type
checking
@jessicamtai
68. Service
Endpoint logic
Service&clientsetup
Business logic
Server metrics
Server
diagnostics
Startup /
teardown
Dashboard
Dashboard
Alert
Alert
Alert
Runbook
documentation
Metrics
Data
validation
Server
transport
Server
resilience
Java client
Ruby client
Metrics
Client
transport
Data
validation
Error
handling
Resilience
Metrics
Client
transport
Data
validation
Error
handling
Resilience
Type
checking
@jessicamtai
70. IDL
Service
Endpoint logic
Business logic
Server metrics
Server
diagnostics
Startup /
teardown
Dashboard
Dashboard
Alert
Alert
Alert
Runbook
documentation
Metrics
Data
validation
Server
transport
Server
resilience
Java client
Ruby client
Metrics
Client
transport
Data
validation
Error
handling
Resilience
Metrics
Client
transport
Data
validation
Error
handling
Resilience
Type
checking
@jessicamtai
71. ThriftIDL
API FRAMEWORK
/** Batch request for demo data */
struct LoadSomeDataRequest {
1: optional set<i64> ids
/** Some extra context baz */
2: optional bool fooBar (personal)
}
@jessicamtai
72. ThriftIDL
API FRAMEWORK
/** id to data response */
struct LoadSomeDataResponse {
1: optional map<i64, SomeData> data
}
@jessicamtai
/** Batch request for demo data */
struct LoadSomeDataRequest {
1: optional set<i64> ids
/** Some extra context baz */
2: optional bool fooBar (personal)
}