A nuvem reforça alguns conceitos antigos de criação de arquiteturas da Internet altamente escaláveis e introduz alguns novos conceitos que mudam completamente o modo pelo qual os aplicativos são criados e implantados.
Para usufruir do benefício completo de Nuvem, incluindo a sua flexibilidade e escalabilidade, é importante compreender os serviços, recursos e melhores práticas em Cloud Computing. Esta palestra fornece uma visão geral técnica e destaca melhores práticas arquiteturais para ajudá-lo a projetar arquiteturas eficientes e escaláveis.
2. Daniel Checchia…. Quem??
• +30 anos em Tecnologia
• Passagem por todos os grandes e-Commerce nacionais
(americanas.com, shoptime.com, submarino.com,
pontofrio.com), empresas de internet (imovelweb.com,
zap.com.br) e startups (psafe.com, sitepx.com).
• Especializado em Arquitetura Corporativa,
Infraestrutura, segurança e Cloud Computing.
• “T-Rex” evoluído J
2
3. O que eu faço….
§ Planejamento Estratégico TI
§ Arquitetura Corporativa de TI
§ Consultoria Estratégica
§ Mentoring para Startups
§ CTO Virtual ou On Demand
§ Hands on
§ Lavo
§ Passo
§ Cozinho....
3
5. Próximas Palestras
2013:
12/11 - Melhores Práticas para Hosting de Aplicações na AWS
19/11 - Criando aplicativos tolerantes a falhas na AWS
2014:
20/01 - Framework de Arquitetura para Cloud Computing
* Lançamento do eBook!
5
6. Licenciamento desta
Apresentação
Atribuição-Uso Não-Comercial-Compatilhamento pela
mesma licença 2.5 Brasil
Você pode:
• copiar, distribuir, exibir e executar a obra
• criar obras derivadas
Sob as seguintes condições:
Atribuição. Você deve dar crédito ao autor original, da forma
especificada pelo autor ou licenciante.
Uso Não-Comercial. Você não pode utilizar esta obra com
finalidades comerciais.
Compartilhamento pela mesma Licença. Se você alterar, transformar, ou criar outra
obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença
idêntica a esta.
6
8. “Quase” zero de
investimento inicial
Modelo Tradicional:
• Sala “CPD” (NoBreaks, Geradores, ar condicionado,
segurança física, servidores, roteadores, switches, etc)
Outsourcing:
• Aquisição servidores, switches, contratação links
Cloud Computing:
• OPEX
8
9. Infraestrutura “Just-in-time”
Modelo Tradicional:
• “Vítima do próprio Sucesso da Aplicação”
• Dimensionamento no “TOPO” e pelo “pior cenário”
• Alta ociosidade de infraestrutura
Cloud Computing:
• Auto-escalonamento em momento de “pico”
• Pay-as-use
9
13. Ciclo de Desenvolvimento
mais eficiente
• “Clone” o ambiente de Produção de forma rápida
• Ciclo de desenvolvimento encurtado e mais ágil
•
Beanstalk
• Deploy automatizado com testes unitários
• Jenkins
13
15. Construindo Arquiteturas
escaláveis
Características de um aplicativo verdadeiramente
escalável:
• Aumento de recursos resulta em um aumento
proporcional no desempenho
• Um serviço escalável é capaz de lidar com a
heterogeneidade
• Um serviço escalável é operacionalmente eficiente
• Um serviço escalável é resiliente
• Um serviço escalável deve tornar-se mais rentável
quando cresce (Custo unitário diminui à medida que o
número de unidades aumenta)
15
21. Sem medo das Restrições
• Cloud foi planejada para um modelo on-demand – não
para um moving AS-IS de seu ambiente
• 1 servidor de 64Gb de RAM = X servidores em auto-scalling
• Muito IO de Leitura = Memcached
• Busca em banco = CloudSearch (ElasticSearch, Solr)
• E outras soluções escaláveis!
21
22. Administração “Virtual”
• Com a mudança de Paradigma, vem a agilidade
• Ambiente “ganha” em performance e escalabilidade
• Equipes Desenvolvimento e Operações “andam” juntas
para gerir o ambiente
22
24. Arquitetura Resiliente
“Design for failure and nothing will fail”
Seja um pessimista ao projetar arquiteturas em nuvem;
assuma que as coisas vão falhar.
Em outras palavras, sempre que projetar, inclua a
recuperação automática de falhas (redundância de
regions, de banco e etc) em seu projeto.
24
25. Arquitetura Resiliente
Assuma que seu hardware irá falhar
Assuma que interrupções ocorrerão (AWS, Links, etc)
Assuma que algum desastre vai atingir a sua aplicação
Assuma que você vai ser atingido com mais do que o
número esperado de solicitações por segundo alguns dias
• Assuma que, com o tempo, o seu aplicativo falhará
também
•
•
•
•
Ser pessimista é fundamental para a criação de uma
arquitetura (software e infra) resiliente.
25
26. Separe seus Componentes
Cloud reforça o princípio de design da SOA, onde quanto mais
segregado e flexível forem os componentes do sistema,
mais ele será escalável.
Fundamental para arquiteturas em nuvem:
• Segregação dos seus componentes;
• Construção de sistemas assíncronos;
• Dimensionamento para crescimento horizontal
26
27. Separe seus Componentes
u Trate cada módulo como uma “Caixa Preta”:
• Engine de Busca
• Banco de Dados
• Frontend
• Backend
• Banco de dados
u Use APIs para “Falar” entre cada módulo
u Sempre que possível, implemente queues e torne sua
aplicação Assincrona.
27
28. Implemente Elasticidade:
Automatize sua Infraestrutura
• Use as APIs de gestão Cloud
• Crie uma biblioteca de “Recipes” – Scripts mais utilizados
• Gerencie suas configurações e Deploy utilizando-se de
agents dentro de suas AMIs
• Opscode Chef
• CFEngine
• Puppet
• Git hacks
28
29. Implemente Elasticidade:
Bootstrap de suas instâncias
• Crie “Roles” para sua
aplicação (“DBServer”,
“WEBServer”, “DEVServer”,
etc)
• Busque estas informações
durante o Boot para
configurar sua instância
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html!
29
30. Pense Paralelo
A beleza da nuvem aparece quando você combina
elasticidade e paralelismo
• Garanta que sua aplicação seja assincrona e “stateless”
• Sempre que possível, utilize APIs entre o front e o
Backend
• Utilize load balance e cache tanto no frontend como no
backend, nas APIs e XMLs
Estes cuidados permitirão o rápido escalonamento de sua
aplicação de forma automatizada
30
31. Mantenha seus dados perto
das requisições
Keep dynamic data closer to the compute and static data
closer to the end-user
• Segregue dados dinâmicos do estático por sub-domínios
• Coloque dados estáticos em uma CDN (ou crie um cache)
• Mantenha seus servidores de Processamento, banco de
dados e frontend na mesma region – minimize custos e
latência
31
33. Proteja os dados em trânsito
•
Esqueça HTTP – Use sempre HTTPS:
• Entre Browser e WebServer
• Entre Front e APIs
•
Utilize VPNs:
• Entre seu escritório e seu provedor de Nuvem
• Entre Notebooks e Tablets e seu provedor de
Nuvem
•
Faça Segregação de Ambientes:
• Crie VPCs (=VLANs) entre recursos da AWS
• Seja rígido nas regras de firewall entre as
VPCs
33
34. Proteja seus dados
armazenados
Se você está preocupado com o armazenamento de dados
sensíveis e confidenciais na nuvem:
• Criptografe seus dados sensíveis antes do upload (PGP)
• Use EFS para armazenar seus dados (windows ou Linux)
• Ou Criptografe seu Volume (EBS) - EncFS, Loop-AES, dmcrypt, TrueCrypt
• OpenSolaris suporta ZFS
PROTEJA suas Chaves Criptográficas! Sem elas, você pode
ficar sem seus dados!!!
34
35. Protect your APIs
credentials
AWS fornece dois tipos de credenciais de segurança:
• AWS Access Keys
• Certificados X.509
AWS Access Keys são compostas de dois “pedaços”:
• access key ID
• secret access key
Gerenciando Credenciais (atualizado recentemente):
Parte 01:
http://www.elastician.com/2009/06/managing-your-aws-credentials-part-1.html
Parte 02:
http://www.elastician.com/2009/06/managing-your-aws-credentials-part-2.html
35
36. Protect your APIs
credentials
Access Key são utilizadas para:
• Comunicação entre serviços via API
• Comunicação entre sua instância e as APIs
• Toda comunicação é via HTTPS
Uma boa prática:
• Crie um usuário específico para uso com as APIs
• Crie um script de geração periódica de novas chaves
• Utilize o Bootstrap para armazenar suas Access Keys
Um erro comum: Armazenar as Access Keys em arquivos
na sua própria AMI! Prefira utilizar o processo de Bootstrap
para passar suas Access Keys para as instâncias
36
37. Manage multiple Users and
their permissions
AWS Identity and Access Management (IAM), é a central
de controle de acessos da AWS.
• IAM é seguro por natureza. Cada usuário criado inicia
sem acesso. O administrador precisa atribuir quais
serviços e quais privilégios ele terá.
• Usuários podem habilitar Multi-factor para autenticação
• Usuários e senhas são distintos das Access Keys
37
38. Proteja sua Aplicação
Security Groups:
• Aplicados em instâncias
ou para uma VPC
• Regras de
“entrada” (ingress Rules)
Configure o Firewall de seu SO:
• Linux: Netfilter / IPTables
• Windows Firewall
Seja restritivo entre VPCs
38
39. Proteja sua Aplicação
• Crie snapshots de suas AMI para testar os patches
• Aplique regularmente os patches para seu SO em sua
AMI de testes
• Revalide sua aplicação após os patches para ver se não
“quebrou” nenhuma funcionalidade após o patch
• Garanta que TODAS suas AMIs estão com os últimos
patches
• Invista tempo para criar scripts de validação de
segurança e para automatizar este processo de
validação e atualização
39