Design Patterns - Padrões de Projeto
Depois de algum tempo sem post devido a problemas de saúde, estou na ativa novamente. Gostaria de falar um pouco sobre referências para aprendizado de Padrões de Projeto, os famosos Design Patterns. No design de software diversos problemas são comuns. Como é de conhecimento, o GOF(Gang of Four), criou diversos padrões para endereçar este problemas, fornecendo soluções elegantes,reutilizáveis e embasadas em fortes princípios de Orientação a Objetos. Os padrões estão divididos em grupos: criação, estruturais e comportamentais. Mesmo que você não conheça os patterns, com certeza já os utilizou diversas vezes. Vejamos o pattern observer, que no framework .Net é utilizado na construção de eventos. Como os patterns são muitos, decorá-los pode-se tornar uma tarefa árdua e muitas vezes inviável. Você naturalmente acabará absorvendo os patterns mais utilizados pela sua equipe. O interessante é conhecer a função de cada um e possuir boas referências para consulta. Aqui cabe algumas indicações:
Head First Design Patterns: O livro trás de uma forma bem didática o conceito de cada padrão através de pequenas estórias e ilustrações. A abordagem torna o aprendizado de padrões uma atividade divertida. Na minha opinião, deve ser o primeiro livro para introduzir o assunto. Existe uma versão em português para o livro, chamada “Use a Cabeça - Padrões de Projeto”
Design Patterns: Elements of Reusable Object-Oriented Software: Este é o livro dos criadores dos padrões, o GOF. É o Livro de referência obrigatório nas estantes de desenvolvedores e arquitetos. Por se tratar de uma leitura um pouco mais complicada, recomendo a leitura de um livro mais simples, como o Head First mencionado anteriormente.Também existe uma versão em português denomiada “Padrões de Projeto - Soluções Reutilizáveis de Software Orientada a Objetos”
DoFactory: Este site é bem interessante e prático. Os exemplos são simples e mostram bem a estrutura dos patterns. Destaco o site pelos exemplos em C#. Até mais.
Terceira Reunião do Grupo de Arquitetura DotNetArchitecs
Neste próximo sábado(13/12), teremos a próxima reunião do grupo de arquitetura DotNetArchitecs. O Tema central é o DDD - Domain Driven Design e será apresentado pelo Giovanni Bassi, editor da revista .Net Magazine. A após a apresentação do tema, teremos uma rodada de discussão. Venha conferir
Até a próxima
Entendendo o Windows Azure
Sexta-feira(05/11), tive a oportunidade de participar como ouvinte da palestra sobre Cloud Computing com o Windows Azure. A palestra ocorreu na semana de tecnologia da Faculdade Impacta e foi ministrada pelo Dennes Torres com início as 20:30.
O que mais nos motivou a assistir a palestra em uma sexta-feira a noite , foi o fato de haver uma demo de criação de um serviço dentro do Windows Azure. O assunto Cloud Computing e Windows Azure estava muito nebuloso e precisávamos do famoso “estalo” para entender os conceitos. O Dennes Torres participou do PDC e nos trouxe uma visão clara sobre o tema e quais os próximos passos para dar início as primeiras brincadeiras e vislumbrar novas oportunidades. Nas linhas a seguir faço um resumo sobre o que foi mostrado e discutido no evento.
Vou começar por uma definição grosseira sobre o que é o Windows Azure:
“A Microsoft virou uma grande empresa de hosting”
Isso mesmo, um grande hosting, mas um hosting diferenciado, já explico. Inicialmente vou falar sucintamente sobre como funciona uma empresa de hosting. Quando precisamos colocar um site no ar, temos algumas tarefas, precisamos registrar nosso domínio, www.nome.com.br em algum órgão de registro. Em seguida, este domínio precisa apontar para uma máquina na grande nuvem, a internet, na qual os arquivos do seu site e banco de dados estarão presentes. Esta máquina pode estar dentro da sua empresa, ou, você pode contratar um serviço de hosting. Normalmente contratamos um espaço físico que muitas vezes compartilha os recursos da máquina com outros sites. Caso seja necessário mais espaço físico, memória, processador, etc..., pode-se contratar uma máquina dedicada, ou seja, alugar uma máquina exclusiva para a sua aplicação. Há também uma terceira modalidade, contratar um serviço de co-location, ou seja, comprar uma máquina que ficará alocada na empresa de hosting. Qualquer uma das formas, visa diminuir custos e preocupações, pois a responsabilidade de backups, redundância de links e disponibilidade do servidor, fica a cargo da empresa de hosting. Independente da forma de contratação, será necessário conhecimentos especializados para colocar a aplicação no ar, principalmente quando a máquina for dedicada. Tarefas como configurar o servidor web e banco de dados será toda sua. Se for necessário escalar a aplicação, você poderá seguir duas abordagens:
<!--[if !supportLists]-->
- Scale-up: Aumento de recursos de hardware da máquina, como aumento de memória, troca de processador, expansão do espaço em disco.
<!--[endif]-->
<!--[if !supportLists]-->
- Scale-out: Colocar diversas máquinas com características semelhantes contendo cópias da aplicação.
<!--[endif]-->
Alguns problemas nos serviços de hosting nos moldes atuais:
<!--[if !supportLists]-->
-
Scale-up: Toda máquina tem um limite, a estratégia de Scale-up funcionará até certo ponto e em algum momento, teremos que colocar mais uma máquina trabalhando em paralelo para dividir a carga (Scale-out).
-
Arquitetura: Scale-out é excelente, entretanto, devemos nos preocupar com outros detalhes. Para ficar mais fácil o entendimento, vamos nos basear em uma aplicação web. Como teremos diversos servidores com a cópia do nosso site será difícil saber em qual máquina o usuário estará utilizando. Podemos ter casos em que o usuário começa em um servidor e termina o uso em outro. Obviamente quando se troca um servidor por outro, não queremos que a autenticação, sessão ou cache sejam perdidos. Para isso temos que implantar estratégias de centralização de sessão, cache e autenticação.
<!--[if !supportLists]-->
-
Picos de utilização variáveis: Vamos imaginar uma grande loja de e-commerce, em datas comemorativas há picos de utilização e será necessário alugar/comprar mais máquinas para se adequar a utilização. Quando o pico de uso acabar, teremos máquinas subutilizadas o que representa custos desnecessários para a organização.
<!--[if !supportLists]--><!--[endif]-->
Todos os problemas acima, apesar das dificuldades e possíveis desvantagens podem ser endereçados, mas arquitetos, DBAs e especialistas em infra-estrutura serão necessários, e o mais importante, investimentos para sustentar toda esta estrutura.
Imagine abstrair toda esta dificuldade, o desenvolvedor cria uma aplicação web, monta um banco de dados e os publica no hosting. O site está indo bem até o momento, questões de performance e disponibilidade estão dentro dos níveis de serviço acordados. Chegou o natal, há uma previsão de aumento de 1 milhão de usuários, verifica-se que será necessário aumentar o parque de máquinas, e agora? Simples, abre o arquivo de configuração e através de uma tag aumente o número de máquinas para o valor desejado, o hosting automaticamente criará cópias da aplicação, banco de dados e se preocupará automaticamente com o gerenciamento de tudo isto (cache/sessão/Autenticação/Banco de dados), isto é o Windows Azure, um sistema de hosting que vai além de oferecer infra estrutura. Ele oferecerá aplicações de alto nível, sistemas de monitoração da saúde da sua aplicação on-line, praticamente uma revolução na forma de trabalho.
O Windows Azure poderá hospedar um site, componentes de negócio, um banco de dados e oferecer diversos serviços.
Após a apresentação diversas dúvidas surgiram:
<!--[if !supportLists]-->
-
Windows Azure será vendido? Somente a Microsoft oferecerá este serviço?: Não, o Windows Azure não será vendido e sim, somente a Microsoft oferecerá este serviço. Ela está investindo massivamente em datacenters ao redor do globo e detalhes da construção e softwares utilizados não são divulgados. Futuramente recursos que tornam possíveis a concepção do Windows Azure, estarão disponíveis nas próximas versões dos sistemas operacionais da Microsoft, assim empresas de hosting privadas poderão prover serviços semelhantes.
<!--[endif]-->
<!--[if !supportLists]-->
<!--[endif]-->
<!--[if !supportLists]-->
-
Posso portar minha aplicação existente para a plataforma Azure?: Sim, entretanto alguns ajustes serão necessários, como a lógica de acesso a dados, ou seja, acesso ao banco de dados na nuvem, o SQL Services.
<!--[endif]-->
<!--[if !supportLists]-->
-
Qual será a forma de licenciamento e preços?: Pelo site do Windows Azure, o preço será baseado no consumo. Você poderá alterar a utilização a qualquer momento, comprando ou retirando recursos quando necessário. Durante o período de CTP não há encargos na utilização, apenas certos limites estão serão impostos.
<!--[endif]-->
<!--[if !supportLists]-->
- Os datacenters já foram construídos?: Segundo o blog do Otávio, arquiteto da Microsoft, já existem 13 e até o final deste ano serão 20.
<!--[endif]-->
<!--[if !supportLists]-->
-
Se desenvolvedor criar uma aplicação ruim, provavelmente para aumentar o desempenho ele irá aumentar a quantidade de máquinas. O Azure não poderá inibir as boas práticas de programação e arquitetura?: Não, para aumentar a quantidade de máquinas, haverá aumento de custos. Alguém quer pagar pelos erros? Eu não.
<!--[endif]-->
Para trabalhar com o Windows Azure, você precisará baixar alguns SDKs que encontram-se disponíveis neste link.
Concluindo, o Windows Azure é uma grande quebra de paradigma e com certeza trará muitas oportunidades, críticas e desafios aos arquitetos de software. Para os próximos posts trarei mais exemplos e curiosidades sobre o Azure.
Até a próxima