Skip to content

Latest commit

 

History

History
411 lines (282 loc) · 16.8 KB

File metadata and controls

411 lines (282 loc) · 16.8 KB

shieldsIO shieldsIO shieldsIO

WideImg

POO con JS, ECMA6, Patrones de diseño, AJAX avanzado, HTML5 avanzado, APIs externas.

Clase 24

¡último día!

drop the mic picture

joke

Virtualización

Virtual Box Logo

En Informática, la virtualización es la creación a través de software de una versión virtual de algún recurso tecnológico, como puede ser una plataforma de hardware, un sistema operativo, un dispositivo de almacenamiento u otros recursos de red. En los ámbitos de habla inglesa, este término se suele conocer por el numerónimo "v12n".

Dicho de otra manera, se refiere a la abstracción de los recursos de una computadora, llamada Hypervisor o VMM (Virtual Machine Monitor) que crea una capa de abstracción entre el hardware de la máquina física (host) y el sistema operativo de la máquina virtual (virtual machine, guest), dividiéndose el recurso en uno o más entornos de ejecución.

Esta capa de software (VMM) maneja, gestiona y arbitra los cuatro recursos principales de una computadora (CPU, Memoria, Dispositivos Periféricos y Conexiones de Red). Así podrá repartir dinámicamente estos recursos entre todas las máquinas virtuales definidas en el computador central. Esto hace que se puedan tener varios ordenadores virtuales ejecutándose en el mismo ordenador físico. Wikipedia

Problemas

  • Menos rendimiento ya que todo es virtualizado
  • Las maquinas en ocasiones deben ser especializadas
  • Es necesario conocer el manejo de la virtualización

Ventajas

  • Menos costes ya que tienes menos servidores físicos
  • Menos costes porque reduces los tiempos de inactividad de las máquinas
  • Permite hacer backups constantes
  • Es más facil recuperar los sistemas

Sin vitualizar

Ejmplo sin virtualizar

Con virtualización

Ejemplo virtualizado

Recursos

Vagrant

Vagrant Logo

Recursos

VMWare

Vagrant Logo

Recursos

Oracle VM VirtualBox

Virtual Box Logo

Recursos

Contenedores

Contenedores en un puerto

La idea

Comparativa entre VMs y Contenedores

Un contenedor

Partes de un contenedor

Recursos

Docker

Docker Logo

Filosofía

  • Build
  • Ship
  • Run

Estados

Docker Cheat Sheet

Docker en Resumen

Docker Cheat Sheet

Docker resumen detallado de comandos

Docker Cheat Sheet

Recursos

Docker: ¡Simplificando!

  • Necesitas bajarte Docker e instalarlo en la máquina
  • Generas tu aplicación normalmente, pero usas variables de entorno como process.ENV.PORT en tu config.js
  • Necesitas generar una imagen de docker y para ello necesitas generar un Dockerfile
    FROM node:8
    
    # Create app directory
    WORKDIR /usr/src/app
    
    # Install app dependencies
    # A wildcard is used to ensure both package.json AND package-lock.json are copied
    # where available (npm@5+)
    COPY package*.json ./
    
    RUN npm install
    # If you are building your code for production
    # RUN npm ci --only=production
    
    # Bundle app source
    COPY . .
    
    EXPOSE 8080
    CMD [ "npm", "start" ]
  • Docker Build: $ docker build -t <your username>/node-web-app .
  • Verificar que esta creada... docker images
  • Dcoker Run: $ docker run -p 49160:8080 -d <your username>/node-web-app
  • Identificar el container $ docker ps
  • Saca los mensajes de consola $ docker logs <container id>
  • Entra en el contenedor $ docker exec -it <container id> /bin/bash
  • Verifica que funciona y chequea el puerto $ docker ps
  • Verifica que el puerto esta expuesto $ curl -i localhost:49160

Recursos

Kubernetes (K8s)

The Illustrated Children’s Guide to Kubernetes

Kubernetes logo

Kubernetes (k8s) is an open-source system for automating deployment, scaling, and management of containerized applications.

Funcionalidades

Diseño

  • Cápsulas(Pods)
  • Etiquetas y selectores
  • Controladores
  • Servicios

Módulos básicos

  • Creación de un clúster de Kubernetes
  • Despliegue de una aplicación
  • Exploración de aplicaciones
  • Mantenimiento de Pods
  • Ampliación de aplicaciones
  • Actualización de aplicaciones

Arquitectura

  • etcd
  • Servidor de API
  • Planificador
  • Administrador del controlador
  • Nodo Kubernetes
  • Kubelet
  • Kube-Proxy
  • cAdvisor

Ecosistema

Kubernetes logo

Arquitectura en detalles

Kubernetes logo

Recursos

puppeteer

banner promocional

Recursos

Ejemplos:

Tomar una captura de pantalla de una web

const puppeteer = require('puppeteer');

async function getPic(url) {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.setViewport({width: 1000, height: 500}) // Que tamaño?
  await page.goto(url);
  await page.screenshot({path: `${url}-${new Date().getTime()}.png`});
  await browser.close();
}

getPic("https://fictizia.com");

Generemos un PDF

//@see: https://github.com/GoogleChrome/puppeteer/blob/master/examples/pdf.js
const puppeteer = require('puppeteer');

(async() => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://news.ycombinator.com', {waitUntil: 'networkidle2'});
  // page.pdf() is currently supported only in headless mode.
  // @see https://bugs.chromium.org/p/chromium/issues/detail?id=753118
  await page.pdf({
    path: 'hn.pdf',
    format: 'letter'
  });

  await browser.close();
})();

¡Automaticemos cosas!

//@see: https://github.com/checkly/puppeteer-examples/blob/master/3.%20login/github.js
const puppeteer = require('puppeteer')
const screenshot = 'github.png';
(async () => {
  const browser = await puppeteer.launch({headless: true})
  const page = await browser.newPage()
  await page.goto('https://github.com/login')
  await page.type('#login_field', process.env.GITHUB_USER)
  await page.type('#password', process.env.GITHUB_PWD)
  await page.click('[name="commit"]')
  await page.waitForNavigation()
  await page.screenshot({ path: screenshot })
  browser.close()
  console.log('See screenshot: ' + screenshot)
})()

¡Hagamos scraping!

// Finds accommodations in Berlin on Booking.com, takes a screenshot and logs the top 10.
// @see: https://github.com/checkly/puppeteer-examples/blob/master/2.%20search/booking.js

const puppeteer = require('puppeteer')
const screenshot = 'booking_results.png'
try {
  (async () => {
    const browser = await puppeteer.launch()
    const page = await browser.newPage()
    await page.goto('https://booking.com')
    await page.type('#ss', 'Berlin')
    await page.click('.sb-searchbox__button')
    await page.waitForSelector('#hotellist_inner')
    await page.screenshot({ path: screenshot })
    const hotels = await page.$$eval('span.sr-hotel__name', anchors => {
      return anchors.map(anchor => anchor.textContent.trim()).slice(0, 10)
    })
    console.log(hotels)
    await browser.close()
    console.log('See screenshot: ' + screenshot)
  })()
} catch (err) {
  console.error(err)
}

Más ejemplos

Scraping épico para gente sin APIs - Ulises Gascón | T3chFest 2018

banner promocional de la charla

Recursos