Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Do Java ao Node - Uma jornada inesperada

Avatar for damianijr damianijr
November 11, 2017

Do Java ao Node - Uma jornada inesperada

Avatar for damianijr

damianijr

November 11, 2017

Other Decks in Programming

Transcript

  1. SOBRE MIM! Graduado em Processamento de Dados (FATEC-TQ); Pós Graduado

    em Qualidade de Software (UNIARA); Desenvolvedor de Software desde desde 2002; Certificado OCJP, OCWCD; Tech Lead na S2IT; Ex-professor: UNIARA, GlobalCode, Microlins, etc. Contato: [email protected] Skype/Linkedin/Hangout: damianijr
  2. CONTEXTUALIZANDO ~80 times ~400 pessoas ~10 minutos ~3.5 gb BUILD

    ~16 servidores ~2 MLOC Esses números sobem a cada ano!
  3. CONTEXTUALIZANDO FAQ - Frequently asked questions Objetivos: Retirada do monolítico;

    Melhorar a engine de busca; Conteúdo relacionado; Refação do Layout; Responsividade; Novos tipos de conteúdo;
  4. CALLBACK HELL Callbacks são funções executadas após a conclusão de

    um processamento; O uso de callbacks aninhados dificulta a leitura e manutenabilidade do código;
  5. Recurso adicionado junto ao ES6; Objeto utilizado para processamento assíncrono;

    Sintaxe: PROMISSES const p = new Promise(function(resolve, reject) { // Utilizar o método resolve quando a promise tiver sucesso // Utilizar o método reject quando a promise tiver sucesso }); p .then(function(resolvedValue) { }) .catch(function(rejectValue) { });
  6. PROMISSES Booking.update = (key, values) => { return new Promise((resolve,

    reject) => { connection.connect((err) => { if (err) { reject(err); return; } var sql = `UPDATE booking SET ${fields} WHERE ${conditions}`; connection.query(sql, (err, result) => { if (err) { reject(err); return; } resolve(result); }); }); }) };
  7. FRAMEWORK - BLUEBIRD Précursor do conceito de promises; Promises on

    steroids; Exemplos: var fs = Promise.promisifyAll(require("fs")); var mysql = Promise.promisifyAll(require('mysql')); Promise.promisefyAll: Cria uma versão “promissificada” do objetivo; Promise.all: Executa um array de promises e reúne os resultados; Promise.all([ axios.get('http://google.com'), axios.get('http://facebook.com') ]) .then(result => console.log(result)); Promise.filter: Filtra os resultados da promise; const currentZippedFiles = Promise .promisifyAll(require("fs")) .readdirAsync(process.cwd()) .filter(fileName => fileName.endsWith(".zip"))
  8. FRAMEWORK - ACTUATOR Expõe vários endpoints de monitoração; var app

    = express(); app.use(actuator()); /info - Informações da aplicação { "build": { "description": "This is my new app", "name": "MyApp", "version": "1.0.0" }, "git": { "branch": "master", "commit": { "id": "329a314", "time": 1478086940000 } } } /metrics - Métricas { "mem": { "heapTotal": 14659584, "heapUsed": 10615072, "rss": 30093312 }, "uptime": 19.797 }
  9. FRAMEWORK - AXIOS & IO.REDIS AXIOS IO.REDIS Cliente HTTP baseado

    em promises; axios.get('http://google.com') .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); }); Banco de dados noSQL; Chave valor; Dentre outros usos: cache distribuído; var redis = new Redis(); redis.set('foo', 'bar'); redis.get('foo').then(result => console.log(result)); COMBINANDO OS 2 FRAMEWORKS axios .cached(60000) .get(‘http://google.com') .then(response => console.log(response)) .catch(error => console.log(error));
  10. FRAMEWORK - CIRCUIT BREAKER Padrão de projeto, provê estabilidade e

    prevê problemas em sistemas que estão falhando; Recomendado à utilização em toda a comunicação entre sistemas em infraestrutura diferentes;
  11. FRAMEWORK - CIRCUIT BREAKER - BRAKES const pirateBrake = new

    Brakes({ timeout: 150, threshold: 0.9, waitThreshold: 100, circuitDuration: 5000 }); pirateBrake .exec(axios.get('http://thepiratebay.org')) .fallback(axios.get(‘http://thepiratebay.se')) .then(result => console.log(result)) .catch(err => console.log('Erro ao acesar o piratebay', err);