54 pontos por xguru 2022-09-26 | 8 comentários | Compartilhar no WhatsApp
  • Opero vários apps SaaS em um único servidor grande da OVHcloud
    • Processa cerca de 6 milhões de requisições sem cache por dia
    • O backend é Django/Python + MySQL + Redis + WebSocket (Pub/Sub)
    • Meu segredo é o OpenResty (Dynamic web platform based on NGINX and LuaJIT)
      • Uso scripts em Lua para lidar com cache complexo de páginas, bloquear DDoS, processar WebSocket e fazer offloading de requisições de longa duração
      • Um "Cloudflare do pobre" feito com 1500 linhas de código Lua
    • Esses apps foram criados antes do Docker, então simplesmente rodam como processos (systemd)
    • No início eu usava uwsgi, mas gunicorn é muito mais eficiente, então já migrei tudo
    • Meu SPOF é o DNS. Eu tinha uma boa relação com a DNSMadeEasy e não me preocupava com banimentos automáticos, mas agora a DigiCert os comprou, então isso virou um problema
    • Os pagamentos são processados com Stripe e PayPal. Adicionei o PayPal mesmo não gostando dele, porque não dá para saber quando o Stripe pode bloquear sem aviso
    • Os uploads dos usuários vão para Wasabi e Backblaze por meio de um servidor Python com aiohttp, e depois ficam em cache no nginx. Então meu custo de tráfego em nuvem é zero
    • A camada de WebSocket é meio instável. No começo eu fazia tudo com uma biblioteca Python de WebSocket baseada em asyncio, e até funcionava em certo ponto, mas quando tentei processar isso em múltiplos processos, o consumo de recursos disparou
    • Então decidi usar o WebSocket do OpenResty, mas não queria escrever lógica complexa em Lua
      • Mudei para usar Redis Pub/Sub para encaminhar mensagens ao processo Python
    • Mas não vou dizer o nome do meu serviço (não quero mais concorrentes!)
  • Tenho tendência a escolher opções menos conhecidas, e acho isso produtivo para desenvolvedores solo
    • PostgreSQL + SQLite
    • Linguagem principal: Rust
    • Front-end: htmx + tailwindcss
    • Hospedagem: CloudFlare + Vultr
    • nginx + nixos + circle ci
  • Algumas pessoas vão odiar isso, mas escolher WordPress foi a melhor decisão para mim
    • O fórum é bbPress
    • A comunidade em que os membros publicam posts é buddyPress
    • Para newsletter, em vez de um SaaS caríssimo, uso o plugin barato mailster.co (com Critsend.com)
    • A maior parte dos recursos que eu queria já existe em plugins: FAQ pesquisável, Captcha, anúncios, postar no Discord, sistema de denúncias de usuários etc.
    • Opero https://rpgplayground.com/
  • Opero o https://text-generator.io, um serviço que compete com a OpenAI
    • Antes eu usava Kubernetes no GCP, mas agora opero a partir de casa com minhas GPUs, por meio de túneis do Cloudflare. Assim, o custo das GPUs fica 10 vezes menor.
    • Analisa links e imagens usando Tesseract / Unified IO / OFA / Beautiful Soup etc., e responde sobre imagens/recibos
    • O site em si roda no AppEngine com Python + Stripe + Firebase UI, então o custo semanal é baixo
  • Hospedado na Render
  • Opero https://allaboutberlin.com
    • Roda com Craft CMS em Docker na DigitalOcean
    • O Craft facilita criar tipos de post personalizados com campos personalizados, algo difícil de fazer no WordPress
    • Mas, como não é WordPress, não há muitos plugins disponíveis de que eu precise
    • O nginx cuida de cache e de várias outras coisas
  • Se quiser ser produtivo, experimente PETAL
    • Phoenix + Elixir + Tailwind + Alpine.js + LiveView
  • Rails + Postgres + Redis + SideKiq
    • Hospedado na Heroku, rastreamento de erros com Sentry, monitoramento de performance com New Relic, e e-mail com Send Grid
    • Recentemente troquei o Google Analytics por Plausible e estou fazendo análises internas mais profundas com Ahoy (Rails Middleware)
    • Uso Intercom para suporte/chat com clientes, mas pretendo trocar por Chatwoot
    • Pretendo sair da Heroku, mas a principal alternativa, a Render, ainda não tem uma opção de HA Postgres com failover automático
    • Quando faço push para a branch master no GitHub, o deploy em produção acontece automaticamente
      • Só é possível fazer merge na branch master via PR, e apenas se Linter (Rubocop) + Tests (Rspec no CircleCI) + cobertura de 100% (codecov.io) estiverem verdes
    • A UI é Bootstrap, e faço renderização no lado do servidor com JavaScript
      • Para UIs que exigem mais interação, estou avaliando Hotwire/Turbo vs. Alpine vs. Stimulus vs. React
  • Desenvolvendo uma plataforma agtech
    • Backend: Rust, Rocket, sqlx, Postgres, um pouco de Ansible
    • Front-end: Rescript + React. Tenho usado bastante Rust/WASM, mas isso foi um erro. Estou tentando reverter

8 comentários

 
qkreoaksn 2022-09-29

Uau, como vocês conseguem gerenciar tudo isso sozinhos? Nossa.

 
galadbran 2022-09-27

Fico bem curioso sobre o que significa fazer offload de requisições web que demoram muito para serem processadas, porque quase não vejo explicações sobre isso ^^;

 
bohblue23 2022-09-26

Dammm

 
yshrust 2022-09-26

Uau, vocês usam uma variedade enorme mesmo,, é a primeira vez que vejo uma combinação como PETAL, muito bom

 
kandk 2022-09-26

👍

 
jujumilk3 2022-09-26

Artigo realmente muito útil, valeu mesmo!