SlideShare uma empresa Scribd logo
1 de 21
CUTELYST
USANDO QT NA
WEB
Daniel Nicoletti – INDRA
dantti12@gmail.com
GET /HELLO
200 ok
Daniel Nicoletti
Bacharel em Ciência da Computação pelo UNASP em 2007
Há mais de 10 anos desenvolvento aplicações C++ com Qt e KDE
frameworks.
Autor de projetos como Apper, print-manager, colord-kde,
packagekit-qt, aptcc, debconf-kde dentre outros que não deram
muito certo :(
E contribuições para QtMultimedia, QtWayland, Kernel Linux,
networkmanager-qt, polkit-kde, Grantlee, dentre outros que já não
lembro :)
POR QUE
MAIS UM
FRAMEWORK!?
2008
Django ganhando popularidade no mundo Python
▸ API mudava a cada release
▸ Feito em Python
Ruby on Rails surfando na onda da popularidade do
Twitter
▸ Lento
▸ Absurdamente simples para problemas simples,
mas imposível para problemas complexos
Perl Catalyst
▸ Mais rápido que ROR
▸ Simples, elegante
“2013
Retomar um projeto
Catalyst, parado há anos.
Falta de experiencia com
CPAN, Perl e técnicas de
depuração de código Perl
TIVE UMA IDÉIA
Usar as informações obtidas pelo MOC através do QtMetaObject para
simular, as definições de ações do Catalyst
Catalyst
sub users :Path(“usuarios”) :Args(0) {
my ($self, $c) = @_;
…
}
Cutelyst
C_ATTR(users, :Path(“usuarios”) :Args(0))
void users(Context *c) {
…
}
C_ATTR macro expande para Q_CLASSINFO e Q_INVOKABLE expondo a
informação e o método seguinte no QMetaObject do Controller.
Apesar do Catalyst ser MVC, o Cutelyst atualmente é apenas VC
▸ Model no Catalyst é a fonte de Dados, DBiX, Sql,
NoSql..
▸ A informação do model normalmente é
manualmente colocada na stash()
▸ Em C++ precisamos conhecer as Classes para
chamar os metodos, para isso podemos ter uma
classe abstrata
Views
São as classes
responsaveis por formatar
os dados e transformá-los
em algum tipo de mídia,
por ex HTML, PDF, E-mail,
JSON...
Controllers
São as classes que contém a lógica da
sua applicação:
▸ Obter dados Sql
▸ Escolher a view a ser usada
▸ Verificar autenticação
▸ Fazer cálculos
▸ Chamar API exerna...
TODA REQUISIÇÂO É ENCAMINHADA AO
CONTROLLER QUE RECEBE UM CONTEXTO
Context
Essa classe é o que “GRUDA”
todo o Framework, ela permite:
▸ Resolver métodos para
URLs
▸ Armazenar dados para
acesso em outros
componentes
▸ Acesso ao restante das
classes da aplicação
Request
(QIODevice)
Contém:
▸ Headers do
cliente
▸ Método (GET,
POST)
▸ Parâmetros da
URL e/ou POST
▸ Uploads
(QIODevice)
Response
(QIODevice)
Contém:
▸ Headers para o
cliente
▸ Dados de
resposta
▸ Status 200 Ok,
404 Not found
ARQUITETURA GLOBAL
Plugins
Núcleo do
Cutelyst
Requisição do
cliente
Sua aplicação
Engine recebe o pedido do cliente
Dispatcher decide qual método executar
Controller recebe o Contexto no método
adequado
Engine recebe o pedido do cliente
Aplication
Controllers
Views
Plugins
Engine
Dispatcher
PRIMEIRA VERSÃO DO CUTELYST
Cutelyst Django Perl
Request/s 5.000 1.800 1.500
RAM 2MB 20MB 50MB
TALK IS CHEAP
SHOW ME THE CODE
WEB
COM
C++?
Dúvidas
▸ Como!?
▸ Linguagem não é dinâmica
▸ Tem que compilar
▸ Como!?
▸ Linguagem velha
▸ Tipagem forte (strong typing)
Dúvidas
▸ Como!?
▸ Linguagem não é dinâmica
▸ Tem que compilar
▸ Como!?
▸ Linguagem velha
▸ Tipagem forte (strong typing)
▸ Como!?
OTIMIZAÇÕES
▸ USE ferramentas: valgrind, perf...
▸ Expressões regulares
▸ Evite QString split() / section()
▸ Preguiça ao obter dados (lazy evaluation)
▸ Inline!
▸ Named Return Value Optimization
▸ Modo de compilação: Debug vs Release
▸ Log de informações
▸ static & thread_local
▸ Cutelyst-wsgi & epoll
▸ Async
▸ Evite sender()
▸ Alocação/reuso de memória – jemalloc
▸ Use ferramentas! QByteArrayMatcher
▸ Linux CPU affinity & SO_REUSEPORT
CUTELYST HOJE EM NÚMEROS
CMlyst
Production
CMlyst
Debug
Ghost
Production
Requests/s 3.500 1.100 100
Memory 6 MB 5 MB 120
BENCHMARKS EM
WWW.TECHEMPOWER.COM/BENCHMARK
S
Connection: Closernrn
Dúvidas?
Sigam-me os bons!
@dantti12 & dantti12@gmail.com

Mais conteúdo relacionado

Mais procurados

Mais procurados (12)

Modernizando projetos legados usando APIs
Modernizando projetos legados usando APIsModernizando projetos legados usando APIs
Modernizando projetos legados usando APIs
 
Estendendo o kubernetes
Estendendo o kubernetesEstendendo o kubernetes
Estendendo o kubernetes
 
Kubernetes New Contributors Workshop - Brasil 2022
Kubernetes New Contributors Workshop - Brasil 2022Kubernetes New Contributors Workshop - Brasil 2022
Kubernetes New Contributors Workshop - Brasil 2022
 
Conhecendo o NuGet e utilizando com ASP.NET MVC
Conhecendo o NuGet e utilizando com ASP.NET MVCConhecendo o NuGet e utilizando com ASP.NET MVC
Conhecendo o NuGet e utilizando com ASP.NET MVC
 
Liferay com React - Boas práticas
Liferay com React - Boas práticasLiferay com React - Boas práticas
Liferay com React - Boas práticas
 
Monitoração com Nagios
Monitoração com NagiosMonitoração com Nagios
Monitoração com Nagios
 
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoBig Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
 
Putting a-heat-with-thermostat
Putting a-heat-with-thermostatPutting a-heat-with-thermostat
Putting a-heat-with-thermostat
 
Docker selenium
Docker seleniumDocker selenium
Docker selenium
 
Treze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidTreze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento android
 
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
MVP Virtual Conference (MVP V-Conf) 2015: Executando ASP.NET MVC 6 no Mac OS ...
 
TDC2016POA | Trilha .NET - O que esperar do C# 7
TDC2016POA | Trilha .NET - O que esperar do C# 7TDC2016POA | Trilha .NET - O que esperar do C# 7
TDC2016POA | Trilha .NET - O que esperar do C# 7
 

Semelhante a Cutelyst br-qtcon

Semelhante a Cutelyst br-qtcon (20)

k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes
k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetesk6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes
k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
 
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
 
Containers em produção!
Containers em produção!Containers em produção!
Containers em produção!
 
ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...
ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...
ASP.NET Core + Docker Compose: deployment descomplicado com containers - .NET...
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014
 
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
 
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
Banco de Dados - Docker Compose + Bancos Relacionais: descomplicando a montag...
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
 
Containers e DevOps
Containers e DevOps Containers e DevOps
Containers e DevOps
 
Monitoramento de containers Docker
Monitoramento de containers DockerMonitoramento de containers Docker
Monitoramento de containers Docker
 
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas DistribuídosQConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
QConSP16 - Apache Cassandra Evoluindo Sistemas Distribuídos
 
Práticas de Agilidade e QA na Comunidade KDE
Práticas de Agilidade e QA na Comunidade KDEPráticas de Agilidade e QA na Comunidade KDE
Práticas de Agilidade e QA na Comunidade KDE
 
Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018Docker para Desenvolvedores - Developers-BR - Agosto-2018
Docker para Desenvolvedores - Developers-BR - Agosto-2018
 
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
TDC2018SP | Trilha Testes II - Descomplicando a montagem de ambientes de Test...
 
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
 
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
Novidades do .NET Core 2.1 e do ASP.NET Core 2.1
 
Construindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em GoConstruindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em Go
 
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
 

Cutelyst br-qtcon

  • 1. CUTELYST USANDO QT NA WEB Daniel Nicoletti – INDRA dantti12@gmail.com
  • 2. GET /HELLO 200 ok Daniel Nicoletti Bacharel em Ciência da Computação pelo UNASP em 2007 Há mais de 10 anos desenvolvento aplicações C++ com Qt e KDE frameworks. Autor de projetos como Apper, print-manager, colord-kde, packagekit-qt, aptcc, debconf-kde dentre outros que não deram muito certo :( E contribuições para QtMultimedia, QtWayland, Kernel Linux, networkmanager-qt, polkit-kde, Grantlee, dentre outros que já não lembro :)
  • 4. 2008 Django ganhando popularidade no mundo Python ▸ API mudava a cada release ▸ Feito em Python Ruby on Rails surfando na onda da popularidade do Twitter ▸ Lento ▸ Absurdamente simples para problemas simples, mas imposível para problemas complexos Perl Catalyst ▸ Mais rápido que ROR ▸ Simples, elegante
  • 5. “2013 Retomar um projeto Catalyst, parado há anos. Falta de experiencia com CPAN, Perl e técnicas de depuração de código Perl
  • 6. TIVE UMA IDÉIA Usar as informações obtidas pelo MOC através do QtMetaObject para simular, as definições de ações do Catalyst
  • 7. Catalyst sub users :Path(“usuarios”) :Args(0) { my ($self, $c) = @_; … } Cutelyst C_ATTR(users, :Path(“usuarios”) :Args(0)) void users(Context *c) { … } C_ATTR macro expande para Q_CLASSINFO e Q_INVOKABLE expondo a informação e o método seguinte no QMetaObject do Controller.
  • 8. Apesar do Catalyst ser MVC, o Cutelyst atualmente é apenas VC ▸ Model no Catalyst é a fonte de Dados, DBiX, Sql, NoSql.. ▸ A informação do model normalmente é manualmente colocada na stash() ▸ Em C++ precisamos conhecer as Classes para chamar os metodos, para isso podemos ter uma classe abstrata
  • 9. Views São as classes responsaveis por formatar os dados e transformá-los em algum tipo de mídia, por ex HTML, PDF, E-mail, JSON... Controllers São as classes que contém a lógica da sua applicação: ▸ Obter dados Sql ▸ Escolher a view a ser usada ▸ Verificar autenticação ▸ Fazer cálculos ▸ Chamar API exerna...
  • 10. TODA REQUISIÇÂO É ENCAMINHADA AO CONTROLLER QUE RECEBE UM CONTEXTO Context Essa classe é o que “GRUDA” todo o Framework, ela permite: ▸ Resolver métodos para URLs ▸ Armazenar dados para acesso em outros componentes ▸ Acesso ao restante das classes da aplicação Request (QIODevice) Contém: ▸ Headers do cliente ▸ Método (GET, POST) ▸ Parâmetros da URL e/ou POST ▸ Uploads (QIODevice) Response (QIODevice) Contém: ▸ Headers para o cliente ▸ Dados de resposta ▸ Status 200 Ok, 404 Not found
  • 12. Engine recebe o pedido do cliente Dispatcher decide qual método executar Controller recebe o Contexto no método adequado Engine recebe o pedido do cliente
  • 14. PRIMEIRA VERSÃO DO CUTELYST Cutelyst Django Perl Request/s 5.000 1.800 1.500 RAM 2MB 20MB 50MB
  • 15. TALK IS CHEAP SHOW ME THE CODE
  • 17. Dúvidas ▸ Como!? ▸ Linguagem não é dinâmica ▸ Tem que compilar ▸ Como!? ▸ Linguagem velha ▸ Tipagem forte (strong typing) Dúvidas ▸ Como!? ▸ Linguagem não é dinâmica ▸ Tem que compilar ▸ Como!? ▸ Linguagem velha ▸ Tipagem forte (strong typing) ▸ Como!?
  • 18. OTIMIZAÇÕES ▸ USE ferramentas: valgrind, perf... ▸ Expressões regulares ▸ Evite QString split() / section() ▸ Preguiça ao obter dados (lazy evaluation) ▸ Inline! ▸ Named Return Value Optimization ▸ Modo de compilação: Debug vs Release ▸ Log de informações ▸ static & thread_local ▸ Cutelyst-wsgi & epoll ▸ Async ▸ Evite sender() ▸ Alocação/reuso de memória – jemalloc ▸ Use ferramentas! QByteArrayMatcher ▸ Linux CPU affinity & SO_REUSEPORT
  • 19. CUTELYST HOJE EM NÚMEROS CMlyst Production CMlyst Debug Ghost Production Requests/s 3.500 1.100 100 Memory 6 MB 5 MB 120
  • 21. Connection: Closernrn Dúvidas? Sigam-me os bons! @dantti12 & dantti12@gmail.com