institucional | estratégias de i/o para escalabilidade

23
Estratégias de I/O para escalabilidade Renato Lucindo

Upload: totvs

Post on 25-Jan-2017

238 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Estratégias de I/O para escalabilidade

Renato Lucindo

Page 2: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Sobre mimRenato Lucindo

● Twitter: @rlucindo● Github: /lucindo

Page 3: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Agenda● Escalabilidade● 2000: The C10K Problem

○ Threads○ Events○ Events + Threads○ Events + Lightweight Threads

● 2013: The C10M problem

Page 4: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Escalabilidade● Definição: + hardware ⇒ + carga

● Horizontal○ hardware ⇒ mais máquinas

● Vertical○ hardware ⇒ máquina maior

Page 5: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Disclaimer: Sistemas DistribuídosPRINCIPAL

● Escala horizontal● Alta disponibilidade

FOCO DA APRESENTAÇÃO

● Escala vertical ¯\_(ツ)_/¯

Page 6: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Mean time...● MTBF e MTTF

○ Mean time between failures (repair)○ Mean time to failure (replace)

● MTTR○ Mean time to repair

Page 7: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Trade-off

↑ Escalabilidade Vertical ⇒ ↑ MTTF | ↑ MTBF

Page 8: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Escalabilidade Vertical

Sistemas I/O bound ⇒ Escalabilidade de I/O

Page 9: INSTITUCIONAL | Estratégias de I/O para escalabilidade

2000: The C10K Problem● Máquina $1200:

○ 1 core (1GHz)○ 2 GB RAM○ 1 GB placa de rede

● Objetivo:○ 10K clientes silmultâneos (conexões)○ 20K:

■ 50KHz■ 100Kbytes■ 50Kbits/sec

Page 10: INSTITUCIONAL | Estratégias de I/O para escalabilidade

I/O e Paradigmas de ConcorrênciaI/O:

● Síncrono● “Assíncrono”

Concorrência:

● Processos, threads e locks● Eventos e callbacks● Processos leves e mensagens

Page 11: INSTITUCIONAL | Estratégias de I/O para escalabilidade

I/O no Unix (Linux)Network I/O

● Sockets = file descriptors● Operações atomicas = syscalls● POSIX I/O

○ Default: blocante e buffered○ Não Blocante: O_NONBLOCK○ Assíncrono: aio_*

● Polling/Events

Page 12: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Thread per connection (B)● 1 thread para cada conexão● I/O blocante● Isolamento de recursos entre threads● Simples e fácil de programar

● 2016: 10K Threads no Linux

Page 13: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Thread pool (B)Little's law: The long-term average number of customers in a stable system L is equal to the long-term average effective arrival rate, λ, multiplied by the average time a customer spends in the system, W; or expressed algebraically: L = λW.

The average number of threads in a system is equal average request arrival rate (requests per sec), multiplied by the average response time.

Threads = (Requests/sec) X Response Time

Ex: com response time de 50ms são necessárias 500 threads para C10K

Page 14: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Single thread events (NB)● I/O não blocante● File descriptor polling (select, epool, etc)● Reactor pattern● Callbacks

● Subutilização de recursos● Callback-hell

Page 15: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Single thread events (NB) (cont.)

Page 16: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Events + Threads (NB)● I/O não blocante● Evento e I/O tratados por threads diferentes● Multithreaded reactor pattern

● Trade-off: Locks e callbacks

Page 17: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Events + Threads (NB) (cont.)

Page 18: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Events + Lightweight threads (NB)● I/O não blocante● Runtime/VM● Escala para milhares de lightweight threads com poucas threads físicas● CSP e Actor Model

○ Troca de mensagens○ Funcional ou stateful○ Scheduler preemptivo*

Page 19: INSTITUCIONAL | Estratégias de I/O para escalabilidade

2013: The C10M problem● Máquina $1200:

○ 8 cores (?GHz)○ 64 GB RAM○ 10 GB placa de rede

● Objetivo:○ 10M clientes silmultâneos (conexões)

Page 20: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Soluções C10M vs. C10K● Kernel é o problema● Kernel-bypass:

○ Packets (ou até stack do protocolo inteira)○ Gerenciamento de memória○ Gerenciamento de cores○ Mas e a nuvem :~(

● Sugestões em 2000 para o C10K

Page 21: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Recap● Sistemas Distribuídos: Escalabilidade horizontal + alta disponibilidade.● Escalabilidade vertical faz diferença.● Escalabilidade de I/O (rede): não-blocante.● Estratégias de concorrência

○ (B) Thread-per-connection/Thread-pools○ (NB) Single-threaded events○ (NB) Events + threads○ (NB) Events + lightweight threads

● Fullstack: seu banco de dados acompanha sua aplicação ?

Page 22: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Obrigado :)

Page 23: INSTITUCIONAL | Estratégias de I/O para escalabilidade

Leituras● UNIX Network Programming (Third Edition)● Seven Concurrency Models in Seven Weeks