Tag Archives: Cases

Arquitetura do Twitter e Google Talk: Lições Aprendidas

The only real mistake is the one from which we learn nothing

– John Powell, The Secret of Staying in Love (1990), p. 85

Se você se interessa por arquitetura de software, mais precisamente, sobre questões de escalabilidade de sistemas e soluções (software), o blog Highscalability.com é leitura obrigatória.

Algum tempo atrás eu li no blog acima um post muito interessante sobre a arquitetura de software do Twitter. O título é “Scaling Twitter: Making Twitter 10000 Percent Faster” e além da discussão de como foi a solução de arquitetura que permitiu que o Twitter ficasse 1,000% mais rápido (o post é de 27/06/2009), descreve detalhes de linguagem, tecnologias, problemas e soluções, enfim, uma aula de como funciona o “coração” de software do Twitter (lá quase tudo é open-source).

Não vou reproduzir em detalhes aqui, a leitura é interessante e valem os 10 minutos. O que me chamou a atenção na época foram as lições aprendidas em cada um dos projetos, que o autor apresenta no final do texto.

Estas informações são valiosas, priceless! Como afirmou John Powell (citado acima): “O único erro de fato é aquele do qual nada aprendemos“.

Você tem uma reunião de “lessons learned” no seu projeto? Não? Você e sua equipe estão perdendo uma excelente oportunidade de evoluir, de aprender com os erros e acertos e, principalmente, de não repetir os mesmos erros. Um conselho de amigo: invista alguns minutos com o grupo ao final de cada etapa do projeto e documente todas as abordagem que deram certos e aquelas que não devem ser repetidas (erros).

Vamos ao que interessa. Abaixo, bem resumido, reproduzo algumas “lessons learned” de dois projetos famosos: Twitter e Google Talk.

Twitter: Lições Aprendidas

  1. Compartilhe idéias com outros (comunidade). Não se esconda e tente resolver o problema sozinho. Muitas pessoas brilhantes estão dispostas ajudar (você precisa pedir)
  2. Encare seu planejamento de escalabilidade como um plano de negócio. Reuna um time de experts para ajudar você
  3. Construa o que você precisa. O Twitter investiu muito tempo tentando soluções de terceiros que pareciam funcionar, mas não eram adequadas. Quando você mesmo desenvolve pelo menos você tem o controle e pode adicionar as funcionalidades que precisar
  4. Pense em mecanismos de detecção de usuários com intenção de “derrubar” o sistema. Coloque limites de utilização de forma que nenhum deles, isoladamente, coloque seu sistema “no chão”
  5. Não utilize o banco de dados como única alternativa de armazenamento. Nem tudo necessita de um “SQL join” gigante. Cache é a palavra mágica. Pense em formas alternativas de chegar no mesmo resultado, disponibilize dados em memória. Veja detalhes de como o Twitter fez isto neste link
  6. Faça com que sua aplicação seja “modularizada” ou “particionável” desde o início. Você vai entender porque quando precisar escalar a mesma
  7. Otimize o banco de dados: indexe tudo, faça um tunnig das queries, desnormalize
  8. Teste tudo. Twitter tem agora uma suite de testes completa de forma que se ocorrer um problema de cache eles detectam o problema antes da nova versão ser liberada
  9. Muitos problemas de performance não vem da linguagem, mas de como a aplicação foi projetada
  10. Transforme o serviço do seu website em uma API aberta. Grande parte do sucesso do Twitter é graças à sua API. Isto permite que a comunidade crie inúmeros serviços e aplicativos com os quais será difícil para os concorrentes copiarem. Amazon e Google também fazem isto. Você nunca poderá fazer todo o trabalho sozinho, a criatividade do seu time tem limites.

Google Talk: Lições Aprendidas

  1. Identifique corretamente o que deve ser mensurado. No caso do Google Talk, a questão principal não é saber quantos Instant Menssages (IMs) o sistema entrega ou quantos usuário ativos o sistema suporta. Por exemplo, uma parte complicada de um IM é como exibir o status de todos os usuários conectados. A conta não é linear: UsuáriosOnLine x ListaDeAmigos x MudançaDeStatusOnline. Uma grande lista de amigos (“buddy list”) é um problema a ser endereçado, a quantidade de IMs não é o problema
  2. Simulação em “ambiente real”. Testes em ambiente controlado são bons mas não dizem muita coisa. Simule mudança de status por semanas e meses
  3. Planejamento contra problemas operacionais. O que acontece quando os servidores são reinicializados e o sistema retorna com o cache vazio?
  4. Um sistema “escalável” é um sistema distribuído. O que o Google fez foi adicionar tolerância a falhas em todo componente do sistema. Tudo pode falhar.

SOA precisa ser cara?

opensourcesoa(fonte: Mike Davis, IT Toolbox)

Não ! Primeiramente é importante lembrar que não existe uma solução única, seja ela open-source ou não, que seja o “best of breed“, ou seja, felizmente sua empresa não precisa ficar “refém” de nenhum fornecedor.

Como já afirmei acima, mesmo as soluções open-source não são a solução para toda e qualquer iniciativa em direção a arquitetura orientada a serviços (SOA). Não existe a “bala de prata” e nem um fornecedor único que tenha a solução para todos os seus problemas, com um preço que você pode pagar.

A questão que apresento aqui é que existem alternativas que podem devem ser avaliadas.

O que eu sempre falava nos seminários sobre SOA é que a utilização de produtos open-source tem algumas vantagens. Algumas delas são:

  • Validação da arquitetura proposta: uma espécie de prova de conceito da macro-arquitetura proposta
  • Custo: solução de baixo custo antes de realizar grandes investimentos em soluções proprietárias
  • “Hands-on”: em geral é preciso “colocar a massa” para instalar os softwares… …não espere “Next->Next->Finish“… Isto permite que sua equipe conheça como as soluções funcionam de verdade

Algumas soluções opensource disponíveis

A lista a seguir apresenta algumas soluções open-source para auxilia-lo a adotar uma estratégia SOA:

Cases de Sucesso

logo-nespresso

Fornecedor de vendor machines de cafés, a empresa utilizou o Mule ESB para integrar sua central de voz (Nortel), seu ERP, seu sistema de controle de estoque etc. Case detalhado aqui

lazokytoyota2 Lakozy é uma subsidiária da Toyota na Índia, o case é da implantação de um workflow opensource para agilizar os processos internos – sem mais a utilização de formulários em papel – e algumas funcionalidades interessantes como integração com serviços de short message (SMS)

inep Órgão do Ministério da Educação do Brasil. O case detalhado aqui comenta a utilizacão de alguns produtos da JBoss/Red Hat: JBoss Enterprise Application Platform, JBoss Enterprise Portal Platform, JBoss Operations Network (JON) e JBoss Seam Framework

Como estes existem centenas de cases de sucesso.

Conclusão

A mensagem mais importante é que SOA é uma mudança de “estilo de vida”, de pensar em soluções como aplicações compostas, em serviços, padrões abertos, objetivos de negócio, com ganhos de longo prazo (que são os mais sustentáveis). Não ter orçamento para iniciar SOA é uma daquelas desculpas que damos quando queremos perder peso e não temos como pagar uma academia. Para a maioria de nós, se faz necessário pagar uma academia para perder peso ou basta mudar o estilo de vida? Responda você mesmo…

Implementar esta abordagem de arquitetura passa por :

  • Mudanças culturais: como gestor, arquiteto esta é uma tarefa sua; você precisa estudar, conhecer, evangelizar
  • Planejamento inicial: é necessario tempo para a construção da arquitetura de alto nível, da “big picture”. Porém é este “blueprint” que irá guiar todas as modificações propostas. Se necessário peça ajuda de terceiros mas, não esqueça de colocar a visão da sua empresa. Isto ninguém pode fazer, apenas você
  • “Quick Wins”:  para os mais crédulos, resultados práticos. A utilização da abordagem SOA+Metodologia Ágil pode ajudá-lo a conseguir resultados rápidos (viva o SCRUM!)
  • Prova de Conceito da sua Arquitetura: é neste ponto que soluções open source vão ajudar você; o investimento inicial é baixo, os ganhos de conhecimento para a sua equipe  ”não tem preço”… …o restante o Mastercard corporativo compra :-)
  • Padrões abertos:  lembre-se que sua solução open source pode ser substituída por middlewares proprietários – seja por questões de performance, missão crítica, volume a ser processado etc – utilizando padrões abertos de integração, Web Services, REST, sua migração para soluções fechadas será suave
  • Pensar Grande, começar pequeno: construa a “big picture”, inicie com resultados de curto prazo, faça uma análise de “Visibilidade da Solução X Tempo de Desenvolvimento”, divida em quatro quadrantes e escolha aqueles projetos com maior Visibilidade/Retorno e com menor tempo de desenvolvimento

Não deixe de aproveitar o feriado! Abraços,

Davi