Do SaaS ao PaaS no Mercado Eletrônico

Propaganda
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) •  hJp://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 corpora[vos Enterprise?? Enterprise •  “enterprise so+ware is o+en 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: Sobware as a Service •  “Era só um website...” •  Single-­‐instance •  MulB-­‐tenant + Funcionalidade padrão -­‐ Custo de operação e invesBmento inicial •  Similar: SalesForce (1999), Basecamp (2004) Simplicidade (<2001) Comprador Pedido de Compra Cotação de Preços Fornecedor “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 GaKng” 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 •  Scrip[ng •  Processadores de filas customizados •  OOP: class per client, interfaces •  Limitações –  Fluxos e en[dades básicas tem de ser respeitados –  Disponibilidade de pessoal interno –  Audits / GMUDs –  Reuso PaaS: Plalorm as a Service •  Infrastructure + SoluKon 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 •  Permi[r compar[lhamento de pacotes funcionais entre clientes, ou top-­‐down •  Agregar funcionalidade padrão comum (CRUD, analy[cs, APIs – backend as a service) •  Desenvolvimento de customizações por terceiros Arquitetura a um KM de altura Metadados Metadados Dados Código Custom Pré-­‐
definições Dados compar[lhados Customizações Composição de Aplicações em Tempo de Execução Pré-­‐definição (“padrão de mercado”) Implementações Específicas Especialização do Metadado Interfaces e Abstract Classes Metadados •  Objetos de dados –  Campos, [pos, 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, Annota[ons, 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 run[me CRUD Batch Load/Export Analy[cs •  API genera[on –  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 RunKme •  Classloader –  Carregar bytecode gerado e customizações –  Manter múl[plas versões da mesma classe •  Security Manager –  Controlar acessos a rede, disco, dados –  Definir permissões dependendo do caller Serviços •  Dependency Injec[on –  Spring –  Anotações JSR-­‐330 (@Inject) • 
• 
• 
• 
• 
• 
• 
Internacionalização/Templa[ng Mailer/No[fier Auth consumer/Provider OAuth2 Authoriza[on Logging/Audit Trail/Excep[on Logging/Metrics MVC Controllers e API extensions Embedded jBPM Engine DEMO TIME!?! Problemas...? •  “Os 4 problemas”: encoding, Bmezone, dar nome às coisas, cache evicBon. • 
• 
• 
• 
Descasamento objeto/relacional (^n) PermGen! Caching: CoR/CoW vs. GC Overhead Front-­‐end autogenera[on, never good enough Obrigado!!! •  Feature Ga[ng/Feature Bits –  hJp://mar[nfowler.com/bliki/FeatureToggle.html –  hJp://www.infoq.com/presenta[ons/Feature-­‐
Bits •  Embedding Groovy –  hJp://groovy.codehaus.org/Embedding+Groovy •  Coda Hale, “Metrics, Metrics Everywhere” –  hJp://pivotallabs.com/139-­‐metrics-­‐metrics-­‐
everywhere/ 
Download