Trabalho de frente no desenvolvimento de back-end dos maiores portais em software de código aberto: compartilhando experiência

Uma das áreas do grupo de empresas de Design digital é a criação de soluções de portal que fornecem aos usuários finais um grande conjunto de serviços personalizados em um único site. Os serviços podem ser diferentes: notícias, fóruns, repositórios de documentos, estatísticas, eventos etc. - é a isso que chamamos de portal. Neste artigo, gostaria de dizer como a equipe e eu criamos soluções de portal: o que usamos, quais vantagens e desvantagens de nossa implementação são possíveis.




Em geral, a idéia de um portal com suas próprias mãos não surgiu por acaso. Recentemente, a Rússia introduziu restrições ao uso de software proprietário, o que afetou principalmente as grandes empresas de TI que trabalhavam em simbiose estreita com o setor público. Nossa experiência trabalhando em portais no ambiente externo e interno dos maiores empregadores da Rússia e do exterior nos permitiu avaliar as melhores práticas e padronizar muitas coisas.

Por exemplo, o site da RosstandartComo é de domínio público, possui um grande fluxo de visitantes, por isso pesquisamos e criamos soluções que funcionarão de forma estável em condições de alta carga instantânea. Também é necessário considerar que muitos elementos do portal precisam ser indexados nos mecanismos de pesquisa (do ponto de vista de uma solução de portal auto-escrita, não é tão simples e óbvio quanto parece), mas não usamos soluções prontas e CMS (pois nem todos poderiam lidar com isso) tarefas definidas pelo cliente).

O principal interesse da implementação para nós, como desenvolvedores, é que cada serviço de portal seja uma unidade independente que possa existir sem saber nada sobre os serviços vizinhos. Devido a isso, eles podem ser desenvolvidos, atualizados e dimensionados independentemente um do outro.

Este artigo é a primeira parte de uma série de artigos: descreve como tudo parece do lado de trás, que tecnologias usamos, como a arquitetura é organizada, que dificuldades e vantagens nossa abordagem possui. Os artigos a seguir também descreverão o lado do desenvolvimento do frontend.

Então, vamos começar.

Arquitetura


O objetivo principal era desenvolver uma plataforma baseada em soluções de código aberto, fáceis de dimensionar e manter.

Essa plataforma possui duas opções de implantação nas instalações do cliente:

1) A primeira opção requer mais capacidades, mas permite escalar e dar suporte facilmente a vários sistemas ao mesmo tempo devido à arquitetura de microsserviço. Existem várias maneiras de implementá-lo, mas escolhemos a estrutura do Spring Cloud (Gateway, Discovery) junto com o Spring Boot (com base na experiência, nosso arquiteto Java decidiu que essa pilha de tecnologia seria mais adequada para essas tarefas).



2) A segunda opção é modular. É considerado se está planejado suportar apenas um sistema (portal). Essa opção é boa porque toda a infraestrutura pode ser implantada em um ou dois servidores.



Tecnologias usadas


Abra o JDK 8

Wildfly - servidor de aplicativos

PostgreSQL - DBMS. Todos os módulos são implementados com base nas tecnologias ORM, portanto, em teoria, facilitará a migração para outro DBMS.

O ExoPlatform é uma plataforma de portal que permite combinar vários módulos em um único aplicativo da web, gerenciar sua localização na página, administrar direitos de acesso e muito mais. A versão da comunidade pode ser baixada no site oficial , mas apenas para o servidor de aplicativos Tomcat. Você pode pegar as fontes e modificar a montagem da plataforma para o Wildfly. Holivar neste artigo sobre o tema: "por que não escolheu Liferay" não vai providenciar.

Módulos- esses são os chamados portlets, são executados no contêiner do portlet e são responsáveis ​​por desenhar sua área na página. Os portlets estão sendo desenvolvidos de acordo com a especificação JSR ( JSR 362 ).

O Spring Framework é a base de todos os aplicativos desenvolvidos no Design Digital do ponto de vista do desenvolvimento Java ( https://spring.io/ ). A estrutura possui muitos módulos para implementar várias tarefas (Spring MVC, Spring Mail, Spring Data (JPA), Spring JMS e muito mais).

Spring Cloud - a base para o desenvolvimento de microsserviços (Discovery, Gateway, Ribbon, Config Server).

Keycloak- servidor de autorização e controle de acesso (IDM \ IAM). O servidor suporta vários protocolos de autorização (OpenId, SAML, Oauth, Kerberos). Isso permite gerenciar facilmente estratégias de autorização, configurar direitos de acesso e garantir a segurança do acesso aos recursos do sistema. (https://www.keycloak.org/).

Kurento é um servidor de mídia. Foi usado para desenvolver transmissões de vídeo e áudio entre usuários usando o protocolo WebRTC (https://www.kurento.org/).

O Elasticsearch é um servidor de pesquisa de texto completo. Para pesquisar o portal, foi desenvolvido seu próprio rastreador, que coletava dados do portal para indexação, além de um analisador para extrair o conteúdo dos arquivos.

O Swagger é um guia de auto-documentação para interagir com a Rest-API.

Jasperepors- Estrutura de relatórios. JasperStudio é usado para criar modelos de relatório.

Graylog é um servidor para coletar logs de aplicativos.

Todos os módulos são criados usando Maven e CI \ CD (Jenkins).

Módulos e Serviços


Os microsserviços que garantem o funcionamento dos módulos incluem:

  • Serviço de gerenciamento de arquivos - um microsserviço que permite armazenar dados em um único armazenamento, analisar o conteúdo, converter arquivos para outros formatos para reprodução ou exibição na interface da web, fazer o download e anexar a outros sistemas. Além de co-editar arquivos e suas versões.
  • – , . , , Elasticseach ( , ..). Apache Tika, .
  • – , - \- WebRTC - Kurento.
  • – , . ElasticSearch, JasperReports.
  • \ – , .
  • – , , , .
  • - – , Workflow BPMN. JBPM.



  • WCM – .
  • – , , .
  • – .
  • – .
  • – .
  • – .
  • — - c .
  • – -. , , .
  • Estrutura organizacional - vários diretórios e relatórios.
  • Módulo administrativo - Gerenciamento de direitos de acesso ao portal, sites, páginas, retratos e configurações de exibição de portlets, páginas e portais virtuais.
  • Navegação - permite criar navegação personalizada no portal e nos nós do portal.
  • Pesquisas e testes - um grande módulo com a capacidade de criar testes e pesquisas de vários tipos (de uma única escolha, a perguntas-loops e diferenciais). Projetado para testar, treinar e realizar pesquisas entre os usuários do portal.

E existem muitos outros módulos específicos, e não muito, com processos de negócios para clientes específicos. Existem cerca de 30 deles.

Dificuldades e vantagens

Benefícios desta solução.


  • , .
  • , , , .
  • JNDI, . .
  • , .
  • , , .
  • .
  • , , open-source , .
  • .
  • open-source , .

,


  • API – .
  • – ABAC .
  • – - .
  • Cache centralizado de dados - um servidor de cache centralizado está planejado para ser introduzido (isso é necessário para a coleta centralizada de logs para o trabalho dos produtos de teste dev para monitorar corretamente a estabilidade e a correção do nosso ecossistema).

Total


Esse conjunto de tecnologias, juntamente com a solução arquitetônica escolhida, permite levantar a questão do desenvolvimento de soluções de portal, intranet e externas "no transportador": faça-o de forma rápida, eficiente, com diferentes configurações e use as melhores práticas.

E no próximo artigo, mostraremos como nosso frontend está organizado: sobre a montagem e como conseguimos uma grande reutilização.

Continua muito em breve ...

All Articles