Executando verificação de segurança...
6

[Dúvida] Infraestrutura Própria

Eu ultimamente tenho entrado no estudo de fazer minha própria infraestrutura na minha rede LAN (localhost) e subir para a WAN (internet).

Eu vejo que esse conhecimento cada dia vem acabando entre os programadores. Estou trabalhando com vários programadores, contudo só um tem habilidade de infraestrutura para subir banco de dados local, configurar firewall, equipamentos de rede, servidores e fazer a segurança da rede. À medida que surgiram essas "Clouds" o programador ficou mimado demais com a facilidade de subir aplicações sem entender nada além de dar comando em um CLI e ver seu funcionamento com apenas aquele custo delicioso no cartão de crédito que as empresas babam para ter.

Estou fazendo um servidor próprio usando um Ubuntu com Dockers e vejo que o custo de um servidor próprio versus uma "cloud" é ridículo, primeiramente, porque falamos em dólar e recebemos em real outra é o custo mensal pagar um computador melhor que o que nos oferecem. Entendo que falaram mas tem escalabilidade vertical, horizontal, diagonal, paralela e muitas escalabilidades, mas é difícil a pessoa apenas fazer você mesmo um servidor que bata o C10K (10 mil requisições) usando um ngix.

A segurança é um ponto que TODOS querem justificar para o uso irrestrito de AWS, Heroku, etc. Viver preso a uma empresa que sobe automaticamente sua aplicação não é ruim, porém você fica dependente de nunca ter que passar a cuidar da segurança porque você acha que aquele estouro de memória no seu código a aplicação escala e resolve. Dinheiro infinito é solucionador de bugs.

Eu vejo que aprender a infraestrutura é algo não só promissor e sim necessário para um programador, pois vive a mercê de subir aplicação só por "Clouds" faz a pessoa preguiçosa.

9

Como você se declara programador se nunca soldou os componentes de uma placa mãe?

Esse foi o tom que vi na sua pergunta. Você está cobrando de programadores algo que não é da responsabilidade deles. Configurar firewall, configurar equipamentos de rede e crimpar cabos são responsabilidades da infra.

Sim, são conhecimentos excelentes pra se ter, mas não são obrigatórios.

Eu tenho um Home Server simplesmente porque sou entusiasta e posso afirmar com propriedade que ficar HORAS conversando com a operadora pra resolver problemas de rede não mudou em nada minhas habilidades de programação.

Saber criar várias VMs em uma mesma máquina, configurar redirecionamentos de porta, configurar prioridade de conexões, configurar firewall X ou Y, alterar XML do KVM na mão para distribuir recursos escassos do meu servidor da melhor forma possível também não mudou em nada minhas habilidades de programação.

Programadores precisam conhecer, não dominar

A única coisa que eu preciso saber é que na VM X eu tenho a porta 80 e 443 abertas, o resto é resto. Isso qualquer interface web de cloud faz.

Cloud é muito cara, um notebook na garagem é muito mais barato

Quero que você coloque no papel:

1 - Internet da operadora A com SLA profissional -> aqui na minha cidade o último orçamento que tenho era questão de R$ 4000 / mês pra uma internet de 500 mbps

2 - Internet da operadora B com uma infraestrutura totalmente diferente da operadora A -> exatamente! As duas operadores não podem usar a mesma rota, tem que ser totalmente distintas, e você precisa de 2 porque se uma cair sua infra não pode ficar sem conexão

3 - Gerador de energia principal e backup -> se sua energia car não pode ficar indiponível
4 - Ar condicionado principal e backup

Aqui acredito que já passou dos R$ 50 / mês da AWS

Encerrando deixo minhas perguntas desta publicação:

  • Seu servidor precisa estar sempre disponível?
  • Você possui redundância de links de internet?
  • Se sim elas passam pelo mesmo backbone (quando uma cai a outra cai também)?
  • A fibra delas passa pelos mesmos postes nas ruas?
  • O que acontece se um caminhão muito alto passar e arrebentar todos os fios de uma rua?
  • O que você vai fazer se sua internet cair?
  • Você tem mais de um local pra hospedar e replicar seus servidores? (mínimo: bairro diferente, recomendado: estados diferentes)
  • Qual o SLA das suas operadoras? Ela satisfaz o que você precisa?
  • Como você vai se proteger de indisponibilidade de energia elétrica?
  • Qual a latência do seu link a todos os clientes? Isso vai interferir na qualidade do seu serviço?

Essas perguntas precisam ter respostas apenas caso você queria criar algo comercial.

Para o caso de um projeto comercial ou um projeto de estudos:

  • Você tem alguma proteção para ataques DDOS? O que acontece se alguem mandar um ataque de 1Tb/s pra sua rede?
  • Como você vai proteger sua rede contra ataques de força bruta ssh, portas abertas, exploits de equipamentos, elevação de permissao ...?
  • Qual firewall você vai usar?
  • Quem vai ter acesso físico ao seu servidor?
  • Como você vai controlar a temperatura do servidor (para o caso de ter mais do que uma única máquina)
  • Sua infraestrutura suporta um pico de acessos inesperado?
    Você tem IP Fixo?
  • Se você nao souber como se proteger desses ataques NÃO CRIE UM SERVIDOR EM CASA. Você cria o risco de deixar a internet da sua casa indisponível até sua operadora querer resolver seu problema, seja trocando seu ip, seja aplicando regras de firewall.

Assuma que todos vão querer te atacar, roubar seus dados, te deixar indisponível, derrubar sua conexão.

Você precisa se preparar para todos os problemas, eles só precisam achar um

Cada um tem seu caminho

Se todos os programadores aprendessem as mesmas tecnologias, usassem a mesma stack e resolvessem os mesmos problemas só teríamos especilistas em uma única função.

É uma arrogância absurda querer que todos sigam o mesmo caminho, você está cobrando que todos os programadores sejam arquitetos de sistemas, muitos estão nessa área só pra fazer o seu arros com feijão, ganhar seu salário e no fim do dia aproveitar com sua família.

Poucos são os que vão se destacar, poucos querem chegar pra jogar na série A.

Se você quer, faça você! Não cobre que os outros sigam o seu caminho

4

2 - Internet da operadora B com uma infraestrutura totalmente diferente da operadora A -> exatamente! As duas operadores não podem usar a mesma rota, tem que ser totalmente distintas, e você precisa de 2 porque se uma cair sua infra não pode ficar sem conexão

Lembrando que não se fala apenas de rota no sentido de rede, mas fisicamente também.

Datacenters profissionais recebem energia, internet, agua, de forma redundante e geralmente chegando por lados diferentes do prédio, de postes diferentes, de fibras que percorrem caminhos diferentes. É algo impensável para fazer localmente em pequena escala

2

Concordo muito no que você falou e gostei muito do seu encerramento com as perguntas. Não quis passar de arrogante e muito menos falar que a pessoa deixa de ser programador por não saber subir uma infraestrutura no famoso faça você mesmo (Do It Yourself).

Eu mesmo estou estudando e cansei de ser acomodado com subir na nuvem ou deixar que subam a aplicação por mim, sem eu entender como fazer isso. Não gosto de ficar passivo sem entender como alguem faz um serviço de deploy e infrasestrutura e ninguém quer aprender porque uma pessoa faz por todas. Por isso, disse essa questão do trabalho a pessoa se especializou naquilo e eu quero também por saber que é meu lado fraco.

Mais uma vez desculpa se o meu tom ficou muito arrogante.

2

Brabo. Se antes que não queria implementar minha própria rede, agora já não quero mais ainda. Eu ja conhecia alguns desses problemas que você citou, e fazem muito sentido. E bom conhecer, é muito bom mesmo, mas não é algo obrigatório. Boas observações.

5

Concordo com você.

Eu mesmo não mexo muito mais com isso porque não gosto e acabei não sendo bom o suficiente. Eu delego para outros quando posso.

Não gosto de nuvem e outros XaaS. Tem sua utilidade, mas acho um erro em boa parte dos casos. O que eu tenho na nuvem é servidor "próprio" para realizar o que preciso. Pode dar mais trabalho, mas tenho mais liberdade, poder, flexibilidade, geralmente custam menos, e até mais segurança.

Embora segurança de verdade, você tem in-house. Claro que pode fazer algo falho, mas não deve comprometer muito. Na nuvem, se errar pode comprometer muito. Então entendo que muita gente considera como seguro, mas é curioso que no começo do fenômeno falavam que era mais inseguro.

O que mais concordo é que no geral pode sair mais caro. Por que você acha que o Stack Overflow não usa nuvem? Lá tem alguns dos melhores programadores do mundo (muitos saíram). Gente que pensa para fazer em vez de seguir modinha. Eles tiveram um pouco de trabalho no começo, mas colocaram tudo no ar rapidinho, usufruem de muitas vantagens, além do preço, não precisar ficar escalando sempre (ele pagam menos do que pagariam em nuvem para atender uma demanda baixa, mas já tem pronto para multiplicar dezenas de vezes a capacidade sem custar mais ou mexer um dedo). Sabe porque eles aparecem primeiro em muita coisa no Google? Porque isso deu latência baixa. Os outros se ferram por causa da latência alta gerada por "infra alugada" e segmentada.

E claro que a preguiça é um problema também.

Hoje não compensa para o que eu uso, mas já tive um data center no meu quarto e funcionava melhor, além de ser muito mais barato. Eu pagava o investimento financeiro feito em 6 meses. Nenhuma aplicação financeira dá isso.

As pessoas não pensam mais, fFazem o que parece mais fácil.

Pior quando entregam mais que a infra e engessa você em tudo. Eu já vi (estou vendo de perto) o caso da solução ser uma porcaria porque a plataforma que entregou algo pronto tolhe seu trabalho.

Longe de dizer que a nuvem nem deveria existir, mas as pessoas perdem oportunidades por olhar para ela como a primeira solução. Tem coisa que entregará menor custo. Tem coisa que isso só aconteceu porque quem iria fazer não sabe fazer. Mas não adianta, quando a pessoa já está viciada, ela não enxerga mais nada. Eu tenho algo na nuvem em algo que faz sentido, que ficaria mais caro eu manter fora.

Ajudaria se tivessem serviços de entregar algumas coisas prontas para você usar em vez de alugar nuvem. Mas alguma coisa me diz que "pra variar" seria distorcido e começaria a ter problemas.

E para finalizar, eu volto a falar de aplicações web serem problemáticas. Muitas vezes você acaba sendo obrigado a ter essa complexidade toda (que pode pagar por mês para ter) só porque escolheu fazer web (até não é assim tão necessário sempre, mas muitas vezes é).

Um detalhe que eu percebi depois, até lendo oiutras respostas, até boas, que as pessoas hoje têm dificuldade de enxergar cenários que toda essa infra alugada não faz sentido, quando por décadas era só o que existia, funcionava absurdamente bem para quase todos os cenários e estava tudo bem. É verdade que alguns cenários novos isso mudou, mas muitos deles nem deveriam existir. Minha preoupação é que as modinhas estão cegando as pessoas e enxergam só um jeito de fazer e tem que ser o que está todo mundo falando. Estão até inventando a necessidade de um cenário que poderia ser diferente. Um dia farei algo explicando mais sobre.

Faz sentido para você?

Espero ter ajudado. Em geral estou à disposição na plataforma (sem abusos :D)


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

2

Independente de qual alternativa você escolher, seja servidores próprios, seja na nuvem, se você não souber o que está fazendo vai ficar um serviço ruim da mesma forma.

Uma VPS na núvem tem uma latência ultrabaixa se bem configurada, tenho uma aplicação em Oregon que responde em menos de 100ms, se usasse um servidor BR baixaria pra 20ms. Resolvi não fazer aqui porque a aplicação não se paga.

Cada XaaS tem a sua função, tem a sua aplicabilidade, e geralmente as pessoas escolhem apenas pela facilidade ou pela popularidade, mas sem realmente precisar disso.

A aplicação vai ficar sem performance por escolhas erradas, por arquitetura mal feita, por tecnologias escolhidas por digital influencers que vendem curso, ou até por programadores mal preparados ou negligentes. Se for esse caso nenhuma infra vai aguentar, por melhor que seja

1

Não há dúvida disso.

O problema é que as pessoas estão fazendo muita escolha errada, privilegiando um gosto, a necessidade de estar na moda ou algo que interessa internamente, não se preocupando com o usuário final. Tem caso que nem importa muito, meio que dá tudo na mesma. Está bem difícil eu ver um projeto, até dos mais conhecidos, que eu eu fale "mandaram bem aqui", proporcionamente, claro, porque até tem bastante numericamente. E claro que tem caso que é claramente melhor "terceirizar" (quase) tudo.

3

Não há problema algum nisso, são escolhas pessoais, da mesma forma que não fabricamos nosso próprio hardware, é possível optar por não ter o trabalho de estudar cada componente de software, baixar, instalar, configurar, ficar atualizando, ficar estudando segurança e modificando, ter dor de cabeça quando o site escalonar, se preocupar com contigências, etc.
Energia: Se minha "luz" acabar? Comprar no-break, painel solar, etc. E picos altos de energia, o que fazer para não queimar equipamentos? Só o no-break aguenta ou coloco um DPS (dispositivo de proteção contra surtos) na entrada do painel de energia?
Segurança: Se roubarem o equipamento? Fazer backup em HD externo? Mas podem roubar o HD externo juntamente com o equipamento que uso como servidor.
Comunicação: E se o link do provedor falhar? Pago um outro provedor de internet?
Manutenção: E se algum componente do PC/Mini PC/Servidor pifar? Eu sei diagnosticar o componente com defeito? Tenho peças sobressalentes? Eu sei trocar? Só encaixar ou precisa soldar? Eu tenho equipamento para soldagem? Eu sei soldar?
Eu mantenho um site pessoal a anos, nunca me preocupei com essas coisas, a poucos meses entraram aqui em casa, os dados não estão aqui, quanto a essa parte, tranquilo.
Costuma cair a energia aqui por volta das 11:00hs da manhã e voltar rapidamente, sem problemas.
Então antes de chamar as pessoas de preguiçosas, entenda que sua vida, sua necessidade não é igual a dos outros, por isso a importância de manter o respeito.

1

Realmente fui muito ácido na crítica, mas e itar a todo custo subir aplicações por conta própria faz a pessoa ser acomodada. Não brigo para mudar a realidade de que todos passam esses custos para as empresas que são especializadas nisso com suas soluções.

Vejo que há falta de interesse em não aprender porque já tem a AWS e Heroku pronta para passar o cartão.

3
0
3
2

No meu ponto de vista, aprender a infraestrutura é essencial mesmo da mesma forma que as faculdades nos colocam para aprender matérias que talvez nunca estudaremos com mais profundidade ou aplicaremos no nosso trabalho, apenas para ter um conhecimento básico. Claro, para alguns aprender "infra" irá estimular o seu ser e isso é tão normal quanto o contrário.

Gosto de pensar que um desenvovedor front-end que estuda muito design e um desenvolvedor back-end que estuda muito DevOps são desenvolvedores extremistas, no bom sentido, mas dificilmente se tornaram especialistas em design e devops.

Antes das Clouds existirem era um tremendo gasto e elas tornaram tudo mais barato. Podemos fazer uma analogia com o tomate que você compra no mercado, por que não plantar ele em vez de comprar na feira? Você está transeferindo a responsabilidade para as pessoas especializadas no Agro (agricutor, cooperativas, logistica, agrônomo etc) e irá economizar o seu tempo, não precisará se preocupar com as estações, com adubagem, colheita, não sentirá muito se tiver uma catastrofe natural etc.

Somado a isso, me lembrei do fato de que Henry Ford conhecia muito de moteres mas não era especialista em várias áreas e ele se cercava de vários especialistas para que a sua ideia conseguisse ser, no mínimo, sustentável.

Ou seja, as Clouds facilitam muito o nosso dia e conseguem entregar, além de vários benefícios, um rendimento maior do nosso tempo e com total certeza que existem diversos profissionais especialistas em diversas áreas, não apenas em "DevOps", para que se consiga manter a infraestrutura com integridade. Aprender infra acredito ser muito importante mas prefiro manter ela com os especialistas.

1

Seu pensamento é valido, concordo que programadores precisam ter a mente aberta para entender como funciona o hardware por trás de tudo, mas acho que não precisam ser especialistas nisso. Afinal, essa não é a função do programador.

E queria abrir sua mente quando você diz que a nuvem é mais barata.

Por exemplo, tenho uma infraestrutura na AWS que custa aproximadamente 110 dolares por mês, contemplando 4 nucleos, 16gb de ram, mais de 200gb de storage, dns gerenciado (route 53), algumas dezenas de gigas de S3.

Para montar um hardware equivalente, com um link dedicado (pensando em uptime > 99.999%), ssds em raid1, nobreaks, etc, custa MUITO caro.

A substituição de bateria de um nobreak simples (do tipo que NÃO* deveria ser usado em datacenter) custa em torno de 450 reais, e todo ano precisa trocar.

Para se ter um servidor que não pare nunca, você precisa de nobreaks redundantes. então multiplica esse custo por dois.

A maquina em si, deve estar num rack (que custa caro), em um servidor 1 ou 2u, que possuem fontes redundantes, hot swap de ssd.

Você precisa comprar o ssd em dobro para raid1, porém deve comprar discos reservas para fazer o hotswap se (quando) um parar.

Existe a segurança FISICA do ambiente do servidor. data centers possuem sistema anti incêndio, acesso físico controlado, geradores, etc.

Isso tudo torna difícil comparar a nuvem com uma estrutura local, PRINCIPALMENTE em pequena escala.