SlideShare uma empresa Scribd logo
1 de 27
Do SaaS ao PaaS
no Mercado Eletrônico
Ricardo Pardini, qCon SP ‘13
Quem?
• Ricardo Pardini, CTO, Mercado Eletrônico
– Lead Developer (desde 2001)
– SysAdmin
– Architect
– Guilty (forever)
• http://pardini.net/blog
• Desde 1994! BBS > Web > SaaS > PaaS
• B2B: entre empresas
• SRM: o “contrário” do CRM
• Procurement: transacional: pedidos, cotações
• R$ 60 bilhões/ano
• 60k usuários e 100 grandes compradores
• Enterprise: grandes clientes corporativos
Enterprise??
Enterprise
• “enterprise software is often available as a
suite of customizable programs” (Wikipedia)
• Grande necessidade de customização
• Integração com ERPs também customizados
• Restrições “técnicas” (firewalls... browsers...)
• No Brasil adoramos customizar
SaaS: Software as a Service
• “Era só um website...”
• Single-instance
• Multi-tenant
+ Funcionalidade padrão
-Custo de operação e investimento inicial
• Similar: SalesForce (1999), Basecamp (2004)
Simplicidade (<2001)
Comprador
Cotação de
Preços
Fornecedor
Pedido de
Compra
“Complexidades”
• Impostos
• Integrações
SaaS + Enterprise
• Customizar!
– Mas, não era padrão?
– Manter as customizações ‘vivas’
– GMUDs
• Grande necessidade de recursos
• Inovar!
“Feature Gating”
if (gk_check('abc')) {
do_abc();
} else {
do_old_stuff();
}
Gatekeeper (Facebook)
Feature Bits (M.Fowler)
Dados específicos demais
ALTER TABLE pessoa ADD COLUMN corDoPagagaio VARCHAR(20);
public String getCorDoPapagaio() { /* ... */ }
public void setCorDoPapagaio(String cor) { /* ... */ }
Atributos ao resgate
Mais customizações / Limites
• Scripting
• Processadores de filas customizados
• OOP: class per client, interfaces
• Limitações
– Fluxos e entidades básicas tem de ser respeitados
– Disponibilidade de pessoal interno
– Audits / GMUDs
– Reuso
PaaS: Platform as a Service
• Infrastructure + Solution Stack
• Heroku, Azure, Force.com,
CloudFoundry, AppEngine
• Serviços comuns (auth, storage)
• Deploy facilitado
• Cliente escreve funcionalidade
‘do zero’
• Ou, customiza pré-existente
PaaS no Mercado Eletrônico
• Gerenciar customizações em todos os níveis
– Look and Feel
– Funcionalidades
– Modelos de dados
• Permitir compartilhamento de pacotes funcionais entre
clientes, ou top-down
• Agregar funcionalidade padrão comum (CRUD,
analytics, APIs – backend as a service)
• Desenvolvimento de customizações
por terceiros
Arquitetura a um KM de altura
Metadados
Pré-
definições
Dados
compartilhados
Código
Custom
Composição de Aplicações em
Tempo de Execução
Customizações
Dados
Metadados
Pré-definição
(“padrão de
mercado”)
Especialização
do Metadado
Interfaces e
Abstract Classes
Implementações
Específicas
Metadados
• Objetos de dados
– Campos, tipos, validações
– Similar a tabelas SQL
– Eventos
• Documentos
– Composição de objetos
– Listas e relacionamentos complexos
– Handlers completos
Materialização
• Geração de bytecode Java
– Javassist
– CGLib
– ASM
– JSR 199: Java Compiler API
• Groovy!
– Completo (Generics, Annotations, etc)
– Captura o bytecode gerado
Embedded Groovy
GroovyClassLoader gcl = new GroovyClassLoader();
Class clazz =
gcl.parseClass("class Custom1 implements MyIntf{...}");
Object aScript = clazz.newInstance();
MyIntf obj = (MyIntf) aScript;
obj.metodoDaInterface();
Funcionalidades padrão
• Equivalente ao Scaffolding, mas em runtime
• CRUD
• Batch Load/Export
• Analytics
• API generation
– Criação dinâmica de uma Bus do Apache CXF
– REST (WADL) e SOAP (WSDL)
Customização
• Na materialização, capturar o bytecode gerado
• Entregar ao cliente um JAR com modelos e
interfaces geradas
• Receber outro JAR com suas extensões e
customizações
– Também dynamic languages da JVM
• Maven
• Edição online
Runtime
• Classloader
– Carregar bytecode gerado e customizações
– Manter múltiplas versões da mesma classe
• Security Manager
– Controlar acessos a rede, disco, dados
– Definir permissões dependendo do caller
Serviços
• Dependency Injection
– Spring
– Anotações JSR-330 (@Inject)
• Internacionalização/Templating
• Mailer/Notifier
• Auth consumer/Provider OAuth2
• Authorization
• Logging/Audit Trail/Exception Logging/Metrics
• MVC Controllers e API extensions
• Embedded jBPM Engine
DEMO TIME!?!
Problemas...?
• “Os 4 problemas”: encoding, timezone, dar
nome às coisas, cache eviction.
• Descasamento objeto/relacional (^n)
• PermGen!
• Caching: CoR/CoW vs. GC Overhead
• Front-end autogeneration, never good enough
Obrigado!!!
• Feature Gating/Feature Bits
– http://martinfowler.com/bliki/FeatureToggle.html
– http://www.infoq.com/presentations/Feature-Bits
• Embedding Groovy
– http://groovy.codehaus.org/Embedding+Groovy
• Coda Hale, “Metrics, Metrics Everywhere”
– http://pivotallabs.com/139-metrics-metrics-
everywhere/

Mais conteúdo relacionado

Semelhante a B2B no Mercado Eletrônico: Do SaaS ao PaaS

Architecting For Resilience
Architecting For ResilienceArchitecting For Resilience
Architecting For ResilienceFabiano Modos
 
Data center MCSBRC2010-slides.pdf
Data center MCSBRC2010-slides.pdfData center MCSBRC2010-slides.pdf
Data center MCSBRC2010-slides.pdfssuser1198af
 
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)Aryel Tupinambá
 
Carreira do profissional de dados
Carreira do profissional de dadosCarreira do profissional de dados
Carreira do profissional de dadosEdvaldo Castro
 
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...Rafael Schettino
 
Keynote nuvem estaleiro_ics
Keynote nuvem estaleiro_icsKeynote nuvem estaleiro_ics
Keynote nuvem estaleiro_icsHoracio Ibrahim
 
Pense Aberto, Pense Linux
Pense Aberto, Pense LinuxPense Aberto, Pense Linux
Pense Aberto, Pense Linuxaviram
 
Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016
Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016
Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016Filipe Barretto
 
Relação do Dynamics CRM com a Microsoft Cloud
Relação do Dynamics CRM com a Microsoft CloudRelação do Dynamics CRM com a Microsoft Cloud
Relação do Dynamics CRM com a Microsoft CloudPedro Azevedo
 
Meet-ups Brazil: Padrões de Gerenciamento de Conteúdo / Patterns in Content M...
Meet-ups Brazil: Padrões de Gerenciamento de Conteúdo / Patterns in Content M...Meet-ups Brazil: Padrões de Gerenciamento de Conteúdo / Patterns in Content M...
Meet-ups Brazil: Padrões de Gerenciamento de Conteúdo / Patterns in Content M...Richard Esplin
 
Oracle para Desenvolvedores - recursos e técnicas - visões gerais (Uninove 2016)
Oracle para Desenvolvedores - recursos e técnicas - visões gerais (Uninove 2016)Oracle para Desenvolvedores - recursos e técnicas - visões gerais (Uninove 2016)
Oracle para Desenvolvedores - recursos e técnicas - visões gerais (Uninove 2016)Andre Santos
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Rodrigo Stefani Domingues
 
Visão estratégica de como migrar para a cloud
Visão estratégica de como migrar para a cloudVisão estratégica de como migrar para a cloud
Visão estratégica de como migrar para a cloudAmazon Web Services
 
Arquitetura para otimização de legado
Arquitetura para otimização de legadoArquitetura para otimização de legado
Arquitetura para otimização de legadoClóvis Wichoski
 
x(C)RM como plataforma de desenvolvimento rápido.
x(C)RM como plataforma de desenvolvimento rápido.x(C)RM como plataforma de desenvolvimento rápido.
x(C)RM como plataforma de desenvolvimento rápido.Pedro Azevedo
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 

Semelhante a B2B no Mercado Eletrônico: Do SaaS ao PaaS (20)

Architecting For Resilience
Architecting For ResilienceArchitecting For Resilience
Architecting For Resilience
 
Data center MCSBRC2010-slides.pdf
Data center MCSBRC2010-slides.pdfData center MCSBRC2010-slides.pdf
Data center MCSBRC2010-slides.pdf
 
Computação em nuvem e Windows Azure
Computação em nuvem e Windows AzureComputação em nuvem e Windows Azure
Computação em nuvem e Windows Azure
 
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)
Laraconf 2016: Construindo e mantendo aplicações multi-tenant (multi-cliente)
 
Carreira do profissional de dados
Carreira do profissional de dadosCarreira do profissional de dados
Carreira do profissional de dados
 
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...
Otimização de Desempenho de Websites desenvolvidos em Microsoft ASP.NET e hos...
 
Keynote nuvem estaleiro_ics
Keynote nuvem estaleiro_icsKeynote nuvem estaleiro_ics
Keynote nuvem estaleiro_ics
 
Pense Aberto, Pense Linux
Pense Aberto, Pense LinuxPense Aberto, Pense Linux
Pense Aberto, Pense Linux
 
Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016
Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016
Rio Cloud Computing Meetup 25/01/2017 - Lançamentos do AWS re:Invent 2016
 
Relação do Dynamics CRM com a Microsoft Cloud
Relação do Dynamics CRM com a Microsoft CloudRelação do Dynamics CRM com a Microsoft Cloud
Relação do Dynamics CRM com a Microsoft Cloud
 
Conhecendo o Django
Conhecendo o DjangoConhecendo o Django
Conhecendo o Django
 
Meet-ups Brazil: Padrões de Gerenciamento de Conteúdo / Patterns in Content M...
Meet-ups Brazil: Padrões de Gerenciamento de Conteúdo / Patterns in Content M...Meet-ups Brazil: Padrões de Gerenciamento de Conteúdo / Patterns in Content M...
Meet-ups Brazil: Padrões de Gerenciamento de Conteúdo / Patterns in Content M...
 
Oracle para Desenvolvedores - recursos e técnicas - visões gerais (Uninove 2016)
Oracle para Desenvolvedores - recursos e técnicas - visões gerais (Uninove 2016)Oracle para Desenvolvedores - recursos e técnicas - visões gerais (Uninove 2016)
Oracle para Desenvolvedores - recursos e técnicas - visões gerais (Uninove 2016)
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017
 
Visão estratégica de como migrar para a cloud
Visão estratégica de como migrar para a cloudVisão estratégica de como migrar para a cloud
Visão estratégica de como migrar para a cloud
 
IoT Frameworks
IoT FrameworksIoT Frameworks
IoT Frameworks
 
Arquitetura para otimização de legado
Arquitetura para otimização de legadoArquitetura para otimização de legado
Arquitetura para otimização de legado
 
Mobile Back end as a Service na AWS
Mobile Back end as a Service na AWSMobile Back end as a Service na AWS
Mobile Back end as a Service na AWS
 
x(C)RM como plataforma de desenvolvimento rápido.
x(C)RM como plataforma de desenvolvimento rápido.x(C)RM como plataforma de desenvolvimento rápido.
x(C)RM como plataforma de desenvolvimento rápido.
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 

B2B no Mercado Eletrônico: Do SaaS ao PaaS

  • 1. Do SaaS ao PaaS no Mercado Eletrônico Ricardo Pardini, qCon SP ‘13
  • 2. Quem? • Ricardo Pardini, CTO, Mercado Eletrônico – Lead Developer (desde 2001) – SysAdmin – Architect – Guilty (forever) • http://pardini.net/blog
  • 3. • Desde 1994! BBS > Web > SaaS > PaaS • B2B: entre empresas • SRM: o “contrário” do CRM • Procurement: transacional: pedidos, cotações • R$ 60 bilhões/ano • 60k usuários e 100 grandes compradores • Enterprise: grandes clientes corporativos
  • 5. Enterprise • “enterprise software is often available as a suite of customizable programs” (Wikipedia) • Grande necessidade de customização • Integração com ERPs também customizados • Restrições “técnicas” (firewalls... browsers...) • No Brasil adoramos customizar
  • 6. SaaS: Software as a Service • “Era só um website...” • Single-instance • Multi-tenant + Funcionalidade padrão -Custo de operação e investimento inicial • Similar: SalesForce (1999), Basecamp (2004)
  • 7. Simplicidade (<2001) Comprador Cotação de Preços Fornecedor Pedido de Compra “Complexidades” • Impostos • Integrações
  • 8. SaaS + Enterprise • Customizar! – Mas, não era padrão? – Manter as customizações ‘vivas’ – GMUDs • Grande necessidade de recursos • Inovar!
  • 9. “Feature Gating” if (gk_check('abc')) { do_abc(); } else { do_old_stuff(); } Gatekeeper (Facebook) Feature Bits (M.Fowler)
  • 10. Dados específicos demais ALTER TABLE pessoa ADD COLUMN corDoPagagaio VARCHAR(20); public String getCorDoPapagaio() { /* ... */ } public void setCorDoPapagaio(String cor) { /* ... */ }
  • 12. Mais customizações / Limites • Scripting • Processadores de filas customizados • OOP: class per client, interfaces • Limitações – Fluxos e entidades básicas tem de ser respeitados – Disponibilidade de pessoal interno – Audits / GMUDs – Reuso
  • 13. PaaS: Platform as a Service • Infrastructure + Solution Stack • Heroku, Azure, Force.com, CloudFoundry, AppEngine • Serviços comuns (auth, storage) • Deploy facilitado • Cliente escreve funcionalidade ‘do zero’ • Ou, customiza pré-existente
  • 14. PaaS no Mercado Eletrônico • Gerenciar customizações em todos os níveis – Look and Feel – Funcionalidades – Modelos de dados • Permitir compartilhamento de pacotes funcionais entre clientes, ou top-down • Agregar funcionalidade padrão comum (CRUD, analytics, APIs – backend as a service) • Desenvolvimento de customizações por terceiros
  • 15. Arquitetura a um KM de altura Metadados Pré- definições Dados compartilhados Código Custom Composição de Aplicações em Tempo de Execução Customizações Dados Metadados
  • 17. Metadados • Objetos de dados – Campos, tipos, validações – Similar a tabelas SQL – Eventos • Documentos – Composição de objetos – Listas e relacionamentos complexos – Handlers completos
  • 18. Materialização • Geração de bytecode Java – Javassist – CGLib – ASM – JSR 199: Java Compiler API • Groovy! – Completo (Generics, Annotations, etc) – Captura o bytecode gerado
  • 19. Embedded Groovy GroovyClassLoader gcl = new GroovyClassLoader(); Class clazz = gcl.parseClass("class Custom1 implements MyIntf{...}"); Object aScript = clazz.newInstance(); MyIntf obj = (MyIntf) aScript; obj.metodoDaInterface();
  • 20. Funcionalidades padrão • Equivalente ao Scaffolding, mas em runtime • CRUD • Batch Load/Export • Analytics • API generation – Criação dinâmica de uma Bus do Apache CXF – REST (WADL) e SOAP (WSDL)
  • 21. Customização • Na materialização, capturar o bytecode gerado • Entregar ao cliente um JAR com modelos e interfaces geradas • Receber outro JAR com suas extensões e customizações – Também dynamic languages da JVM • Maven • Edição online
  • 22. Runtime • Classloader – Carregar bytecode gerado e customizações – Manter múltiplas versões da mesma classe • Security Manager – Controlar acessos a rede, disco, dados – Definir permissões dependendo do caller
  • 23. Serviços • Dependency Injection – Spring – Anotações JSR-330 (@Inject) • Internacionalização/Templating • Mailer/Notifier • Auth consumer/Provider OAuth2 • Authorization • Logging/Audit Trail/Exception Logging/Metrics • MVC Controllers e API extensions • Embedded jBPM Engine
  • 24.
  • 26. Problemas...? • “Os 4 problemas”: encoding, timezone, dar nome às coisas, cache eviction. • Descasamento objeto/relacional (^n) • PermGen! • Caching: CoR/CoW vs. GC Overhead • Front-end autogeneration, never good enough
  • 27. Obrigado!!! • Feature Gating/Feature Bits – http://martinfowler.com/bliki/FeatureToggle.html – http://www.infoq.com/presentations/Feature-Bits • Embedding Groovy – http://groovy.codehaus.org/Embedding+Groovy • Coda Hale, “Metrics, Metrics Everywhere” – http://pivotallabs.com/139-metrics-metrics- everywhere/

Notas do Editor

  1. Multi instance é apenas hosting glorificado, ou outsourcing de TI.
  2. Claro: Podemos usar orientação a objetos.