Escolar Documentos
Profissional Documentos
Cultura Documentos
Algumas pessoas da comunidade defendem ainda o desenvolvimento de servios com 10100 linhas de cdigo. Embora seja desejvel que os sistemas sejam pequenos, a
quantidade de cdigo no deve ser o principal objetivo. Em vez disso, deve-se visar a
decomposio do sistema em servios, a fim de resolver problemas de desenvolvimento e
implantao discutidos neste artigo. Alguns servios podem ser de fato muito pequenos,
enquanto outros podem ser muito grandes.
A essncia da arquitetura de microservices, assim como o conceito de sistemas
distribudos; bem antiga e se assemelha ao SOA.
A arquitetura de microservices j foi considerada uma verso leve ou de granularidade fina
de SOA. De fato, uma forma de pensar na arquitetura de microservices est relacionada
com SOA, porm sem a o fator comercial e livre de tecnologias WS* e ESB. Apesar de no
ser uma ideia totalmente nova, ainda vlida a discusso sobre a arquitetura de
microservices, uma vez que difere do tradicional SOA e, mais importante, soluciona vrios
problemas que muitas organizaes sofrem atualmente.
Este artigo apresenta as motivaes do uso da arquitetura de microservices e a compara
com a tradicional arquitetura monoltica. O artigo discute os benefcios e desvantagens do
uso da arquitetura de microservices, alm de apresentar solues para alguns desafios
tcnicos que incluem a comunicao entre servios e o gerenciamento de dados
distribudo.
Neste modelo, a abordagem mais comum para escalar uma aplicao atravs da
execuo de mltiplas cpias idnticas da aplicao, acessveis atravs de um
balanceador de carga. Conhecida como escalabilidade horizontal, corresponde a
escalabilidade no eixo X (X-axis scaling), uma tima maneira para aumentar a
capacidade e disponibilidade de uma aplicao.
A escalabilidade no eixo Z (Z-axis scaling) similar a do eixo X, onde cada servidor
executa uma cpia idntica do cdigo. A grande diferena que cada servidor
responsvel por seu conjunto dos dados. Essa abordagem exige a presena de um
componente responsvel pelo roteamento das requisies para um servidor apropriado.
Uma maneira de executar o roteamento atravs do uso de parmetros na requisio, por
exemplo, a chave primria da entidade solicitada. Essa abordagem utilizada
normalmente em arquiteturas NoSQL que realizam a distribuio de informaes atravs
do processo conhecido como sharding. Outra forma de roteamento por tipo de cliente.
Por exemplo, uma aplicao pode fornecer um SLA mais elevado aos clientes pagantes,
encaminhando suas requisies a um conjunto de servidores com mais capacidade.
As abordagens Z-axis scaling e X-axis scaling ampliam a capacidade e a disponibilidade
da aplicao. Entretanto, nenhuma resolve os problemas do aumento da complexidade do
desenvolvimento e da prpria aplicao. Para solucionar estes problemas preciso aplicar
a escalabilidade de eixo Y (Y-axis scaling).
A terceira dimenso de escalabilidade denominada decomposio funcional ou (Y-axis
scaling) aplicada sobre o eixo Y. Enquanto a escalabilidade de eixo Z divide elementos
Segundo, cada servio pode ser implantado independentemente de outros servios. Caso
os desenvolvedores responsveis por um servio necessitem implantar uma modificao
para um determinado servio, no h necessidade de coordenao com outros
desenvolvedores. Pode-se simplesmente implantar as modificaes. A arquitetura de
microservices torna vivel a implantao contnua.
Terceiro, cada servio pode ser escalado de forma independente de outros servios
atravs da duplicao (X-axis scaling) e particionamento (Z-axis scaling). Alm disso, cada
servio pode ser implantado em um hardware mais adequado para as exigncias de seus
recursos. Situao bem diferente da utilizao de uma arquitetura monoltica, que possui
componentes com diferentes necessidades, por exemplo, uso intenso de CPU x uso
intensivo de memria, so juntamente implantados.
A arquitetura de microservices facilita escalar o desenvolvimento. Pode-se organizar o
esforo de desenvolvimento em vrios times pequenos, por exemplo, two pizza teams.
Cada equipe responsvel pelo desenvolvimento e implantao de um nico servio ou
um conjunto de servios relacionados. Cada time pode desenvolver, implantar e escalar
seus servios, independente de todos os outros times.
A arquitetura de microservices tambm melhora o isolamento de falhas. Por exemplo, um
memory leak em um servio afeta apenas aquele servio. Outros servios iro continuar a
receber requisies normalmente. Em contrapartida, em uma arquitetura monoltica, um
componente com comportamento inadequado ir comprometer todo o sistema.
A arquitetura de microservices elimina qualquer compromisso de longo prazo com a stack
de tecnologia. Em princpio, ao desenvolver um novo servio, os desenvolvedores so
livres para escolher qualquer framework e linguagem adequados para aquele servio.
Embora, em muitas organizaes as escolhas possam ter restries, o ponto principal a
independncia sobre as decises tomadas anteriormente.
Alm disso, devido aos servios serem pequenos, torna-se prtico reescrev-los usando
melhores linguagens e tecnologias. Caso ocorra uma falha ao experimentar uma nova
tecnologia , pode-se descartar o trabalho sem afetar todo o projeto. Situao bem diferente
da utilizao de uma arquitetura monoltica, onde as escolhas tecnolgicas iniciais
restringem severamente a possibilidade de adotar diferentes linguagens e frameworks no
futuro.
Desvantagens
claro que nenhuma tecnologia uma bala de prata, e a arquitetura de microservices
possui uma srie de desvantagens e problemas significativos. Primeiramente, os
desenvolvedores devem lidar com a complexidade adicional de desenvolvimento de
sistemas distribudos. Os desenvolvedores devem implementar um mecanismo de
comunicao entre processos. A implementao de casos de uso que abrangem vrios
servios sem o uso de transaes distribudas difcil. IDEs e outras ferramentas de
desenvolvimento tem o foco na construo de aplicaes monolticas e no oferecem
suporte direto para o desenvolvimento de aplicaes distribudas. Escrever testes
Mecanismos de
microservices
comunicao
em
uma
arquitetura
de
HTTP sncrono
Existem duas principais abordagens para a comunicao entre processos em uma
arquitetura de microservices. Uma opo utilizar mecanismos baseados em HTTP
sncrono como REST ou SOAP. Esta opo simples, conhecida e facilmente gerencivel
por firewalls, ou seja, permite a comunicao atravs da Internet, facilitando a
comunicao no formato request/reply. A desvantagem do HTTP a falta de suporte a
outros padres de comunicao, como publish/subscribe.
Outra limitao que cliente e servidor devem estar disponveis simultaneamente,
situao difcil de ser garantida, pois os sistemas distribudos so propensos a falhas
parciais. Alm disso, um cliente HTTP precisa saber o endereo e a porta do servidor.
Embora parea simples, essas informaes podem no estar disponveis diretamente,
especialmente em uma infraestrutura de nuvem que usa auto-scaling onde instncias de
servio so efmeras. Essa abordagem exige o uso de um mecanismo de descoberta de
servio. Algumas aplicaes usam um registro de servios como o Apache ZooKeeper ou
Netflix Eureka. Em outras aplicaes, servios devem ser registrados com um balanceador
de carga, como um ELB interno em um VPC Amazon.
Mensagens Assncronas
Uma alternativa para o HTTP sncrono um mecanismo assncrono baseado em
mensagens como um broker de mensagens AMQP. Esta abordagem tem muitos
benefcios, pois desacopla os produtores de mensagens dos consumidores. O broker
capaz de enfileirar e manter as mensagens at serem processadas por consumidores. O
produtor simplesmente envia a mensagem para o broker, sem a necessidade de um
mecanismo de descoberta de servios. A comunicao baseada em mensagens tambm
suporta uma variedade de padres de comunicao, incluindo os pedidos de caminho
nico (one-way requests) e publish-subscribe. Uma desvantagem do uso de mensagens
a necessidade de um broker, que mais um componente que aumenta a complexidade do
sistema. Outra desvantagem que a comunicao sncrona (request/reply) no se ajusta
naturalmente a esse estilo de comunicao.
Existem prs e contras nas duas abordagens. desejvel que as aplicaes utilizem a
combinao das duas abordagens. Por exemplo, a prxima seo discute como resolver
os problemas de gerenciamento de dados que surgem em uma arquitetura distribuda,
ser apresentado como HTTP e mensageria so usadas em conjunto.
dados (schema). Alm disso, diferentes servios podem usar diferentes tipos de base de
dados, conhecido como arquitetura de persistncia poliglota. Por exemplo, um servio que
necessita de transaes ACID pode utilizar um banco de dados relacional, enquanto um
servio que manipula uma rede social pode utilizar um bando de dados baseado em
grafos. Particionar a base de dados essencial, mas isso resulta em um novo problema:
como lidar com as solicitaes que acessam dados pertencentes a vrios servios? A
seguir abordado como manipular as solicitaes de leitura e atualizao.
Transaes distribudas
Uma soluo utilizar transaes distribudas. Por exemplo, ao atualizar o limite de crdito
do cliente, CustomerService poderia usar uma transao distribuda para atualizar o limite
de crdito juntamente com o valor mantido por OrderService. O uso de transaes
distribudas garante consistncia aos dados. A desvantagem a reduo da
disponibilidade do sistema, uma vez que todos os elementos envolvidos devem estar
disponveis para que a transao seja efetivada. Alm disso, transaes distribudas esto
caindo em desuso, e no so geralmente suportadas nas stacks de software modernas,
como REST, bancos de dados NoSQL etc.
complexa interface (glue code) para realizar a integrao entre os servios e a aplicao
monoltica. Este um bom comeo para a decomposio de aplicaes monolticas.
Sobre o autor
Chris Richardson desenvolvedor e arquiteto. Java Champion, estrela do JavaOne e
autor do livro POJOs in Action, livro que descreve o desenvolvimento de aplicaes
enterprise Java com uso de POJOs e frameworks como Spring e Hibernate. Chris tambm
fundador da original Clound Foundry, o incio da plataforma Paas da Amazon EC2. Atua
como consultor em organizaes que buscam melhorar o desenvolvimento e implantao
de aplicaes atravs da utilizao de tecnologias como computao em nuvem,
microservices e NoSQL. Twitter @crichardson.