Passaporte Dev Senior
Opensource Link to heading
- pitch das ideas
- cativar/sensibilizar os colegas a participar junto no projeto
- é um processo de venda
Coisas erradas
- não idealizar os mantenedores
- essas pessoas são sucessos possíveis
- todos esses caras começaram com um código simples
- Overengineering
- escopo grande sem ter tempo para executar
- senão não coloca na rua
- O valor de um projeto Opensource não é o problema q ele resolve e sim a quantidade de pessoas que usam o projeto Opensource
Estratégias para aplicações Multi-Tenent Link to heading
- https://github.com/henriquebastos/pds-multi-tenant/
- Formas de isolamento
- Diferentes instâncias
- “single-tentant na nuvem”
- economicamente é muito díficil fazer sentido
- um codebase pra aplicar em várias instâncias
- faz sentido se tiver uma discrepancia muito grande entre consumo de diferentes clientes
- Mesma instância e diferentes databases
- mais comum
- pq em geral o programador não tem um grande conhecimento de banco de dados
- Mesmo database e diferentes esquemas
- muito especifico para bancos q suportam schemas: Postgres, Oracle, SQL Server…
- quais bancos suportam?
- Mesmo esquema mas com id de referência
- segundo mais comum
- simples, mas é muito fácil fazer merda e vazar os dados
- com Django é fácil garantir que toda request pro ORM terá tenant_id
- Diferentes instâncias
- “Tem q ficar fácil. Você não pode fazer uma estratégia de multi-tenant e exigir que o estagiário lembre de colocar o tenant_id na query”
- Sempre começo com a estratégia 4. É muito fácil fazer uma migração de tenant_id (estratégia 4) pra cada um ter um banco de dados
- importante focar na estratégia de otimização do custo de infraestrutura
- https://www.viget.com/articles/multi-tenancy-in-django/
- ao invés de middleware do Django, também pode-se fazer outra aplicação WSGI para pegar o tenant, injetar na thread e depois chamar o Django
application = tenant_wsgi(get_wsgi_application())
- o tenant tem q ser especifíco por thread, pode-se usar o
threading.Local()
- fazer um experimento com threading.Local
- fazer experimento em usar o DATABASE_ROUTERS do Django
- https://docs.djangoproject.com/en/4.0/ref/settings/#std:setting-DATABASE_ROUTERS
- https://docs.djangoproject.com/en/4.0/topics/db/multi-db/
- https://www.amvtek.com/blog/posts/2014/Jun/13/accessing-multiple-postgres-schemas-from-django/
- https://stackoverflow.com/questions/65519069/django-routers-with-multiples-schema-in-database
- Postgres row-level permission