Pedido de ajuda de um Junior.

Olá amigos, assim como todo dev em inicio de carreira estou passando por dificuldades na área, gostaria de compartilhar brevemente a atual situação da minha carreira, e pedir a opinião dos senhores que são mais experiêntes a respeito de alguns fatores.

Contextualizando

Tenho 25 anos, fiz transição de carreira para trabalhar com desenvolvedor frontend e estou atuando na area há um ano e dois meses. Trabalho em uma empresa de pequeno porte da minha cidade, aqui desevolvemos e fornecemos um software para gestão para empresas do ramo têxtil para gerenciar custos operacionais das fabricas, preços, impostos, contas a pagar e a receber, entre outros serviços do ramo contábil.

Eu entrei na equipe para desenvolver uma versão Web para as soluções que atualmente são desenvolvidas em Delphi e fornecidas por meio de um .exe convencional. O objetivo é modernizar e permitir o acesso aos dados de gerenciamento da empresa de qualquer lugar, atualmente tudo roda localmente.

Antes de eu ingressar na empresa, a equipe de desenvolvimento já foi maior, porém agora há somente um desenvolvedor que está há mais de 20 anos aqui e que faz as manutenções e implementações de novas funções sozinho.

Entrei há um ano na empresa somente com o conhecimento que adquiri fazendo cursos do estilo "fique rico em 6 meses como programador" hahaha. Não exatamente assim, porém quase...

Desde então me dedico diariamente pra recriar os componentes do programa em um Web App usando Angular no Frontend e NodeJs no backend. Tudo estava correndo surpreendentemente bem, já desenvolvi várias telas, fazendo consultas no banco de dados e exibindo dados em tabelas gráficos, entretanto precisei começar a pensar em uma versão de produção para o app..

Os problemas

Pra resumir, a pedra no meu sapato tem sido o banco de dados, usamos FirebirdSQL e isso não é o problema, aprendi a fazer os comandos tudo certo, roda que é uma beleza.

O problema é que cada cliente tem seu próprio banco de dados rodando localmente e não é possível acessa-lo via internet (ou pelo menos eu não sei como).

Este tem sido meu principal empecilho, acessar os bancos de dados dos clientes:

  • Cada cliente tem seu banco de dados localmente
  • Nenhum dos nossos clientes têm ip fixo para que eu consiga fazer a API acessar remotamente
  • Atualmente todos os acessos remotos são feitos via VPN quando necessário.
  • Sugeri exigir dos clientes a aquisição do link com ip fixo, porém pelas reações dos meus colegas de empresa, percebi que não vai ter uma boa aceitação dos clientes.
  • Migrar os bancos de dados para nuvem também implicaria em um custo adicional indesejado

Enfim, essa é minha dor de cabeça atualmente, sugeri usar algumas soluções paliativas de maneira definitiva (famosa gambiarra) como:

  • DNS Dinâmico para o IP dinamico dos clientes, porém ainda teria dores de cabeça pra abrir as portas necessárias.
  • Fazer a API se conectar via VPN à rede local da empresa pra conseguir acessar o servidor do banco de dados

Todavia nenhuma solução que eu encontro parece viável a longo prazo e em um ambiente de produção que precisa ser confiável.

Gostaria de saber dos senhores, o que fariam no meu lugar? Alguma sugestão de tecnologia que eu posso utilizar para solucionar esse problema?

Desde já agradeço a atenção, Deus abençoe!

--Edit: importante salientar que estamos falando de um serviço fornecido há 20 anos, as pessoas já tem mais idade e são avessas a mudanças muito bruscas. Estou precisando lidar com isso também

Cara aqui vejo 2 erros GRAVÍSSIMOS

Erro da empresa

Por ter contratado um júnior para fazer um trabalho tão complexo.

Você é júnior cara, lembro quando eu tinha 1 ano de experiência e certamente não tinha capacidade para tomar 10% das decisões que estão sendo tomadas. Me preocupo de como vai ficar a qualidade final do projeto.

Erro seu

Por ter iniciado um projeto sem estar analisado.

Tudo estava correndo surpreendentemente bem, já desenvolvi várias telas, fazendo consultas no banco de dados e exibindo dados em tabelas gráficos, entretanto precisei começar a pensar em uma versão de produção para o app..

Um software web hoje, na minha opinião, deve estar na web no dia 1. Você instalou a biblioteca, fez o commit da primeira tela, ele já tem que estar em produção e acessível (CI/CD que fala)

Você gastou um tempo absurdo criando um projeto sem saber se ele vai funcionar? A comunicação com o banco de dados deveria ser a tua primeira preocupação!

Saiba o seu lugar

Quanto somos iniciantes temos muita sede e energia para querer mudar o mundo. Mas você deve saber o desafio que você pode e não pode resolver.

Não vejo você capacitado para resolver esse desafio.

E sinceramente se voê está perguntando essa dúvida aqui é porque sua empresa também não está preparada para esse desafio. Deve contratar gente especializada em infraestrutura, negócios e sobretudo gestão.

Aprenda a dizer não. não tem problema nenhum em dizer que Não sabe, que não tem capacidade pra resolver um desafio. Problema é você assumir uma responsabilidade e falhar com ela.

Enfrentando o problema.

Os erros foram cometidos, agora a questão é reparar.

Você aqui tem 2 opções:

1- Mover as bases de dados para a cloud.

Essa é a solução mais fácil para você. Porém mais difícil para o seu colega e possivelmente traumática para seus clientes.

Aqui deve-se contratar um servidor profissional em uma nuvem grande. Recomendo AWS, Azure, Google ou Oracle.

também implicaria em um custo adicional indesejado

Você está fazendo uma funcionalidade nova. O quanto isso vai gerar de lucro? Se não gerar lucro abandona o projeto e deixa do jeito que está.

Vantagens

  • Solução mais rápida e confiável

Desvantagens

  • Se todo o sistema em delphi não foi pensado para trabalhar com banco de dados remoto e faz muitas consultas subsequentes todo o sistema vai ficar mais lento por conta da latência.
  • Os clientes vão ficar reféns da qualidade de conexão deles. perde toda a vantagem de ser um sistema local

2- A sua aplicação acessar o banco de dados.

Isso facilmente seria resolvido com uma VPN como o Tailscale. Instale a VPN em cada servidor, dê permissão apenas para o servidor web ver cada um deles. E use o MagicDNS para acessar cada banco de dados individualmente.

Vantagens

  • Nenhum cliente vai precisar ser impactado por conta da nova funcionalidade. Tudo vai poder rodar na infra atual.

Desvantagens:

  • O servidor web vai sofrer com latência alta, vai ter que ter suas querys muito bem oyimizadas para trafegar a menor quantidade de dados possíveis na menor quantidade de querys possíveis.
  • O servidor web estará sujeito a disponibilidade da internet e banda de cada cliente. Se um cliente ficar sem internet o sistema inteiro fica fora do ar

Dor de cabeça

Sim, MUITA. O que você mais vai ter com esse projeto vai ser dor de cabeça. Sugiro atualizar seu currículo, aplicar pra, no mínimo, 100 vagas por dia e sair daí o mais rápido possível.

Uma empresa que trabalha há 20 anos vendendo um software e não dá valor ao core business só tem um caminho: a falência.


Uma dúvida pessoal: Se cada criente tem sua base local como são feitos os backups? o que acontece se aquele computador que fica lá no canto queimar do dia pra notie?

Não votei negativamente, mas quero trazer alguns contrapontos com base na minha experiência. > Erro da empresa Por ter contratado um júnior para fazer um trabalho tão complexo. Empresas assim, com um sistema legado desse porte e que muito provavelmente teve a sua primeira versão no DOS, pode ser que não tenha tanto lucro. Talvez ela não consiga oferecer um salário competitivo para um sênior, porque talvez o dono da empresa "receba o salário de um sênior". Estou especulando, mas essa é uma realidade possível. Outra possibilidade é a empresa não conseguir atrair pessoas com o conhecimento necessário justamente por ser uma empresa pequena, onde alguém com esse conhecimento demandaria um prêmio no salário para compensar o fato de trabalhar num lugar que talvez não tenha espaço para crescer quando comparado à uma empresa maior. Além disso, esse projeto com certeza levaria alguns anos sendo desenvolvido por uma equipe pequena, por uma pessoa então... Para conseguir argumentar mais assertivamente neste ponto, eu precisaria conhecer o escopo completo do projeto. > Erro seu Por ter iniciado um projeto sem estar analisado. Aqui eu concordo. O banco local seria a primeira das minhas preocupações, depois viriam outras de coisas específicas que não tenho certeza se seriam possíveis de serem feitas na Web ou com a tecnologia que eu planejo usar. Uma POC serve bem para essa situação. > Quanto somos iniciantes temos muita sede e energia para querer mudar o mundo. Mas você deve saber o desafio que você pode e não pode resolver. > > Não vejo você capacitado para resolver esse desafio. Eu aprendi muita coisa trabalhando numa empresa pequena e precisando resolver situações parecidas com essa. Não tenha dúvidas de que eu cometi muitos erros, e demorei muito tempo para resolver algumas coisas, mas era a única opção possível. Se a empresa tem tempo para isso, ótimo, o funcionário acaba ganhando muita experiência se ele for do tipo autodidata, que corre atrás e estuda no "tempo livre" (interprete isso como "estuda fora do horário CLT"). Acho que refazer um sistema é uma das coisas mais difíceis que existem. O ideal seria evitar sempre que possível, e se necessário, fazer em módulos pequenos. Refazer um ERP apenas para ficar numa tecnologia mais atual é um desafio enorme, principalmente se você não souber se essa tecnologia atual sustentará bem o ERP. > Aprenda a dizer não. não tem problema nenhum em dizer que Não sabe, que não tem capacidade pra resolver um desafio. Continuando com meu raciocínio, acredito que seja sim importante deixar claro que você, como júnior, não sabe fazer isso ou nunca fez algo desse nível, e expor as dificuldades conforme mencionei anteriormente. Se o gestor achar válido esse risco, então tudo bem. > Se não gerar lucro abandona o projeto e deixa do jeito que está. Lembrar disso é sempre bom. > O que você mais vai ter com esse projeto vai ser dor de cabeça. Sugiro atualizar seu currículo, aplicar pra, no mínimo, 100 vagas por dia e sair daí o mais rápido possível. Acho que essa é uma opinião muito radical. Vendo pelo lado do gestor/empresário, acredito que o projeto "tem tudo para dar errado", visto que depende de uma única pessoa e muito provavelmente o próximo contratado terá grande dificuldade de continuar o projeto, ou decidirá que "tudo deve ser refeito, de novo". O mais profissional a ser feito aqui, na minha opinião, é deixar claro para o gestor o tamanho do projeto, se já não estiver claro, e a dificuldade de implementá-lo. Se puder oferecer alternativas, outras coisas que gerem valor para o cliente como novos sistemas ou integrações, buscar entender por quê ele quer sair do Delphi... Tudo isso são pontos extras positivos. > Se cada criente tem sua base local como são feitos os backups? Existem várias opções: 1. O cliente conecta um HD externo no computador e inicia uma rotina de backup clicando num botão ou fazendo manualmente. 2. O cliente conecta um HD externo no computador, e o computador tem um script ou software responsável pelo backup que realiza essa rotina de madrugada, por exemplo. 3. O backup é salvo "na nuvem". Nada impede do sistema ser local e ter um backup online. --- No fim, dei um voto positivo na sua resposta, apesar de todas minhas opiniões divergentes. Você levantou bons pontos.
Você foi super ponderado nesse seu comentário, admirável.Mas também achei importante as opinições fortes do Pilati. > Outra possibilidade é a empresa não conseguir atrair pessoas com o conhecimento necessário justamente por ser uma empresa pequena Isso aqui é uma realidade, nossa cidade tem 200 mil habitantes e todo sênior que eu conheço aqui trabalha pra fora, complicado conseguir mão de obra. Enfim, tem sido um choque de realidade lidar com um projeto assim, até por isso resolvi pedir ajuda aqui. Vou usar as informações compartilhadas pelos senhores pra conversar com meus colegas e decidir qual rumo tomar
Peço que não me interpreta mal mas: > Acho que essa é uma opinião muito radical Atualmente estou numa posição que eu não me importo muito com as decisões da empresa > o próximo contratado terá grande dificuldade de continuar o projeto Se eu já estiver fora da empresa esse é um problema de outra pessoa. ### Explicando melhor Cabe a mim deixar claro para meus superiores a dificuldade técnica e os riscos que serão tomados nesse projeto. Cabe a mim desenvolver o código com a melhor qualidade possível dentro de um prazo justo. Cabe a mim explicar se as decisões tomadas estão sendo certas ou erradas. Não cabe a mim sofrer as consequencias de uma decisão errada tomada por outra pessoa. Se eu estiver disposto a seguir com o projeto, vamos arrumar de forma tranquila e que eu não seja consumido pelo processo. Agora se eu não estiver disposto é abandonar o barco. E sim, já pedi pra sair de uma empresa depois de uma semana trabalhando porque achava o fluxo de trabalho e o código horrível. Sabia que se continuasse minha sanidade seria consumida pelas manutenções frequentes. # Voltando ao assunto > Talvez ela não consiga oferecer um salário competitivo para um sênior Não estou falando de um sênior de uma grande empresa com um salário de 30k/mes talvez de um pleno com uns 3 anos de experiência? vou ainda mais longe. Se a empresa vende um ERP os próprios donos deveriam ter um conhecimento suficiente para gerenciar ela. Caso não consigam manter uma pessoa por muito tempo é inviável contratar uma consultoria para analisar os pontos principais?
Obrigado pela sua resposta, me trouxe muitas opiniões importantes para serem levadas em consideração. Sobre alguns pontos: > Por ter contratado um júnior para fazer um trabalho tão complexo. De fato, hoje eu sei disso. Em vários momentos ao longo desse 1 ano aqui já estive empacado em outras questões do desenvolvimento dessa aplicação e sinto um pouco de desamparo técnico por parte dos colegas que trabalham comigo. **Não são capacitados pra me ajudar e eu também não sou capacitado pra ajudar eles** > Por ter iniciado um projeto sem estar analisado. > Você gastou um tempo absurdo criando um projeto sem saber se ele vai funcionar? A comunicação com o banco de dados deveria ser a tua primeira preocupação! Quando entrei eu tinha bem pouco conhecimento e fui seguindo o que me passavam. Comecei fazendo o layout adaptando o front atual do Delphi em uma versão mais minimalista para Web, criando telas independentes e fazendo consultas em um banco de dados que estão rodando na minha maquina, eu tenho cópias dos bancos de dados dos clientes a minha disposição. No inicio do projeto nem me passou pela cabeça como eu faria pra colocar isso rodar em produção. > Não vejo você capacitado para resolver esse desafio. Nem eu. > Dor de cabeça - Sim, MUITA. O que você mais vai ter com esse projeto vai ser dor de cabeça. Sugiro atualizar seu currículo, aplicar pra, no mínimo, 100 vagas por dia e sair daí o mais rápido possível. Sim, percebi isso também. Não quero nem ver como vai estar esse monstro daqui uns 2 anos.

O que mais me impressiona é um júnior entrar numa empresa e em pouco tempo ter que tomar decisões de negócio, resolver B.O gigantes, ao invés de estar fazendo as issues do projeto. Não sei como ajudar, mas eu deixaria claro que isso não faz parte da minha função dentro do time, ta com cara de infra.

É mesmo um problema de infra e é um problema grande, porém acredito que estou adquirindo bastante bagagem técnica aqui. Ter que cumprir com muitas responsabilidades é o problema de trabalhar em empresas pequenas. Espero conseguir ingressar em uma equipe de desenvolvimento mais estruturada ainda esse ano, se conseguir me ajudar nesse assunto também estou aceitando :D

Sem delongas, vou falar o que eu fiz numa situação muito semelhante. Não encare como sugestão, apenas é algo que fiz e pode ser interessante como caso de estudo.

Meu cliente possui varias filiais onde cada uma tem uma copia do banco de dados. Aplicação desenvolvida em Delphi e banco de dados Firebird. Eu precisava sincronizar todos os bancos de todas as filiais para montar um estoque centralizado (virtualmente centralizado) pois eles precisam alem de vender nas lojas fisicas, agora vender em um site proprio e em marketplaces. Isso significa que eu tambem teria que dar baixa no estoque quando um produto fosse vendido online. Sendo assim eu precisaria de comunicacao entrando e saindo de todos os bancos o tempo todo.

Como eu resolvi?

Simples. Desenvolvi duas aplicacoes uma client (que eu instalo na maquina que está o banco de dados da loja) e outra aplicação que eu hospedo num servidor que vai centralizar e orquestrar toda essa bagunça.

Por questões de segurança eu jamais coloco um computador exposto na internet. No lugar, eu faço o app client se comunicar com o banco de dados e sincronizar com o app servidor. É app falando com app.

O client coleta os dados locais e envia para o server na nuvem. O server processa isso de todos os canais (client, site e marketlaces).

Depois de processado, o server deixa uma resposta em fila para entregar ao client na proxima vez que ele conectar ao server para enviar as ultimas atualizações locais. Nesse momento, o server aproveita a conexão do client e devolve para ele os novos valores de estoque.

O server nunca fica com os dados armazenados nele. A informação é usada apenas até que o sincronismo esteja finalizado. Assim que todos os registros foram devidamente teansferidos para todos os clients, a info do server é apagada. Isso garante a segurança dos dados e permite que o server seja um terminal volatil que pode ser apagado, reiniciado, desligado que a informacao do server é apenas o resultado da coleta do que os clients enviam para ele. Por isso, se o server morrer e eu precisar reinstalar na nuvem novamente, eu nao preciso nem me preocupar com backup, pois na hora que ele iniciar a primeira vez após a manutencão, ele vai aguardar os dados que os clients vão enviar pra ele e tudo volta ao normal.

Como disse, solução simples, segura e barata.

Interessante a solução, obrigado por compartilhar. Mas acredito que no meu caso é um pouco diferente, uma vez que me falta infraestrutura pra conseguir implementar uma aplicação que controla o banco localmente e se comunica com a rede. Ou posso não ter compreendido completamente a sua resposta também
Opa, tranquilo. Expliquei rapidamente e mesmo sendo conceitualmente simples tem bastante detalhe para fazer isso tudo funcionar. Respondendo especificamente o ponto que você comentou: eu precisei apenas do wamp rodando no computador que ja tem o banco de dados. Na nuvem eu usei uma VPS simples , $5/mês. Implementei isso usando PHP, mas se eu fosse refazer isso novamente eu optaria por node + express que funcionaria bonitamente! O cuidado para implementar algo nesse formato é apenas certificar que a sua aplicação a ser desenvolvida consiga se comunicar (tenha lib) para o Firebird. Aí pronto, você não precisará fazer nada no sistema operacional, nem liberar portas, regras de firewall, ficar controlando qual o ip do modem para chegar na aplicação fora da rede, etc. É só focar na regra de negócio e ser feliz

pessoas são avessas a mudanças, bruscas ou não, independente da idade. é da natureza humana.

como funciona esse lance do acesso via VPN? vc conecta na vpn, o cliente tb e ai vc acessa pelo IP da rede local?

algumas perguntas para expandir o contexto aqui: -qual a razão por trás de ter um "datacenter on premise" basicamente? conexão de internet instável? -alem do banco rodando local, o que mais vc tem nessas localidades? -essas localidades tem internet sempre ou alguem precisa tambem conectar a internet (que seja trocando um cabo de porta no roteador ou equivalente) -que tipos de serviço já usam hoje? para não sugerir algo completamente fora da realidade

se bem entendi a sua necessidade é conseguir se conectar no DB sem precisar ligar pro João e pedir pra ele entrar na VPN, é isso mesmo?

como funciona esse lance do acesso via VPN? vc conecta na vpn, o cliente tb e ai vc acessa pelo IP da rede local? - Sim, sempre que precisamos fazer alguma manutenção nas empresas conectamos via VPN para faze-lo -alem do banco rodando local, o que mais vc tem nessas localidades? - Atualmente tudo roda localmente na empresa, o software que fornecemos roda instalado nas máquinas windows e o banco de dados Firebird está rodando em uma máquina que funciona como servidor e é acessado via rede local pelo software nas maquinas. A infraestrutura de rede provavelmente se resume a: um modem de internet e um switch pra distribuir a rede cabeada. -qual a razão por trás de ter um "datacenter on premise" basicamente? conexão de internet instável? - Não acho que compreendi 100% esse "datacenter on premise", mas o banco roda em uma máquina localmente porque nunca houve necessidade de ser de outra forma, uma vez que todos os acessos são feitos internamente na empresa -essas localidades tem internet sempre ou alguem precisa tambem conectar a internet (que seja trocando um cabo de porta no roteador ou equivalente) - Sempre tem internet, não vejo reclamações a respeito de quedas -que tipos de serviço já usam hoje? para não sugerir algo completamente fora da realidade - São empresas com infraestruturas simples, usam link de internet de provedores locais convencionais se bem entendi a sua necessidade é conseguir se conectar no DB sem precisar ligar pro João e pedir pra ele entrar na VPN, é isso mesmo? Sim! Eu poderia pedir para um funcionario cuidar da conexão da VPN ou fazer uma aplicação no node pra rodar na máquina onde está o banco de dados e manter uma conexão VPN com um servidor. Mas não acho que seja o ideal, gostaria de soluções mais práticas e mais confiáveis, por isso pedi ajuda aqui.
entendi... sobre o datacenter, achei que era algo mais parrudo, mas já vi esse cenário que vc descreveu...é o banco rodando num desktop que fica ali no cantinho, se alguem tropeçar no fio, para tudo. da uma olhada no Cloudflare Tunnel, parece ser um bom ponto de partida. Você teria um tunel conectando cada localidade a internet via Cloudflare, ai é questão de restringir para só o IP da matriz conseguir acessar
Não conhecia essa função do Cloudflare, vou testar aqui. Obrigado pela sugestão, oraculo.

A solução que vejo, é você montar um DCL na empresa e hospedar o banco de dados lá! É um custo adicional, mas um custo único. 40k em um data center local que não vai precisar de upgrade por alguns anos. Afirmo isso porque pelo seu relato, a empresa não deve ter um fluxo tão alto de clientes, então ter um cluster na sua empresa com os custos de banda, domínio e o básico para infra, como firewall, link secundário e etc. Essa é a melhor solução viável que vejo pra sua situação. Não necessariamente você precisa gastar uma grana que provavelmente a empresa não tem, pode ser um DCL simoles com custo de implantação na faixa dos 15k.

Outra solução não muito viável, é você arriscar usar um banco de dados online gratuito, mas isso vai causar um atraso na escalabilidade do seu sistema, tento inclusive um possível gargalo quando o banco tiver peso.

Está aí os meus 10 centavos de contribuição, também sou Jr. Na verdade, menos que Jr, estudo desenvolvimento Full Stack a 2 anos e isso é o que me veio na cabeça com sua explicação e a leitura da interação dos outros membros.

Minha stack é Angular + Nestjs + Java + OCI, estamos quase no mesmo barco. Boa sorte, sucesso pra você.

faltou por na ponta do lapis as pessoas que vao ter que operar esse datacenter, energia (e outros opex) e principalmente a latencia do app rodando nos clientes e se conectando em um db remoto. a empresa mantem um software em delphi usando firebird como db, nao é exatamente o estado da arte. deve beirar o impossivel uma empresa de pequeno porte internalizar tambem uma operação de datacenter (por menor que seja)

Rapaz, que situação complicada. Não sei se entendi completamente o problema, e peço desculpas se estiver falando besteira.

Eu proporia um plano de migração da seguinte forma:

  • Modelo legados: continuarão como estão, mas explicaría que novas funcionalidades estarão disponíveis na versão web do produto.
  • Modelo misto: para esses clientes, eu criaria um contêiner Docker para sua aplicação web e o instalaria na mesma máquina local que o FirebirdSQL. Os clientes poderiam continuar usando o Delphi, mas também teriam acesso à aplicação web na mesma rede. Isso permitiria que os usuários experimentassem a nova aplicação e se familiarizassem com a versão web.
  • Modelo web: neste modelo, os usuários não teriam mais o Delphi local e acessariam tudo pela web. O banco de dados ficaria aonde voce quiser (acredito que em nuvem).

Na disciplina de economia comportamental, é dito que: "As pessoas mudam seu comportamento através de incentivos."

Crie um marketing persuasivo, explicando as vantagens do modelo web (mais barato, maior conveniência, melhor suporte, novas funcionalidades, etc.). Se os incentivos forem suficientemente atrativos, as pessoas mudarão.

Nota: O modelo misto que mencionei é bem arriscado; é arriscado ter duas applicacoes rodando em paralelo. Contudo, se o sistema atual é realmente legado e nao tem muitas atualizacoes; talvez este modelo misto funcione. Apenas voce pode avaliar isso.

agora há somente um desenvolvedor que está há mais de 20 anos aqui e que faz as manutenções e implementações de novas funções sozinho.

Ja perguntou para este desenvolverdor mais experiente? O que ele acha?

Se quer algo mais moderno que Delphi, só usar Java e JPA, é justamente para isso, a única coisa que tem que fazer na aplicação é instalar um driver para cada tipo de banco de dados. Se não dão acesso a internet o jeito é carga fria, cliente salva os dados em um .csv, compacta e envia por e-mail, pendrive e motoboy, conexão discada, o jeito que der. Vai ter problemas de dados desatualizados, vai, mas a empresa e cliente não querem investir nada não tem jeito. Lembrei de um diretor me botando pressão, falando que o "software estava lento", só falei assim, olha os dados aumentaram 20x, vai ter que investir em hardware agora. O cara de pau ainda mandava as funcionárias falar comigo, eu só dizia, o problema é hardware, conversa com o diretor. Um bocó de outra área, querendo agradar o diretor, usou cache indiscriminadamente, fez um monte de gambiarras, só para melhorar pouca coisa, mas no geral continuou lento e pior todo dia era a mesma coisa, pessoal falando que os dados estavam diferentes, ele falando para limpar cache.

Não falo mais que o Pilati falou. Mas uma coisa boa é que você vai aprender muito no meio desse caos e vai poder ir pra uma empresa melhor ou mais organizada. :)

O pingo de esperança para o seu problema

Cara uma solução que me veio a cabeça é aproveitar do aplicativo dentro do pc local e fazer uma conexção reversa com o back-end.

Um exemplo disso seria.

O ARQUIVO.EXE > NO PC COM ACESSO AO BANCO LOCAL > ENVIA UM REQUEST PARA O BACK-END CRIANDO UMA SESSÃO WEBSOCKET > AI O BACK-END FICA COM ACESSO "AO PC" PODENDO FAZER AS CONSULTAS POR LÁ ENVIANDO AS QUERYS SQL.


Bem eu não vejo "falha" nessa solução apartir das seguintes afirmações.

  • O Pc da empresa precisa estar ligado (em resumo a empresa precisa estar com ernegia e aberta para o sistema web funcionar)
  • A empresa tem que ter acesso a internet
  • O usuario do sistema web teria o acesso enquanto a empresa estivesse funcionando (06:00 as 17:00)

Então a partir do momento que vc tem acesso a essa confirmações dos clientes do serviço essa solução é totalmente valida ao meu ver.

(estou aberto a perguntas e apontamento de erros é claro com respeito por favor).

Qual o tamanho do banco de dados destas empresas que são clientes do teu sistema?

O banco é consideravelmente grande, tem umas 400 tabelas, várias procedures, etc. O arquivo.FDB dos bancos tem em média 500mb cada
Colocar esse banco na núvem não seria tão inviável como parece, desde que você hospede vários clientes na mesma maquina por exemplo. E não exige tanto conhecimento, poderia usar um AWS RDS por exemplo que já entrega tudo mastigado

Amigo, bom dia. Gostaria de fazer alguns comentários, mas não ficou claro pra mim, se:

  • Você precisa ter acesso ao ambiente do cliente para dar suporte
    • Se o acesso basta ser apenas ao banco de dados ou se precisa acessar demais arquivos, como a propria aplicação
    • Se existe a necessidade efetual de ações de updates pontuais, ou se é um acesso para leitura apenas, para diagnosticar problemas e depois sim, fazer uma ação mais efetiva
  • Você precisa ler as informações de tempos em tempos, mesmo sem a necessidade de suporte, pra acompanhar algo na operação do cliente.
Bom dia! Se tratando de uma aplicação Angular que não vai ter mais do que 50 acessos simultâneos vamos deixar hospedado ou no firebase ou se necessário na Oracle, temos uma maquina free que comporta (eu acho). > Você precisa ter acesso ao ambiente do cliente para dar suporte Já o backend e o Banco de dados inevitavelmente precisam estar no mesmo local e provavelmente ficaria dentro das empresas clientes. Então sim, o mesmo problema que tenho pra fazer as coisas funcionarem eu teria pra conseguir dar manutenção futuramente.

Sobre o banco de dados. Não sei se é viável. Todas soluções requerem análise prévia. De custos e tempo de implementação. Você poderia adquirir pra desenvolvimento e teste uma instância de um banco RDS na AWS e incluir um novo database para cada cliente se não forem muitos. Ou alterar o banco pra funcionar com multi-tenant (um único banco com vários clientes plugados e acesso as tabelas vinculado por id de cliente, resumo tosco... na prática a treta é maior). Tu consegue uma instancia de banco rodando free por um ano. Veja nos demais provedores qual é mais vantajoso. No fim a ideia seria repassar os custos da instancia para os clientes ou incorporar como custos da empresa.

Já lidei com um problema parecido. Trabalhei em um ecommerce para farmácias e algumas delas usavam erp para controlar o estoque porém era interno/local. Tínhamos um serviço que rodava local que enviava pra uma fila os estoques 2 vezes ao dia para sincronizarmos com o ecommerce.

Não sei se é viável sincronizar o banco todo. Mas espero poder contribuir aí com a solução do seu problema.

Procure implicações da lgpd sobre uso do banco de dados. Se for utilizar banco na nuvem procure orientações sobre boas práticas de uso pois as implicações de vazamentos podem ser catastróficas. Lembre também que os custos recaem sobre a infra do banco (tamanho/potencia da máquina que implica na velocidade e capacidade de cache do banco), armazenamento (quantidade de memória em disco) e backup (tamanho e quantidade de vezes)