ATENÇÃO, ARQUIVO ORIGINAL EM PDF ANEXO
Sumário
2. Dependências 4
3. Preparação do Ambiente e Backup 4
Download de Release, Backup e Licenciamento 4
Limpeza de Instalação Anterior 5
5. Instalando Módulos Web Applications 8
Alteração no Nome do Módulo WCF Service para Web Api 9
Web App e Web Api em Ambientes Clusterizados 11
6. Módulos de Serviços Executáveis 13
Instalando os módulos como Windows Services 13
Configurando os módulos de Windows Services 15
Módulo Orquestrador (Producer/Consumer) 17
Orquestrador com Processamento Local 17
Orquestrador com Processamento Distribuído (Producer/Consumer) 18
Instalando/Configurando o Módulo Producer 20
Instalando/Configurando o Módulo Consumer/Worker 22
Ações em Lote com Processamento Local 23
Instalando/Configurando o Módulo Ações em Lote Producer 24
Instalando/Configurando o Módulo Ações em Lote Consumer 25
Módulo Distribuidor de Atividades (Activity Dispatcher) 26
Configuração Pós Instalação do Distribuidor de Atividades (Activity Dispatcher) 27
Módulo Auxiliares (Sentinela/Expurgo/Expiração Atividades Manuais) 28
Instalação do Módulo Service Discovery 29
Configuração do ’Target File’ do Módulo Service Discovery 29
Diagrama de Comunicação do Service Discovery 30
7. Arquivos de Configuração 32
Configuração da String de Conexão 33
Logs em Ambientes Clusterizados 34
Configuração de Log no Orquestrador (Consumer/Worker) 34
Configurações de Monitoramento e Observability 34
Configurações do Prometheus 36
Configuração do Appender para Graylog 37
Anexo I - Checklist Pós Deploy 41
Módulo Distribuidor de Atividades (Activity Dispatcher) 42
Módulo Orquestrador (Producer) 43
Módulo Orquestrador (Worker) 43
Módulo Orquestrador – Processamento Local 44
Ambientes com Integração Externa (Função) 45
1. Objetivo
Este documento tem como objetivo detalhar o processo de instalação e atualização do S-Works na versão 2.2 ou superior, em ambiente de homologação ou produção. Inicialmente, vamos tratar a instalação e configuração manual do sistema, e ao final do documento trataremos a utilização do instalador como forma de atualização
2. Dependências
A versão 2.0 do S-Works representa a migração do sistema do NET Framework 4.7.2 para o NET Core, portanto, é necessário realizar o download e instalação das seguintes dependências nos servidores de aplicação:
Bundle 3.1 mais recente: https://dotnet.microsoft.com/en-us/download/dotnet/3.1
Download de Release, Backup e Licenciamento
Limpeza de Instalação Anterior
Por se tratar de uma instalação em um novo framework .NET, é necessário realizar a limpeza e desinstalação dos módulos de versões anteriores à versão 2.0 que estejam instaladas.
Preserve estes caminhos para manter a localização existente.
4. Os Módulos do S-Works
A partir da versão 2.3, cada módulo do S-Works agora é um executável independente. Os módulos em azul escuro são módulos Web, instaláveis no IIS, e os demais, em azul claro, são módulos que devem (quando necessário) ser instalados como Windows Service.
Web App
•Módulo que contém a aplicação web.
Web Api
•Módulo que contém a API REST para integrações.
Orquestrador Producer
•Módulo responsável por enfileirar processos na fila.
Orquestrador Consumer/Worker
•Módulo responsável por consumir e processar a fila de processos.
Orquestrador
•Módulo responsável por realizar o processamento de processos em memória.
Activity Dispatcher/Distribuidor de Atividades
•Módulo responsável por distribuir atividades manuais para o módulo Web App.
Ações em Lote
•Módulo responsável por processar as ações em lote criadas no Web App.
Ações em Lote Producer / Consumer
•Módulos de processamento distribuído de ações em lote.
Service Discovery
•Módulo responsável por receber e manter registros dos módulos em execução.
Expurgo de Dados
•Módulo responsável por processar o expurgo de dados no sistema.
Sentinela
•Módulo responsável por monitorar inconsistências na execução de processos.
Expiração de Atividades Manuais
•Módulo responsável por desassociar atividades manuais por tempo de atribuição.
Integração Externa
•Módulo responsável por processar a fila de integrações externas (Função).
Integração Externa Web Api
•Módulo responsável por distribuir itens da fila de integração externa para processamento.
5. Instalando Módulos Web Applications
Os módulos Web App, Web Api e Integração Externa Web Api são módulos Web, ou seja, instalados através do IIS, ou Kestrel (em caso de instalação em Linux, não coberta por esse manual).
As aplicações web em .NET Core já possuem um servidor interno chamado “Kestrel”, e,
portanto, o IIS funcionará apenas como proxy para receber as requisições e direcioná-las para a aplicação.
Aplicações Web em NET Core exigem a configuração de um application pool para cada aplicação, portanto, não é possível compartilhar um mesmo application pool para duas ou mais aplicações.
Alteração no Nome do Módulo WCF Service para Web Api
Até a versão 1.42 do sistema, o módulo de integração era chamado “Sworks.WCFService” pelo fato de conter um serviço WCF respondendo em protoloco SOAP.
Esse protocolo não é mais suportado na versão 2.0 ou superior, contendo apenas a API REST para comunicação via HTTP.
Devido a isso, devemos renomear a aplicação instalada no IIS para “Sworks.WebApi”.
Crie uma nova pasta chamada “SWorks.WebApi” no diretório da aplicação e atualize o IIS para que a pasta seja exibida:
Application Pool.
“No Managed Code” na opção “.NET CLR version”.
Web App e Web Api em Ambientes Clusterizados
Os módulos Web App e Web Api podem ser implantados de forma clusterizada, ou seja, atrás de um balanceador de carga para fins de escalabilidade das aplicações.
Quando implantados de forma clusterizada, faz-se necessária a configuração de um diretório compartilhado para armazenamento das chaves de proteção de dados.
Anteriormente, aplicações Net Framework utilizavam uma chave chamada
“MachineKey”, configurada pelo IIS, como objeto para criptografia de
dados, como cookies de sessão por ex.. Devido à portabilidade do NET
Core, um novo mecanismo de proteção de dados foi implementado.
Utilizamos o mecanismo via file system para armazenar tais chaves.
Para configurar o caminho para armazenamento das chaves de proteção de dados, siga as instruções abaixo:
6. Módulos de Serviços Executáveis
A partir da versão 2.3, alguns módulos do S-Works que eram embutidos em outros módulos (por exemplo, o módulo Sentinela era acoplado ao módulo Orquestrador), e os módulos que executavam sob a aplicação “ChassiSVC”, foram todos desacoplados, se tornando executáveis independentes.
Todos os módulos executáveis, que são Windows Services, se encontram na pasta “SWorks.SVC” do pacote de instalação.
Instalando os módulos como Windows Services
Todos estes módulos devem ser instalados na forma de Windows Service, utilizando a aplicação “sc” para criar/remover os serviços.
Abaixo seguem orientações genéricas de como instalar um módulo na forma de Windows Service, e mais abaixo serão detalhadas as configurações de cada módulo:
“SWorks.Orquestrador”:
Após execução com sucesso da instalação, abra o menu de serviços executando o comando “services.msc”, clique com o botão direito sobre o serviço instalado e selecione a opção de propriedades.
Configurando os módulos de Windows Services
Anteriormente, as configurações da maioria dos módulos de Windows Services se encontravam num arquivo chamado “ChassiSVC.exe.config”. A partir da versão 2.3, com a separação dos módulos em executáveis independentes, cada módulo possui seu respectivo arquivo de configuração e de logs.
Cada módulo possui um par de arquivos de configuração, no seguinte padrão:
O antigo arquivo de configuração “ChassiSVC.exe.config” possuía uma tag de “services”, indicando quais módulos seriam executados naquela instância de serviço. Essas configurações agora existem dentro do arquivo
JSON de configuração, dentro da propriedade “ServiceConfigurations”,
contendo propriedades homônimas do antigo XML.
Módulo S-Works – Agent
Em alguns clientes que detém de infraestrutura mais limitada, criar um Windows Service para cada módulo do sistema pode gerar um overhead de memória que impacta a quantidade de recursos exigidos para executar os módulos.
Dessa forma, para manter a possibilidade de executar múltiplos módulos dentro de um mesmo executável, mas mantendo a correta compilação de dependências de projetos e referências (que não era possível usando o recurso ChassiSVC), criamos um módulo de gerenciamento de execução chamado “SWorks.Agent”.
Este módulo, que se encontra na pasta “SWorks.SVC”, é também um Windows Service e pode conter em suas configurações múltiplos módulos a serem executados, conforme print das suas configurações abaixo:
Módulo Orquestrador (Producer/Consumer)
O módulo “Orquestrador”, responsável pela execução de processos no sistema, após a versão 2.3, foi dividido em 3 módulos executáveis:
Orquestrador com Processamento Local
Método utilizado para ambientes de homologação ou clientes de baixa demanda (até aproximadamente 5 mil processos/mês).
Para utilizar essa forma de processamento, basta seguir a instrução de instalação de Windows Service para o executável do módulo, chamado “SWorks.Orquestrador.exe”. Conforme dito anteriormente, as configurações dos módulos agora se encontra no arquivo JSON “<MODULO”>.appsettings.json”. Segue abaixo um exemplo de configuração a ser realizado neste arquivo:
Orquestrador com Processamento Distribuído (Producer/Consumer)
Método utilizado para clientes com grandes volumes de processamento, podendo ser configurado em ambiente auto escalável, ou máquinas ligadas 24/7.
Para a instalação do módulo Producer, é necessário instalar o serviço de enfileiramento do RabbitMQ, detalhado abaixo.
Instalando o RabbitMQ
Para instalar o módulo Producer é necessário a instalação do RabbitMQ:
download da ferramenta: https://www.rabbitmq.com/install-windows.html#installer
normalmente está no caminho:
“C:\Program Files\RabbitMQ Server\rabbitmq_server-{version}\plugins”
“C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.16\sbin”
“rabbitmq-plugins enable rabbitmq_message_deduplication”
gerenciamentoviainterfacedoRabbitMQ:
“rabbitmq-plugins enable rabbitmq_management”
Insira “guest” para o usuário e a senha.
Instalando/Configurando o Módulo Producer
Após instalação e configuração do RabbitMQ, siga as orientações abaixo para configurar o com o módulo Producer:
de acesso exclusivo.
Instalando/Configurando o Módulo Consumer/Worker
O módulo Consumer/Worker também deve ser instalado na forma de Windows Service. Abaixo seguem as configurações necessárias para que esse módulo seja capaz de processar os itens da fila do RabbitMQ:
RabbitMQ. Por padrão, a palavra “guest” para o user/password.
multiplicado por 4. Números muito maiores do que isso podem acarretar em perda de performance no processamento.
Módulo Ações em Lote
Ações em Lote com Processamento Local
O módulo de “Ações em Lote” deve ser instalado num servidor “AlwaysOn”, na forma de
Windows Service, como exemplificado anteriormente.
Siga os seguintes passos para configurar o módulo:
Após instalação e configuração do RabbitMQ, siga as orientações abaixo para configurar o com o módulo Producer:
conforme abaixo:
acesso ao painel administrativo (http://localhost:15672) para definir um usuário
de acesso exclusivo.
Existem duas variáveis de configuração que determinam o comportamento do enfileiramento das solicitações de ações em lote e a cadência de processamento por solicitação:
Caso seja notada baixa performance no processamento em distribuído das solicitações em lote, realize as devidas configurações nestas variáveis, e nos arquivos de configuração Producer/Consumer, para atingir a cadência desejada.
Instalando/Configurando o Módulo Ações em Lote Consumer
O módulo Consumer/Worker também deve ser instalado na forma de Windows Service. Abaixo seguem as configurações necessárias para que esse módulo seja capaz de processar os itens da fila do RabbitMQ:
“SWorks.AcoesLote.Cosnumer” com o mesmo conteúdo da pasta “Sworks.SVC” presente no pacote de instalação.
RabbitMQ. Por padrão, a palavra “guest” para o user/password.
Módulo Distribuidor de Atividades (Activity Dispatcher)
O módulo de distribuição de atividades, também conhecido como Activity Dispatcher, é responsável por distribuir atividades manuais solicitadas pelos usuários operadores através do módulo Web App.
“ChassiSVC”, porém agora pode ser instalado como um Windows Service comum, utilizando a aplicação “sc” conforme mostrado anteriormente.
Kestrel, conforme abaixo:
“URL_WS_DISTRIBUICAO_ATIVIDADES” automaticamente.
Certifique-se que a URL do Activity Dispatcher possui uma “/” no final. A falta dessa barra final pode acarretar erro de conexão entre o módulo Web App e o Activity Dispatcher.
Configuração Pós Instalação do Distribuidor de Atividades (Activity Dispatcher)
O sistema possui duas formas de controlar a distribuição de atividades manuais, a padrão, que usa consulta direta em banco de dados, e a recomendada usando o “Activity Dispatcher”.
Para ativar a distribuição de atividades usando o módulo “Activity Dispatcher”:
“ARQUITETURA_BUSCA_ATIVIDADES_MANUAIS”
b. O valor “2” indica que será utilizado busca direta usando banco de dados.
Módulo Auxiliares (Sentinela/Expurgo/Expiração Atividades Manuais)
Os módulos Sentinela, Expurgo e Expiração de Atividades Manuais eram anteriormente módulos internos no sistema, sendo executados de forma acoplada em outros módulos. A partir da versão 2.3 estes módulos são executáveis independentes e, portanto, precisam ser instalados na forma de Windows Services.
Cada módulo possui um executável próprio na pasta “SWorks.SVC” presente no pacote, e devem ser instalados uma máquina “AlwaysOn”, havendo apenas uma instância do módulo por ambiente instalada.
Para cada um dos executáveis, execute os seguintes passos para instalação:
Módulo Service Discovery
O módulo “Service Discovery” é uma aplicação web, que deve ser instalada na forma de
Windows Service, responsável por manter um registro de todos os módulos do sistema em execução.
A interação entre os demais módulos do S-Works e o Service Discovery ocorre da seguinte forma:
O diagrama abaixo demonstra essa interação entre os módulos do sistema e o módulo “Service Discovery”:
Instalação do Módulo Service Discovery
Este módulo deverá ser instalado num servidor “AlwaysOn” que seja acessível por todas as instâncias do cluster do S-Works.
Configuração do ’Target File’ do Módulo Service Discovery
O módulo Service Discovery também mantém um arquivo chamado “Target File”, utilizado pelo Prometheus para obter os endpoints para realizar a leitura das métricas publicadas por cada módulo.
O seguinte trecho de configuração do arquivo appsettings.json diz respeito sobre essa funcionalidade.
“ambiente” e “cliente”, caso a instalação do Prometheus seja compartilhada.
Diagrama de Comunicação do Service Discovery
O diagrama a seguir mostra o ciclo de comunicação entre o Service Discovery e os demais módulos do sistema.
7. Arquivos de Configuração
Devido à alteração de framework, algumas configurações dos módulos, que costumavam ficar nos arquivos “web.config” para aplicações web, e no arquivo “ChassiSVC.exe.config”, agora estão localizadas em outros arquivos:
Configuração da String de Conexão
web.config. Essa é a tag de conexão usada no arquivo appSettings.json:
"DefaultConnection": "Server=localhost;Database=Sworks_banco;Integrated
Security=false;User ID=sworks_teste;Password=senha@senha"
Configurações de Logs
O arquivo responsável pelas configurações de log são:
Logs em Ambientes Clusterizados
Em ambientes clusterizados, onde os módulos estão em múltiplos servidores, é recomendado que se crie uma pasta compartilhada no servidor “AlwaysOn”, ou em qualquer servidor que fique ligado 24/7, com liberação de leitura/escrita para os usuários dos módulos, e em seguida alterar as configurações do “Appender” de nome “RollingLogFileAppender”.
Configuração de Log no Orquestrador (Consumer/Worker)
O módulo Orquestrador (Consumer/Worker) possui uma particularidade na configuração do log, que permite que cada linha de log exiba o código do processo em uma coluna específica, facilitando a aferição de problemas no processamento pela equipe de técnica.
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - [Processo|%property{processo}] - %message%newline" />
</layout>
Configurações de Monitoramento e Observability
A partir da versão 2.1, todos os módulos do S-Works possuem configurações que dizem respeito à habilitação e configuração da coleta de métricas do sistema.
A instrumentação dos módulos é realizada usando a biblioteca AppMetrics, e suas configurações são realizadas através do arquivo appsettings.json de cada módulo instalado.
O seguinte trecho de configuração estará presente em todos os arquivos de templates de configuração, podendo ser reaproveitados e alterados para aplicação correta nos arquivos originais.
Manter “false”.
Configurações do Prometheus
A instrumentação do S-Works prepara métricas para serem extraídas no formato de leitura da ferramenta Prometheus. Este manual não abordará a instalação e configuração desta ferramenta, porém se faz necessária a informação de leitura dos endpoints de métricas.
Conforme falado anteriormente, o módulo Service Discovery é responsável por manter um arquivo, chamado de “Targets File”, que contém as informações de coleta de métricas a serem lidas pelo Prometheus durante a operação de scrape (leitura das métricas). Para informar ao Prometheus a localização desse arquivo:
Isso se
Devido à dinamicidade de instâncias em execução do S-Works, quando implantado de forma clusterizada e utilizando recursos de auto-scaling, a configuração de endpoints de scrape precisa ser constantemente atualizada pelo Service Discovery. Dessa forma, o Prometheus sempre estará coletando as métricas das instâncias/módulos em execução.
Configuração do Appender para Graylog
A partir da versão 1.42, o S-Works possui compatibilidade padrão para envio de registros de log para uma instalação de Graylog existente. Para isso, siga as instruções abaixo:
<appender name="GelfHttpAppender" type="Gelf4net.Appender.GelfHttpAppender, Gelf4Net.HttpAppender">
<url value="http://localhost:12201/gelf" />
<layout type="Gelf4net.Layout.GelfLayout, Gelf4Net.HttpAppender">
<param name="AdditionalFields" value="Ambiente:Dev,Cliente:Simply,Modulo:TestConsole,Level:%level" />
<!--<param name="Facility" value="RandomPhrases" />--> <param name="IncludeLocationInformation" value="false" /> <param name="SendTimeStampAsString" value="false"/>
<!-- Sets the full_message and short_message to the specified pattern-
->
<param name="ConversionPattern" value="%date [%thread] %-5level %logger - [Processo|%property{processo}] - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingLogFileAppender" />
<appender-ref ref="GelfHttpAppender" /> </root>
Ao final da instalação, certifique-se que os logs estão sendo corretamente enviados para o Graylog.
Importante: Caso exista um appender chamado “AdoNetAppender” nas configurações, remova-o. Este appender salva informações de log em banco de dados, porém será descontinuado em breve.
As pastas dos módulos, no pacote de release, contém arquivos com sufixo ".template" contendo exemplo de configuração. Esses arquivos podem ser clonados, removendo o sufixo, para serem usados como referência de configuração.
8. O Instalador do S-Works
No pacote de release está contido o instalador do S-Works (SWorks.Instalador.exe), porém seu papel ainda é voltado para atualização do sistema, fazendo a interrupção dos applications pools e Windows Services devidos, e realizando a substituição dos arquivos das pastas de destino.
Só utilize o instalador caso todos os módulos já estejam pré-instalados e configurados, ou para realizar a geração do script de migration na primeira etapa do instalador.
Execute o instalador como usuário administrador e siga as instruções na tela para criação do script de migração do banco de dados, se houver, configuração das pastas onde os módulos devem ser extraídos.
A partir da versão 2.3, devido à separação de cada módulo em executáveis independentes, a etapa do instalador que indica quais módulos devem ser instalados sofreu uma alteração para permitir que múltiplos módulos sejam instalados de forma mais intuitiva.
Etapa de configuração dos módulos instaláveis.
Para adicionar um novo módulo:
Para editar um módulo:
Para remover um módulo da listagem:
As demais etapas do instalador não sofreram alterações.
Anexo I - Checklist Pós Deploy
Objetivo
Este documento tem o intuito de orientá-lo na análise da consistência do sistema S-Works pós instalação/atualização. Segue abaixo os passos necessários de verificação.
Módulo Web App
Figura 1 - Validar se a versão apresentada bate com a versão instalada.
Módulo Web Api
PENDENTE
Módulo Distribuidor de Atividades (Activity Dispatcher)
Figura 3 - Arquivo de log do ActivityDispatcher
Módulo Orquestrador (Producer)
Figura 4 - Registro de log do Orquestrador Producer mostrando licença válida.
Módulo Orquestrador (Worker)
Figura 5 - Registro de log do Orquestrador Worker mostrando processos sendo recebidos.
Módulo Orquestrador – Processamento Local
Geralmente em ambientes menores, em vez de termos a dupla Producer+Worker, temos instalado apenas o Orquestrador que é responsável tanto por buscar os processos a serem processados, quanto de fato processar. Para isso então:
Figura 6 - Registro de log do Orquestrador mostrando licença válida.
Ex:
Orientações Gerais
As seguintes orientações podem ser utilizadas em todos os módulos do sistema.
Ambientes com Integração Externa (Função)
Alguns ambientes possuem um mecanismo de integração externa, nesses casos possuímos 2 módulos avulsos implantados no ambiente de produção que são responsáveis por processar a integração de propostas no sistema.
Figura 7 - Página inicial do módulo Funcao.WS
proposta:
Figura 8 - Resultado de GET na URL de integração com Funcao.WS.