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
Platforms
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
Integrations always
fails!
Integration Fails always
Internal
External
DB API Storage Network
API ISP HopCloud
Map hidden
integrations
E.g. DNS
Fail Fast
Failing Fast reduces
transient errors
Timeouts
Never trust in
default timeouts
Threads Timeouts to get rid of deadlocls
Internal Little timeout
External Depends: The least possible
Retry
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
Redundancy
Health Check
Scalability
CAP Theorem
Availability
Consistency
Tolerance
to network
partition
Availability
Consistency
Partition
Tolerance
to network
partition
whether system is
available or not
Availability
Consistency
Tolerance
to network
partition
Same data in all nodes
Availability
Consistency
Tolerance
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
Cache
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 Source
2 1
Load Balacing
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
Telemetry
Grafana + InfluxDB
Other scalabity
patterns
Indexes
Sharding
References
http://use-the-index-luke.com
Thank you!
Celso Crivelaro
@celsocrivelaro
celsocrivelaro@gmail.com

High Performance Architecture Patterns