No momento, existem muitos frameworks prontos para o desenvolvimento de aplicativos usando uma arquitetura de microsserviço. Como regra, os frameworks são divididos em dois tipos - para uma linguagem que pode funcionar com plataformas diferentes, mas o desenvolvimento é realizado em uma linguagem - um exemplo de SpringBoot, Nancy, etc. E o segundo tipo - para a plataforma - é capaz de trabalhar com diferentes linguagens de programação, mas o código pode ser executado apenas na plataforma selecionada - um exemplo de ServiceFabric, AWS Lambda. Mas praticamente não existem estruturas multilíngues capazes de funcionar em diferentes plataformas.
Nossa equipe desenvolve sistemas corporativos baseados em microsserviços, que contêm componentes escritos em diferentes linguagens e frequentemente precisam funcionar em diferentes plataformas, então o problema descrito acima é mais do que relevante para nós. Como não encontramos nenhuma solução pronta que atendesse a esses requisitos, desenvolvemos nossa própria solução - Pip.Services Toolkit . Essa ferramenta nos permitiu desenvolver microsserviços em muitas linguagens de programação e não nos preocupar realmente com onde esse aplicativo será executado - na nuvem ou no local.
O objetivo deste artigo é familiarizar o leitor com os recursos do projeto sem entrar nos detalhes de implementação. Se você estiver interessado em aprender mais sobre esta ferramenta, por favor, em cat ...
O que é Pip.Services?
Durante o desenvolvimento, nosso objetivo foi criar uma ferramenta bastante versátil, capaz de cobrir muitas tarefas. Durante o processo de design, os princípios básicos foram determinados, que formaram a base do produto:
- os componentes do sistema devem estar pouco conectados para modificá-los facilmente e adicionar novas funcionalidades
- ciclo de vida muito longo - o objetivo era criar uma ferramenta que permitisse ser suportado em diferentes idiomas pelo máximo de tempo possível.
- a capacidade de desenvolver aplicativos para arquitetura de microsserviço e monolítico
- os aplicativos desenvolvidos devem ser capazes de ser implantados em qualquer plataforma, seja local ou uma solução em nuvem, e a nuvem também não deve ser dependente do operador
- suporte do número máximo de linguagens de programação utilizadas no desenvolvimento, mantendo os princípios da própria ferramenta, bem como a compatibilidade de serviços escritos em diferentes linguagens entre si durante as comunicações
O Pip.Services Toolkit representa um amplo conjunto de ferramentas que permite desenvolver microsserviços e aplicativos monolíticos usando linguagens de programação populares. O Pip.Services Toolkit desenvolveu ferramentas para trabalhar com todas as funções e estruturas de dados necessárias, cuja necessidade pode surgir de um desenvolvedor, na ausência das coisas necessárias, você mesmo pode adicioná-las facilmente.
O Pip.Services Toolkit é um verdadeiro poliglota, ao mesmo tempo que adere aos seguintes conceitos:
Implementação simétrica no código
- , , . ,
- — ,
- —
- — ,
Para uma representação mais visual da estrutura, vamos nos voltar para o diagrama estrutural do kit de ferramentas.
Conforme mencionado no início do artigo, o kit de ferramentas é multilíngue. No momento, existem implementações em 6 linguagens de programação, entre elas há populares (Java, Node.js, Python, .Net Core) e em desenvolvimento (Go, Dart) - esta é uma camada cinza no diagrama.
Como você pode ver, ele é baseado em um conjunto de pacotes com primitivos de linguagens cruzadas e modelos comuns destinados ao rápido desenvolvimento de seus próprios componentes - a camada verde no diagrama. Com base nisso, uma biblioteca dos principais componentes do kit de ferramentas é implementada.
Já com base nos componentes básicos, os componentes do usuário e do sistema são implementados - esta é a segunda camada verde.
A camada azul do diagrama é um conjunto de bibliotecas básicas para trabalhar em certas direções - implementação de containers (IoC), trabalho com dados, troca síncrona (RPC) e troca assíncrona (Messaging). Eles são capazes de funcionar como componentes independentes, mas também fornecem interfaces e princípios básicos para a construção de implementações específicas de componentes adicionais para trabalhar com tecnologias específicas. Conforme mostrado no diagrama no topo da pilha, como exemplo, implemente contêineres para AWS e Azure, implemente a manipulação de dados no MongoDb e o armazenamento em cache e bloqueio distribuído no Memcached e Redis.
Microsserviços no kit de ferramentas Pip.Services - uma visão interna
A prática de desenvolvimento mostra que, entre muitos tipos diferentes de projetos, é preferível construir um microsserviço a partir de componentes fracamente acoplados. O Pip.Services Toolkit não impõe restrições à estrutura de microsserviços para os desenvolvedores.
Cada desenvolvedor é livre para escolher seu próprio caminho. Mas o design do componente tem forte suporte no Pip.Services Toolkit. Graças a esta abordagem, uma série de tarefas são resolvidas:
- O desenvolvimento e o teste de componentes individuais são simplificados.
- Cada componente pode ser isolado do resto do código e suas dependências nos testes podem ser substituídas por simulações simples.
- Torna-se possível reconfigurar um microsserviço para uma plataforma específica, substituir serviços de infraestrutura, comunicações ou bancos de dados simplesmente alterando a composição dos componentes do microsserviço no arquivo de configuração sem qualquer alteração de código.
- . . , .
- , , :

- . :
- , ( ).
- , , ( ).
- Componentes adicionais para armazenamento em cache, monitoramento, configuração, sincronização, etc. Como regra, esses componentes são adicionados a partir do conjunto padrão, que oferece uma ampla escolha para integração com vários serviços de infraestrutura e plataformas (cinza).
- Uma biblioteca de cliente pode ser implementada para simplificar o uso do microsserviço. Ele fornece uma interface amigável para trabalhar com o microsserviço e oculta os detalhes da comunicação de baixo nível (azul).
Para construir um microsserviço e configurar componentes no Pip.Services Toolkit, um arquivo de configuração é usado. Aqui está um exemplo dessa configuração:
config.yml
--- # Container descriptor - descriptor: "pip-services:context-info:default:default:1.0" name: "hello-world" description: "HelloWorld microservice" # Console logger - descriptor: "pip-services:logger:console:default:1.0" level: "trace" # Performance counter that post values to log - descriptor: "pip-services:counters:log:default:1.0" # Controller - descriptor: "hello-world:controller:default:default:1.0" default_name: "World" # Shared HTTP Endpoint - descriptor: "pip-services:endpoint:http:default:1.0" connection: protocol: http host: 0.0.0.0 port: 8080 # HTTP Service V1 - descriptor: "hello-world:service:http:default:1.0" # Heartbeat service - descriptor: "pip-services:heartbeat-service:http:default:1.0" # Status service - descriptor: "pip-services:status-service:http:default:1.0"
O contêiner no qual o microsserviço é empacotado lê essa configuração, com base em descritores, usando fábricas, cria os componentes necessários, passa os parâmetros de configuração para eles, liga os componentes uns aos outros e inicia os processos ativos.
Essa abordagem permite que você projete serviços unificados e execute o ajuste "fino" para uma tarefa específica usando variáveis de ambiente diretamente no ambiente executável.
Mudar de monólito para microsserviços sem alterar o código
Separadamente, vale ressaltar a possibilidade de alterar a arquitetura utilizada pela aplicação sem fazer alterações no código-fonte. Vamos considerar esta oportunidade com um exemplo.
Suponha que haja uma fachada que um cliente usa para trabalhar com um serviço. Por exemplo, com um serviço que implementa a lógica de trabalhar com beacons bluetooth (beacons). Quando iniciado no modo de aplicativo monolítico, o arquivo de configuração conterá as seguintes seções com descritores de componentes:
# Beacons components - descriptor: "pip-services-beacons:persistence:mongodb:default:*" - descriptor: "pip-services-beacons:controller:default:default:*" - descriptor: "pip-services-beacons:client:direct:default:*"
Essa configuração na verdade cria o serviço de beacons como parte da fachada na forma de código monolítico, e a interação entre eles é realizada por meio do cliente direto, mas dentro de um único contêiner, como você pode ver no diagrama abaixo.
Mas se você alterar um pouco o texto de configuração, o serviço de beacons se tornará um microsserviço separado e a fachada funcionará com ele por meio do cliente http. Para fazer isso, remova as seções com controlador e persistência na configuração de fachada e altere o tipo de cliente de direto para http: para uma operação correta, você deve especificar o endereço e a porta dos beacons de microsserviço em execução agora separadamente e reiniciar a fachada para que leia a nova configuração. Você também precisa executar um microsserviço separado com beacons, para isso, você pode usar a seguinte configuração:
# Beacons components
- descriptor: "pip-services-beacons:client:http:default:*"
connection:
protocol: "http"
host: "any.where.com"
port: 8086
# Http Endpoint - descriptor: "pip-services:endpoint:http:default:*" root_path: "" connection: protocol: "http" host: "0.0.0.0" port: 8086 # Beacons API V1 - descriptor: "pip-services-beacons:service:http:default:1.0" # Hearbeat service - descriptor: "pip-services:heartbeat-service:http:default:1.0" # Status service - descriptor: "pip-services:status-service:http:default:1.0"
Do ponto de vista arquitetônico, agora ficará assim:
Como você pode ver, desta forma é possível criar aplicativos primeiro na forma de monólitos, sem gastar muitos recursos na implantação, mas assim que precisar escalar, você só precisa alterar a configuração e facilmente mudar para microsserviços é um dos principais benefícios do Pip.Services Toolkit.
Ferramentas adicionais do projeto Pip.Services
Pip.Services não inclui apenas o Pip.Services Toolkit. No decorrer do nosso trabalho, desenvolvemos uma série de ferramentas adicionais para a conveniência do desenvolvimento de microsserviços:
- Biblioteca de microsserviços prontos - contém um catálogo de microsserviços prontos para uso dividido em seis categorias :
- – . , , , ..
- – , , ,
- – ,
- – , , .
- – , ,
- — , , ;
- Benchmarks são um conjunto de utilitários para testar o desempenho de aplicativos e microsserviços desenvolvidos.
- Biblioteca de modelos - inclui várias categorias com modelos, entre as quais existem modelos para desenvolvimento de microsserviços, configurações de espaço de trabalho, modelos de CI / CD e modelos de fachada.
- PowerShell Selenium WebDriver - driver desenvolvido para trabalhar com Selenium do PowerShell.
Todas essas ferramentas estão disponíveis no site Pip.Services.
Conclusão
No final do artigo, gostaria de acrescentar que o Pip.Services Toolkit é um conjunto de padrões e componentes que simplifica o desenvolvimento de sistemas de microsserviço usando uma variedade de linguagens de programação e fornece implantação em várias plataformas locais e em nuvem. O conjunto inclui padrões que facilitam a criação de microsserviços altamente personalizáveis usando componentes fracamente acoplados que implementam funções típicas em transmissão e processamento de dados, trabalho com bancos de dados, transferência de informações usando vários protocolos síncronos e assíncronos, funções de monitoramento, tratamento de erros e muito mais. Ao mesmo tempo, o Pip.Services Toolkit é facilmente extensível e pode coexistir com outras bibliotecas e estruturas devido ao seu design baseado em composição, ao invés de herança.
Os princípios gerais e a estrutura, bem como a simetria da implementação, permitem que os desenvolvedores mudem facilmente de uma linguagem para outra em nenhum momento. E a interoperabilidade fornece compatibilidade total de microsserviços escritos em diferentes linguagens imediatamente.
Todos os microsserviços em nossa biblioteca são testados e usados em sistemas reais. Graças ao uso da Biblioteca Pip.Services em nossos projetos, conseguimos reduzir o tempo de desenvolvimento do backend em até 30%.
Pip.Services está desenvolvendo ativamente, quase todos os meses novas ferramentas e microsserviços são adicionados ou expandidos.
A maior parte das informações necessárias já está no site, mas ainda estamos ativamente complementando com novos materiais e continuamos trabalhando nisso.
Em novembro de 2020, com base neste kit de ferramentas, mais de mil microsserviços foram implementados com alto grau de confiabilidade, alta velocidade de desenvolvimento e facilidade de integração. Como resultado, os dirigentes da empresa decidiram transferir totalmente o produto para o estatuto de Código Aberto, de forma a partilhar com a sociedade soluções de sucesso em arquitectura, bem como assegurar o futuro desenvolvimento do projecto com a ajuda de um maior número de programadores experientes.
O artigo foi concebido apenas como uma visão geral, sem exemplos detalhados de implementação; Nas publicações a seguir, tentaremos descobrir como implementar um microsserviço funcional usando este kit de ferramentas.
Se você tiver alguma dúvida sobre este kit de ferramentas, pergunte nos comentários ou através dos canais de comunicação indicados em nosso site e com certeza iremos respondê-la.
Links: www.pipservices.org