Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Implementando suporte a multi-tenancy em uma aplicação crítica

Implementando suporte a multi-tenancy em uma aplicação crítica

Esta apresentação é indicada para quem planeja escalar e distribuir o seu sistema em nuvem ou tem curiosidade sobre o assunto.

Vou compartilhar informações valiosas sobre o que aprendemos com os problemas e desafios encontrados ao longo dessa jornada e boas práticas sobre o tema que poderão lhe ajudar a implementar a sua própria solução e a migrar o seu sistema ou o da sua empresa.

Você verá o que acontece quando soluções que operam em caráter on-premise, dentro dos sites ou data centers do cliente, precisam se tornar multi-tenant, suportando múltiplos clientes ou organizações.

Foi o que aconteceu com a Evolux, uma solução web de atendimento por voz construída para operações críticas e de alto valor agregado e que entrega toda a tecnologia necessária para um Call Center como serviço.

Victor Torres

October 20, 2018
Tweet

More Decks by Victor Torres

Other Decks in Technology

Transcript

  1. Sobre mim Sou desenvolvedor de software para web. Atualmente trabalho

    com web scraping de dados utilizando Python na Scrapinghub. Trabalhei mais de três anos com telefonia utilizando Python e FreeSWITCH na Evolux.
  2. Sobre o Evolux É uma solução web de atendimento por

    voz, originalmente construída sob o modelo on-premise para atender operações críticas e de alto valor agregado entregando toda a tecnologia necessária para um CCaaS.
  3. Benefícios Principais pontos positivos para adotar uma arquitetura Multi-Tenant. ➔

    Lower total cost of ownership Apenas uma instância de software para oferecer suporte. ➔ Distributed and scalable Cresça à medida em que é necessário e economize recursos. ➔ High availability Maior tolerância a falhas e sobrevivência a grandes catástrofes. Fonte: Gartner, Magic Quadrant for Contact Center as a Service, North America, 2017
  4. Desafios Principais obstáculos para adotar uma arquitetura Multi-Tenant. ➔ One-size-fits-all

    Menor grau de customização com o objetivo de atingir o maior número de clientes numa economia de escala. ➔ Single point of failure Um único problema pode atingir diversos clientes simultaneamente. ➔ Debugging Cenários mais complexos e difíceis de depurar. Fonte: Gartner, Magic Quadrant for Contact Center as a Service, North America, 2017
  5. Uma arquitetura On-Premise pode oferecer uma maior customização. Fonte: Gartner,

    Magic Quadrant for Contact Center as a Service, North America, 2017
  6. Fases do Multi-Tenant High Availability Redundância e alta disponibilidade de

    recursos Multi-tenancy Única instância da aplicação para múltiplos clientes Distribution Serviços distribuídos entre servidores isolados
  7. Modelos de Multi-Tenancy Segregação de Dados por Schema Existe apenas

    um banco de dados, mas cada cliente possui seu próprio schema Replicação de Instâncias Cada cliente possui uma instância exclusiva da aplicação em execução Segregação de Dados por Banco Cada cliente possui seu próprio banco de dados e não o compartilha
  8. Segregando os dados Em menos de um mês conseguimos fazer

    nosso sistema funcionar com múltiplos schemas. Desenvolvemos um middleware que selecionava o schema baseado no domínio acessado pelo cliente. Muitos frameworks oferecem soluções prontas
  9. A etapa de segregação de dados foi a parte mais

    simples na migração do sistema para o Multi-Tenancy.
  10. Olá, Postgres! Um dos principais motivos para a rápida implantação

    da segregação de dados no Evolux foi o PostgreSQL. Nós já havíamos realizados uma migração do MySQL ao Postgres anteriormente. Melhor suporte a estratégias de lock e múltiplos schemas
  11. SQLAlchemy Escreva suas consultas ao banco de dados programaticamente. Aumente

    a compatibilidade entre backends e facilite a manutenção e futuras migrações utilizando consultas construídas pelo seu ORM. Alguns frameworks já trazem seu próprio ORM The Alchemist, Watercolour & Gouache, Chris Dunn, 2012
  12. Atualize o framework Foi muito difícil atualizar a versão do

    TurboGears, mas foi necessário e abriu diversas possibilidades para a equipe. Não importa se você usa Flask, Django ou outro framework web feito em Python ou outra linguagem: mantenha-o atualizado. Pequenos passos são mais fáceis do que grandes saltos
  13. Replicação de banco É muito simples de fazer e pode

    garantir um grande ganho de performance. Separar uma réplica do banco de dados para um cliente específico, usualmente maior do que os demais, ou para processamento de relatórios pode ajudar bastante. Dá pra fazer isso na sua aplicação on-premise hoje!
  14. Distribuindo sessões A primeira adaptação que precisamos fazer para distribuir

    os serviços foi mover as sessões de usuário. Ao invés de armazená-las em disco, passamos a utilizar o Redis para isso. Você pode utilizar outras soluções
  15. Transporte adequado Passamos a utilizar o RabbitMQ para transporte de

    mensagens e notificações. Além do uso do Redis para transporte não ser recomendado em ambientes de produção, o RabbitMQ oferece alguns benefícios. Confirmação de entrega, DLX, etc.
  16. Aposte em firewalls e protocolos de criptografia como SSL e

    TLS para proteger suas conexões e os dados trafegados através delas.
  17. Fail quickly Recover fast Entenda que o seu serviço irá

    falhar e prepare-o para quando isto acontecer. Faça o que for possível para retomar a operação rapidamente e, de maneira ideal, de forma transparente para o usuário. Descartabilidade com rápido desligamento e reinicialização
  18. Proxy servers Uma maneira simples e confiável de implementar redundância

    na sua aplicação. Nunca sirva sua aplicação diretamente. Utilize um proxy como linha de frente e redirecione o tráfego entre o cliente e o software que desenvolve através dele. Dicas de software - nginx - haproxy Pesquise por estratégias de balanceamento de carga
  19. Métricas e Monitoramento Saiba onde você está para poder estabelecer

    aonde quer chegar. O uso de benchmark de aplicações é uma importante ferramenta para monitorar a performance e desempenho de um software. Dicas de software - sensu - graphite - grafana - new relic - data dog - sentry - bugsnag Qual o impacto de um deploy na sua aplicação?