fundo
desenvolvedores Java e profissionais DevOps têm lutado muito para automatizar a implantação de aplicações corporativas Java. A natureza complexa dessas aplicações normalmente significava que as dependências de aplicativos e integrações externas tiveram que ser re-configurado cada vez que um aplicativo foi implantado em ambientes / Teste desenv.
Muitas soluções anunciado a mensagem "modelar uma vez, implemente em qualquer lugar" para implantações de aplicativos. Na realidade, no entanto, havia sempre meandros que seria muito difícil voltar a usar um modelo de aplicação em tanto um ambiente virtual on-premise vSphere e um ambiente AWS, por exemplo.
Mais recentemente, no entanto, recipientes Docker popularizou a idéia de componentes de aplicações de embalagem em Linux Os recipientes que podem ser implantados exatamente o mesmo em qualquer máquina Linux, enquanto Docker motor está instalado.
Infelizmente containerizing aplicações corporativas Java ainda é um desafio principalmente porque os quadros de composição de aplicação existentes não abordam dependências complexas, integrações externas ou auto-scaling fluxos de trabalho de pós-disposição. Além disso, o design efêmera de recipientes significa que os desenvolvedores tinham que girar novos contentores e recriar as complexas dependências e integrações externas com cada atualização de versão.
DCHQ, disponível nas versões hospedadas e no local, aborda todos esses desafios e simplifica a conteinerização de aplicações corporativas Java através de um quadro composição aplicação antecipada que se estende Docker Compor com ligações de variáveis de ambiente cross-imagem, script bash plug-ins extensível que pode ser invocado em tempo de requisição ou pós-disposição, e clustering aplicativo para alta disponibilidade em vários hosts ou regiões com suporte para auto escala.
Uma vez que um aplicativo é provisionado, um usuário pode monitorar a CPU, memória, & I / O dos recipientes de funcionamento, receber notificações e alertas, e realizar dia 2-operações como backups agendados, Container Updates usando script bash plug-ins, e Scale In / out. Além disso, os fluxos de trabalho out-of-box que facilitam a entrega contínua com Jenkins permitir que desenvolvedores para atualizar o Java GUERRA arquivo de um aplicativo em execução sem interromper as dependências e integrações existentes.
Neste blog, vamos falar sobre a automação de ponta a ponta de um aplicativo Java chamado Pizza Shop que é implantado em duas pilhas de aplicativos em contentores diferentes:
- Nginx (para balanceamento de carga), agrupado Tomcat e MariaDB (como o banco de dados)
- Nginx (para balanceamento de carga), agrupado Jetty e MariaDB (como o banco de dados)
O mesmo arquivo WAR Java será implantado em dois servidores de aplicação diferentes. DCHQ não só automatiza as implantações de aplicativos - mas também se integra com 12 nuvens diferentes para automatizar o provisionamento e auto-scaling de clusters com a rede definida por software. Nós vamos cobrir:
- Construir os modelos de aplicativos que podem re-utilizados em qualquer host Linux rodando em qualquer lugar
- Provisionamento e auto-dimensionamento da infra-estrutura subjacente em qualquer nuvem (com Rackspace sendo o exemplo neste blog)
- Implementando os Aplicativos Pizza Shop baseados em Java multi-tier no cluster Rackspace
- Monitoramento da CPU, memória e I / O dos recipientes de serviço
- Permitindo que o fluxo de trabalho de entrega contínua com Jenkins para atualizar o arquivo WAR dos aplicativos em execução quando uma compilação é acionado
- Dimensionando o Cluster Application Server para testes de escalabilidade
Construir Os modelos de aplicação para o Pizza Application Shop Java-Based On Tomcat e Jetty
Uma vez conectado para DCHQ (seja o DCHQ.io hospedado ou versão on-premise), um usuário pode navegar para App & Machine e clique no botão + para criar um novo modelo de Docker Compose.
Criámos quatro modelos de aplicativos usando as imagens oficiais do Docker Hub para a mesma aplicação Pizza Shop - mas para quatro servidores de aplicativos diferentes.
- 3-Tier PizzaShop (Nginx - Tomcat - MariaDB)
- 3-Tier PizzaShop (Nginx - Jetty - MariaDB)
Em ambos os modelos, você vai notar que Nginx está invocando um plug-in script BASH para adicionar o recipiente IP de um dos servidores de aplicativos no arquivo default.conf dinamicamente (ou no momento do pedido).
Os servidores de aplicação (Tomcat e Jetty) também estão invocando um plug-in script BASH para implantar os arquivos Pizza Shop Java guerra desde uma URL externa Tomcat, JBoss e molhe estão invocando exatamente o mesmo plug-in - exceto o arquivo WAR está sendo implantado em diferentes diretórios:
- Tomcat - dir = / usr / local / tomcat / webapps / ROOT.war
- Jetty - dir = / var / lib / Pontão / webapps / ROOT.war
Você vai notar que o parâmetro CLUSTER_SIZE permite que você especifique o número de recipientes para lançar (com as mesmas dependências de aplicativos).
O parâmetro de acolhimento permite que você especifique o host que você gostaria de usar para implementações de contêineres. Dessa forma, você pode garantir a alta disponibilidade para seus clusters de servidor de aplicativos em diferentes hospedeiros (ou regiões) e você pode cumprir com as regras de afinidade para garantir que o banco de dados é executado em um host separado, por exemplo. Estes são os valores suportados para o parâmetro host:
- host1, host2, host3 , etc. - seleciona uma série aleatoriamente dentro de um centro de dados (ou cluster) para implementações de contêiner
- <IP endereço 1, endereço IP 2, etc.> - permite que um usuário para especificar os endereços IP real para usar para implementações de contêiner
- <Hostname 1, Host 2, etc.> - permite que um usuário para especificar os nomes de host reais a ser usado para implantações de contentores
- Wildcards (por exemplo, "db- *", ou "app-srv- *") - para especificar os wildcards para uso dentro de um nome de host
Além disso, um usuário pode criar cross-imagem ligações de variáveis de ambiente, fazendo uma referência a variável de ambiente de outra imagem. Neste caso, temos feito várias ligações - includingdatabase.url = jdbc: mysql: // {{MariaDB | container_ip}}: 3306 / {{MariaDB | MYSQL_DATABASE}} - em que o IP contêiner banco de dados é resolvido dinamicamente em tempo de solicitação e é usado para assegurar que os servidores de aplicação pode estabelecer uma ligação com o banco de dados.
Aqui está uma lista de valores de variáveis de ambiente suportadas:
- {{alphanumeric | 8}} - cria um 8 caracteres seqüência alfanumérica aleatória. Isso é mais útil para criar senhas aleatórias.
- {{<Image Name> | ip}} - permite que você digite o endereço IP do host de um recipiente como um valor para uma variável de ambiente. Isto é muito útil para permitir que a camada de middleware para estabelecer uma ligação com o banco de dados.
- {{<Imagem Name> | container_ip}} - permite que você insira o endereço IP interno de um recipiente como um valor para uma variável de ambiente. Isto é muito útil para permitir que a camada de middleware para estabelecer uma ligação segura com o banco de dados (sem expor a porta de base de dados).
- {{<Imagem Name> | port _ <Port Number>}} - permite que você digite o número da porta de um recipiente como um valor para uma variável de ambiente. Isto é muito útil para permitir que a camada de middleware para estabelecer uma ligação com o banco de dados. Neste caso, o número de porta especificado deve ser o número da porta interna - ou seja, não a porta externa que é atribuído ao recipiente. Por exemplo, {{PostgreSQL | port_5432}} irá ser traduzido para a porta externa real que vai permitir que a camada de middleware para estabelecer uma ligação com o banco de dados.
- {{<Image Name> | <Environment Variable Name>}} - permite que você insira o valor variável de ambiente de uma imagem em variável de ambiente de outra imagem. Os casos de uso aqui são infinitas - como a maioria das aplicações multi-tier terá dependências cross-imagem.
Provisioning & Auto-dimensionamento da infra-estrutura subjacente On Any Nuvem
Depois que um aplicativo é salvo, um usuário pode registrar um provedor de nuvem para automatizar o provisionamento e auto-scaling de clusters em 12 pontos finais nuvem diferentes, incluindo OpenStack, CloudStack, a Amazon Web Services, Rackspace, Microsoft Azure, DigitalOcean, HP Cloud Pública, IBM SoftLayer, o Google Compute Engine, e muitos outros.
Primeiro, um usuário pode registrar um provedor de nuvem para Rackspace (por exemplo), navegando para provedores de nuvem e, em seguida, clicar no botão + para selecionar Rackspace. A API Key Rackspace precisa ser fornecido - que pode ser obtida a partir da seção Configurações da conta do painel de controle Rackspace Cloud.
Um usuário pode, então, criar um cluster com uma política de escala automática para girar automaticamente novas Cloud Servers. Isso pode ser feito ao navegar para Clusters de página e, em seguida, clicar no botão +. Você pode selecionar uma política de posicionamento por capacidade e então tecer como a camada de rede, a fim de facilitar a comunicação cross-recipiente seguro, protegido por senha em vários hosts dentro de um cluster. Política TheAuto-Scale neste exemplo define o número máximo de VM (ou Cloud Servers) a 10.
Um usuário pode agora fornecer um número de Cloud Servers no cluster recém-criado ao navegar para Máquinas e clicando no botão + para selecionar Rackspace. Uma vez que o provedor de nuvem é selecionado, o usuário pode selecionar a região, tamanho e imagem necessários. As portas podem ser abertas nas novas Cloud Servers (por exemplo 32.000-59.000 para Docker, 6783 para Weave, e 5672 para RabbitMQ). Um centro de dados (ou cluster) é então selecionado e o número de Cloud Servers pode ser especificado.
Implantando O Multi-Tier com base em Java Pizza Application Shop On The Cluster Rackspace
Uma vez que os Cloud Servers são provisionados, um usuário pode implantar um multi-tier, aplicativos Java baseados em Docker sobre as novas Cloud Servers. Isso pode ser feito ao navegar para a biblioteca de Self-Service e em seguida, clicando em Personalizar para solicitar uma aplicação multi-tier.
Um usuário pode selecionar um Tag Ambiente (como DEV ou QE) eo Cluster Rackspace criado antes de clicar em Executar
Acompanhamento A CPU, memória & S Utilização / dos recipientes de serviço
Uma vez que o aplicativo está instalado e funcionando, nossos desenvolvedores monitorar a CPU, memória, & I / O dos recipientes de funcionamento para receber alertas quando essas métricas exceder um limite pré-definido. Isto é especialmente útil quando nossos desenvolvedores estão realizando testes funcionais e de carga.
Um usuário pode executar a análise de monitoramento histórico e correlacionar questões a atualizações de contentores ou construir implementações. Isso pode ser feito clicando no menu Ações do aplicativo em execução e, em seguida, onMonitoring. Um intervalo de datas personalizado pode ser selecionado para ver CPU, memória e I / O historicamente.
Permitindo que o fluxo de trabalho de Distribuição Contínua Com Jenkins Para atualizar o arquivo WAR do aplicativo em execução Quando uma compilação é acionado
Para os desenvolvedores que desejam seguir o modelo de contentores "imutáveis" por reconstruir imagens Docker contendo o código do aplicativo e girando-se novos recipientes com cada actualização da aplicação, DCHQ fornece um recurso de compilação automatizada que permite aos desenvolvedores criar automaticamente imagens Docker de Dockerfiles ou projetos GitHub privadas que contenham Dockerfiles.
No entanto, muitos desenvolvedores podem desejar atualizar os recipientes de servidor de aplicativos em execução com o último arquivo WAR Java em vez disso. Para isso, DCHQ permite que os desenvolvedores para permitir um fluxo de trabalho de entrega contínua com Jenkins. Isso pode ser feito clicando no menu Ações do aplicativo em execução e, em seguida, selecionar Distribuição Contínua. Um usuário pode selecionar uma instância Jenkins que já foi registrado com DCHQ, o trabalho real no Jenkins que irá produzir o arquivo WAR mais recente, em seguida, um script plug-in para agarrar esta compilação e implantá-lo em um servidor de aplicativos em execução. Uma vez que esta política é salvo, DCHQ vai pegar o mais recente arquivo WAR de Jenkins qualquer momento uma compilação é acionado e implantá-lo no servidor de aplicativos em execução.
Desenvolvedores, como resultado terá sempre o mais recente arquivo WAR Java implantado em seus recipientes de funcionamento em ambientes / Teste desenv.
Dimensionando o Cluster Tomcat Application Server
Se o aplicativo em execução torna-se recursos limitados, um usuário pode dimensionar o aplicativo para atender a crescente carga. Além disso, um usuário pode programar a escala para fora durante o horário comercial e da escala em nos fins de semana, por exemplo.
Para dimensionar o cluster de servidores Tomcat 2-4, um usuário pode clicar no menu Ações do aplicativo em execução e, em seguida, selecione Escala de Fora. Um usuário pode, em seguida, especifique o novo tamanho para o cluster e, em seguida, clique em Executar agora.
Em seguida, usamos o plug-in bash para atualizar o arquivo default.conf do Nginx para que seja consciente do novo servidor de aplicativos acrescentou. Os plug-ins bash script também pode ser programado para acomodar os casos de uso, como a limpeza de registros ou atualizar configurações em frequências definidas. Um pedido de tempo-line está disponível para acompanhar todas as mudanças feitas ao pedido de auditoria e diagnósticos.
Para executar um plug-in em um recipiente de execução, um usuário pode clicar no menu Ações do aplicativo em execução e, em seguida, selecione Plug-ins. Um usuário pode então selecionar o recipiente de balanceador de carga (Nginx), procure o plug-in que precisa ser executado, permitir reiniciar recipiente utilizando o botão de alternância. O argumento padrão para este plug-in irá resolver dinamicamente todo o contêiner IP de um dos servidores Tomcat em execução e adicioná-los como parte do arquivo default.conf.
Um pedido de tempo-line está disponível para acompanhar todas as mudanças feitas ao pedido de auditoria e diagnósticos. Isso pode ser acessado a partir do menu expansível na parte inferior da página de um aplicativo em execução.
Alertas e notificações estão disponíveis para quando recipientes ou anfitriões são para baixo ou quando a CPU & Memória Utilização de qualquer hosts ou recipientes exceder um limite definido.
Conclusão
Containerizing aplicações corporativas Java ainda é um desafio principalmente porque os quadros de composição de aplicação existentes não abordam dependências complexas, integrações externas ou auto-scaling fluxos de trabalho de pós-disposição. Além disso, o design efêmera de recipientes significa que os desenvolvedores tinham que girar novos contentores e recriar as complexas dependências e integrações externas com cada atualização de versão.
DCHQ, disponível nas versões hospedadas e no local, aborda todos esses desafios e simplifica a conteinerização de aplicações corporativas Java através de um quadro composição aplicação antecipada que facilita ligações de variáveis de ambiente cross-imagem, plug-ins extensíveis script que podem ser invocados pelo solicitar tempo ou pós-disposição, e clustering aplicativo para alta disponibilidade em vários hosts ou regiões com suporte para auto escala.
Registe-se já na http://DCHQ.io
para ter acesso aos modelos multi-camada de aplicativo Java out-of-box juntamente com a funcionalidade Application Lifecycle Management como monitoramento, atualizações de contentores, a escala in / out de entrega e contínua.
No comments:
Post a Comment