74
High Performance Architecture Patterns Celso Crivelaro @celsocrivelaro

High Performance Architecture Patterns

Embed Size (px)

Citation preview

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 alwaysInternal

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

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

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 Source2 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

[email protected]