O documento discute microserviços e concorrência com PostgreSQL. Aborda como o PostgreSQL usa MVCC para permitir que múltiplas transações acessem a base de dados simultaneamente de forma consistente. Também discute os benefícios e desafios de arquiteturas de microserviços, incluindo escalabilidade, manutenção e integridade dos dados entre serviços distribuídos.
3. Concorrência
● Problema de Atualização Perdida
● Conflitos com acesso ou alteração simultânea de
dados
● Web Applications
● Cloud
4. MVCC (Multiversion concurrency control)
● Cada transação vê o seu próprio snapshot da base
de dados
● Mudanças feitas por uma transação não serão
vistas por nenhuma outra até que sua transação
seja confirmada
● Leitura nunca bloqueia a escrita e escrita nunca
bloqueia a leitura
● Melhor desempenho
5. PostgreSQL Concurrency with MVCC
● Toda transação obtém um ID, chamado XID
● O PostgreSQL armazena informações das
transações em cada linha
● É usada para determinar se uma linha está visível
para a transação ou não
● Cada transação vê uma versão do banco de dados,
independentemente do estado atual dos dados
6. MVCC com INSERTS e SELECTS
● Ao inserir uma linha, o PostgreSQL armazena o
XID na linha, como xmin
● Cada linha que foi inserida e tem uma xmin que é
menor que o XID da transação atual
● Quando é feito o commit e outras transações são
iniciadas, elas poderão visualizar a nova linha
porque satisfazem a condição xmin < XID
13. Monolítico
● Se cair um DB… cai tudo
● Aplicação gigante
● Evolução lenta
● Difícil manutenção
● Não é escalável
● Backups gigantes
14. Microservices
● Serviços com baixo nível de acoplamento e
interdependência
● Escalabilidade do sistema
● Redução de custos
● Flexibilidade de tecnologia
● Facilidade de colocar alterações em produção
● Desafio
15. Patterns homologados
● Cada microserviço com o seu próprio DB
● Temos um DB para muitos microserviços
Site: microservices.io/index.html
16.
17.
18. Microserviços: não tem nada de ruim?
● Devemos lidar com a complexidade adicional da
criação de um sistema distribuído.
● Implementar casos de uso que abrangem vários
serviços sem usar transações distribuídas é difícil
● Integridade dos dados