Arquitetura de microserviços utilizando AMQP

Muito tem se falado sobre arquitetura de microserviços ultimamente, principalmente após a publicação de Martin Fowler e James Lewis . Para quem ainda não está familiarizado com o termo, uma arquitetura de microserviços compreende uma maneira específica de se projetar software através de serviços independentes e autônomos no quesito implantação. Apesar de não existir uma definição precisa para este estilo de arquitetura, existem algumas características em comum em relação à organização da lógica de negócio, implantação automatizada, inteligência nas pontas e controle descentralizado de linguagem e informação (Fowler e Lewis, 2014).

Conceitos relacionados

Muitos autores argumentam que microserviço é apenas um sinônimo para a abordagem já há muito conhecida, mais precisamente conceituada em 1996, como Arquitetura Orientada a Serviços , ou SOA (Service-Oriented Architecture), que se trata de uma abordagem arquitetural corporativa que permite a criação de serviços de negócio interoperáveis que podem facilmente ser reutilizados e compartilhados entre aplicações e empresas (Gartner Group, 1996).

Existe ainda um outro conceito conhecido como Filosofia Unix que se trata do conjunto de normas e abordagens utilizadas por Ken Thompson e Dennis Ritchie durante e após o desenvolvimento do sistema operacional Unix e suas ferramentas. A Filosofia Unix se baseia em fazer programas muito específicos e que resolvam um determinado problema da melhor maneira possível , de forma que tais programas possam se comunicar entre si e serem combinados de modo a contemplar tarefas mais complexas.

Com tais conceitos definidos, podemos dar sequência ao protótipo funcional que foi desenvolvido para exemplificar uma implementação de arquitetura de microserviços (ou SOA).

Protótipo funcional

Para fins de demonstração prática e aplicação dos conceitos descritos acima, foi desenvolvido um protótipo que comporta a arquitetura de microserviços e contempla os seguintes artefatos:

  • Duas aplicações funcionais que utilizam os microserviços implementados
    • Blog
    • Fórum
  • API RESTful
  • CloudAMQP (serviço cloud gratuito que fornece uma instância de RabbitMQ )
  • Três microserviços com persistências individuais
    • Accounts (cadastro de contas e controle de autenticação)
    • Posts (cadastro de publicações)
    • Comments (cadastro de comentários)

Diagrama da arquitetura do protótipo desenvolvido

Detalhes da arquitetura

Como pode ser observado no diagrama da arquitetura, a comunicação entre os artefatos se dá através de dois protocolos:

  • HTTP (Hypertext Transfer Protocol): Protocolo de transferência de hipertexto. Base da comunicação de dados utilizado na Web;
  • AMQP (Advanced Message Queuing Protocol): Protoco avançado de enfileiramento de mensagens;

O protocolo AMQP permite a troca de mensagens assíncronas entre diferentes aplicações e/ou serviços . O software mais popular que implementa um servidor de AMQP é o RabbitMQ. Para o protótipo, foi utilizado um serviço cloud chamado CloudAMQP, que fornece instâncias de RabbitMQ e possui um plano gratuito que permite a troca de até 1 milhão de mensagens mensais.

Existem várias formas de se beneficiar do protocolo AMQP:

  • Envio simples de mensagem de um serviço A para um serviço B (sem resposta);
  • Enfileiramento de mensagens de um serviço A para um serviço B (sem resposta);
  • Publicação/Inscrição que permite o envio de uma mensagem para vários consumidores;
  • Roteamento;
  • Tópicos (uso avançado de Publicação/Inscrição);
  • RPC (Remote Procedure Call), chamada de procedimento remoto ;

Para entender o protótipo basta compreendermos a última forma de uso, RPC.

As bibliotecas que encapsulam a chamada de procedimento remoto (RPC), geralmente são projetadas de forma que o uso seja transparente e intuitivo, aparentando ser uma mera chamada de função, quando de fato, está sendo feita a comunicação via AMQP para um serviço remoto e sendo aguardado o recebimento da resposta. Portanto, o uso de RPC ocorre quando um software efetua uma chamada de um serviço para outro software via AMQP e aguarda a resposta .

No momento em que este artigo é escrito, o protótipo se encontra desenvolvido inteiramente em JavaScript (Node.js), tanto as aplicações clientes quanto os microserviços. Porém, em um futuro próximo, para tornar o exemplo mais rico, os microserviços serão reescritos em outras linguagens e plataformas como Ruby, Python, PHP e Java. Dessa forma mais bibliotecas de integração com AMQP serão cobertas pelo protótipo.

Descrição do protótipo

Para executar o protótipo em sua própria máquina siga as instruções contidas no leia-me do repositório (link ao final do artigo), o restante do artigo será focado em explicar o fluxo do protótipo.

O cenário esperado para que o protótipo seja utilizado compreende os seguintes requisitos:

  • Ao menos uma instância iniciada de cada microserviço;
  • API RESTful iniciada;
  • Instância de RabbitMQ iniciada (através do serviço CloudAMQP);
  • Aplicações clientes iniciadas (Blog e Fórum);

Com o cenário devidamente preparado, as aplicações clientes (Blog e Fórum) podem ser utilizadas normalmente.

Para fins de exemplificação, vamos analisar o fluxo de mensagens que ocorre ao visualizar uma publicação na aplicação Blog:

  1. A aplicação Blog efetua uma requisição para a API RESTful para obter a publicação;
  2. A API efetua uma RPC para o microserviço Posts para obter a publicação;
  3. O microserviço Posts busca a publicação em sua persistência e responde a chamada RPC que recebeu;
  4. A API recebe a resposta do microserviço Posts e responde a requisição inicial da aplicação Blog;

Observando um caso isolado como o fluxo acima, não é muito perceptível o benefício que a arquitetura de microserviços tem a oferecer, pois apenas foram criadas mais camadas entre a requisição HTTP e a persistência. O real benefício neste caso, é que este é apenas um dos fluxos que ocorrem ao se visualizar uma publicação no Blog. Além de se obter a publicação, também são obtidos o perfil do autor da publicação e os perfis dos autores de cada comentário existente na publicação através dos microserviços Accounts e Comments. Ou seja, vários microserviços trocam mensagens entre si quando uma publicação é visualizada no Blog.

Em outras palavras, o uso de uma arquitetura de microserviços permite à um sistema robusto uma maior resistência a falhas e um maior potencial de escalabilidade , uma vez que cada microserviço pode ser escalável individualmente conforme a necessidade da aplicação. A resistência a falhas se encontra na capacidade que o sistema possui de continuar funcionando normalmente ainda que um ou mais microserviços se tornem indisponíveis.

Alguns podem estar se perguntando qual a real necessidade da API RESTful, visto que as aplicações finais (Blog e Fórum) poderiam se comunicar diretamente com os microserviços através do CloudAMQP. De fato a API RESTful não é necessária, a camada da API foi criada apenas para simplificar a comunicação e expor uma interface HTTP para os microserviços que até então estariam disponíveis somente por AMQP/RPC. Com uma API RESTful expondo os microserviços, as aplicações finais podem utilizar requisições HTTP para consumir os serviços, permitindo dessa forma a criação de aplicações finais que por alguma restrição de tecnologia não sejam capazes de utilizar o protocolo AMQP.

Vale lembrar que a RPC através do AMQP utiliza o algoritmo de Round-Robin para efetuar as chamadas das instâncias de dado serviço, isto é, a cada nova chamada, o RabbitMQ envia a mensagem para a próxima instância que encontrar do serviço. Portanto, para escalar um dado serviço, basta levantar novas instâncias que o RabbitMQ já irá lidar com o balancemanto das mensagens.

Monitoramento dos microserviços

Outro benefício da arquitetura de microserviços utilizando AMQP é a capacidade de monitorar a utilização de cada serviço de forma atômica e em tempo real, o que permite o acesso a mais informações sobre a performance e sobre a necessidade de escalabilidade.

Segue um exemplo das filas que foram criadas para as aplicações do protótipo e do monitoramento em tempo real a partir do painel fornecido pelo serviço CloudAMQP.

Visualização das filas. Painel fornecido pelo CloudAMQP

Monitoramento do envio de mensagens entre os microserviços

Conclusão

Não podemos reduzir toda a problemática de arquitetura de software a uma questão do que é certo e errado ou bom e ruim, pois cada caso possui suas muitas variáveis e circunstâncias que devem ser consideradas e seus muitos cenários e ambientes distintos possíveis em que o software em questão pode atuar.

Com esta premissa em mente, vamos analisar quais as vantagens e desvantagens que uma arquitetura de microserviços pode oferecer, levando-se em consideração que não se tratam de verdades absolutas, apenas conclusões teóricas baseada em uma das muitas formas possíveis de se implementar microserviços através de AMQP.

  • Vantagens
    • Escalabilidade a nível atômico
      • cada ação/serviço do software pode ser escalado individualmente, tirando-se portanto um maior proveito da capacidade de hardware existente;
    • Manutenibilidade
      • cada microserviço pode possuir processos organizacionais independentes, desde sua concepção à sua implantação, portanto o esforço dos recursos humanos pode ser melhor aproveitado;
    • Reutilização
      • um mesmo microserviço pode ser consumido por várias aplicações diferentes, diminuindo drasticamente o tempo de desenvolvimento de novas aplicações que possuírem recursos semelhantes;
    • Resistência à falhas
      • caso um microserviço se torne indisponível ou falhe, somente os recursos que dependam diretamente dele serão comprometidos nas aplicações finais;
    • Flexibilidade de tecnologia
      • como o protocolo AMQP se comporta como a lingua franca entre os microserviços, nada impede que cada microserviço seja desenvolvido em uma linguagem ou plataforma diferente, o único requisito é que o microserviço ou aplicação em questão seja capaz de se comunicar com os demais;
  • Desvantagens
    • Perda de performance
      • este é um ponto muito subjetivo, depende muito de como a arquitetura for implementada e utilizada, mas de forma geral, caso a arquitetura seja homogênea no quesito comunicação como o caso do protótipo, as aplicações finais tendem a perder performance devido à adição de novas camadas entre o usuário final e a lógica do negócio;
    • Difícil implantação
      • principalmente no início da implementação de uma arquitetura de microserviços, até que toda a infraestrutura seja preparada e o processo de cada microserviço seja definido e padronizado, a velocidade de implantação de novos recursos e aplicações tende a ser reduzida drasticamente;

Links e referências

I Was Eagerly Looking For Content Like This, Right To The Point And Detailed As Well Accordingly Depending Upon The Matter/Topic. You Have Managed This Greatly For Sure. El Diablo Jacket Suicide Squad

I never stop myself to say something about your articles… You are beyond exceptional man. Movie Jacket

먹튀검증 What an interesting story! 먹튀검증I’m glad I finally found 안전놀이터what I was looking for.토토사이트 Thank you for letting me see this useful information. 꽁머니There’s a story on my site that you might find interesting. 꽁머니I really hope you visit once.안전놀이터 I will also visit this site often.스포츠중계 In addition, https://mtboan.com/COVID-19 is becoming a problem all over the world these days. 먹튀보안관 I hope there’s no harm 먹튀사이트조회 to you and your family. 먹튀가디언 Thank youhttps://twiddeo.com/ Nowadays,먹튀 the weather is getting 먹튀검증사이트 colder every day먹튀검증커뮤니티, so wear warm clothes 먹튀검증커뮤니티 and watch out for a cold 놀이터토토 In addition토토사이트, there are also 안전놀이터articles and photos먹튀검증 in my sitehttps://mtygy.com/ community that are similar to the subject먹튀요기요 of the author’s article or that may be more helpful먹튀, so please drop in if you like.사설토토

토토레프리 Hello. First of all, 먹튀검증 thank you for allowing me to read such a good post. I really enjoyed it! 먹튀 This content will be 먹튀검증업체 very helpful to me. 먹튀사이트 I live in another country, but your post impressed me deeply. I wish I had read this a little earlier. 메이저놀이터 You seem to have a great ability to write. I envy it so much. Because I’m actually running a 메이저놀이터 similar site. 사설토토 It’s not enough yet. 메이저사설토토 But there are many posts on my site that you might be interested in. Please visit me sometime 사설놀이터 and read my post. 안전놀이터 It must feel interesting. COVID-19 안전놀이터 is becoming a problem all over the world 토토사이트 these days, and I’m worried if you 메이저토토사이트 and your country are okay. I hope there are no big problems. 토토사이트추천 Always be careful and have a nice day today. 토토사이트 Goodbye!https://elephonemobile.com/

안전놀이터검증및연구센터 Hello, 토토사이트분석전문블로그 your post was really impressive to me. 먹튀검증의새로운패러다임 I’m very happy https://kipu.com.ua/to finally find the article https://remarka.kz/I’ve been searching for. https://subtitles.ee/How did you write this article? 먹튀검증 That’s amazing. 안전놀이터 It is no exaggeration to 토토사이트 say that you are an expert 먹튀사이트검증 in this field. 메이저토토사이트 I want to 메이저안전놀이터 learn how to 안전한사설토토사이트 write from you. 공식안전놀이터 Actually, 먹튀검증커뮤니티 I’m posting on 먹튀검증토토사이트 a similar site. 먹튀검증토토It’s not really easy. 사설안전놀이터 That’s why I think you’re even greater. COVID-19 is a problem around the world these days. Are you okay? I would like to thank you again for always being careful and allowing me to read this. Then have a happy day. Thank you. It will be of great 검증토토사이트 help to me. Anyway, have a nice day 안전한먹튀검증 today and thank you for your hard work. 최고의안전놀이터Nowadays,토토사이트검증업체 the weather is getting colder every day토토안전놀이터, so wear warm clothes and watch out for a cold 확실한먹튀검증 My field 안전한토토사이트 of interest seems to be very similar to me 안전한놀이터, so I keep looking for more articles. 먹튀사이트검증 In addition, there are interesting topics 메이저사설토토사이트 and discussions going on on my site,놀이터추천 like the author wrote, so please visit us anytime.먹튀신고

wow, very good blog^^After안전놀이터 going over a handful of the articles on your site, I really appreciate your technique of writing a blog.
I bookmarked it to my bookmark website list and will be checking back in the near future. 안전놀이터
I really like your site!Please check out my website too and tell me what you think.

This platform is very useful for us. Thanks for posting this kind of article. I like to tell you students searching on internet for writing services. They want to get flying marks in their academic career. We are trying to help those students who are worried.

It is extremely nice to see the greatest details presented in an easy and understanding manner.
바카라사이트 ( https://polaris-ed.com )

I feel very grateful that I read this. It is very helpful and very informative and I really learned a lot from it.
해외문자 ( https://www.megakr.com )

I really enjoy reading and also appreciate your work.
바카라사이트 ( https://adoagt.com )

I am looking for and I love to post a comment that “The content of your post is awesome” Great work!
안전놀이터 ( https://nakedemperornews.com )

Really nice and interesting post. I was looking for this kind of information and enjoyed reading this one.

우리카지노

(https://astrolabetv.com)

Wow! Thank you! I continuously needed to write on my site something like that. Can I include a portion of your post to my site?
토토사이트
(https://poly-prepas.com)

look at and do it You’re incredible! Thank you! I will take a note of your website and keep checking 토토사이트

posting! Greetings! Very helpful advice in this particular Thank you for your always good posts. 먹튀검증업체