High Performance Architecture Patterns
Celso Crivelaro @celsocrivelaro
$ whoami > Celso Crivelaro- Engineer and MSc in Computer Engineering- Dev Ruby / Python / Java
@celsocrivelaro
http://crivelaro.me
SMTP Locaweb- Transaction email platform- Fast and high quality email sending- Live reports- Integration by SMTP Protocol and HTTP API
- 2,5 Millions of messages per day- + 2 years
High Availability
Resource Consumption
Disk
Memory
Band-width
Processor time
Logs
GC
Open Connections
Deadlocks
Stop all disk activities
Swap
Slowness
Services stop responding
Queues Amount Workers Slowness
Integrations always fails!
Integration Fails alwaysInternal
External
DB API Storage Network
API ISP HopCloud
Map hidden integrations
E.g. DNS
Failing Fast reduces transient errors
Never trust in default timeouts
Threads Timeouts to get rid of deadlocls
Internal Little timeout
External Depends: The least possible
1 2 3 5 8 n
Fibonacci Proportion
...
Isolate Critical Components
Panel / API
Painel Web Internal API - HTTP
Resources
Connection Pool App Server Business
Rules Integrations
App Internal APIApp Panel
Painel Web API - HTTP
Resources
Conn. Pool
App Server
Business Rules Integrations
Resources
Conn. Pool
App Server
Business Rules Integrations
Less Components ==
Less Problems
Availability
ConsistencyTolerance to network partition
Availability
Consistency
Partition Tolerance to network partition
whether system is available or not
Availability
ConsistencyTolerance to network partition
Same data in all nodes
Availability
ConsistencyTolerance to network partition
Tolerante when a network fails
Availability
Consistency Partition Tolerance
Postgres
Availability
Consistency Partition Tolerance
DNS
Availability
Consistency Partition Tolerance
Protocols
Evaluate which one is acceptable to your
platform
Pool of Resources
App
Connection
Resource
Connection
Connection
Connection
Connection
Controlled Timeouts
Controlled Resource Consumption
Avoid opening/closing connections overhead
Make your data closer to your app
When use cache
App API
DB
Default Cache Strategy
App
Cache
Source
1
2
3
Hot Cache Strategy
App Cache Source2 1
LB
App
App
App
App
Load Balance Strategy matters!
Decoupled Architecture
Slow Processing
Fast processing
Asynchronous Processing
Authentication Message Transformation MTA ProvidersUser
Message Persistence Consolidation
Background jobs
Messaging frameworks
How to discover bottlenecks?
Test your limits...
Load Test
Stress Test
Peak Test
Grafana + InfluxDB
Other scalabity patterns
http://use-the-index-luke.com
Thank you!
Celso Crivelaro@celsocrivelaro
[email protected]