cómo construir una plataforma de libro electrónico y no morir en el intento
TRANSCRIPT
![Page 1: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/1.jpg)
CÓMO CONSTRUIR UNA PLATAFORMA DE LIBRO
ELECTRÓNICO Y
NO MORIR EN EL INTENTO
![Page 2: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/2.jpg)
Los speakers
Alberto Vilches • Programando desde 1998
• 5 años de experiencia con Grails
• Soy el que organiza todo esto
• TwiIer: @albertovilches
Roberto Mar=n • Programador desde 2008
• 4 años de experiencia con Grails
• Miembro de plataforma Java en BQ
• TwiIer: @roberto_mf
![Page 3: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/3.jpg)
De que vamos a hablar
10% Negocio
20% Experiencia 30% Arquitectura 40% Grails (con algo de código!)
![Page 4: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/4.jpg)
Donde trabajamos
![Page 5: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/5.jpg)
Donde trabajamos
Mundoreader – BQ Readers • Empresa 100% española (sedes en todo el mundo)
• 2º fabricante y vendedor de tablets en España (después de Apple)
• Primera plataforma completa de libro electrónico.
• Y otros negocios: memorias USB, accesorios, etc.
![Page 6: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/6.jpg)
Negocio
Negocio principal: venta de disposiNvos (tablets, ereaders)
Siguiente objebvo: venta de contenidos
Beneficios €
Inversión
![Page 7: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/7.jpg)
Negocio
Venta de contenido
• Diseño, creación y distribución de E-‐readers
• Acuerdos con editoriales
• Creación de plataforma de venta de libros
![Page 8: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/8.jpg)
Modelo de negocio
1. BQReaders NO es una benda de libros
2. Los libros los venden las Nendas grandes librerías y superficies / pequeños comercios no podemos decir quienes…
3. Lo hacen a través de nuestra plataforma
4. Y nos llevamos comisión por libro vendido -‐> !!!
5. ¿Tienes una benda? ¿Eres una editorial? Habla con nosotros!
![Page 9: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/9.jpg)
Modelo de negocio
1. Las bendas usan nuestra plataforma para crear una web y vender libros
aunque a veces se la hacemos también nosotros… !
2. Las bendas venden E-‐readers a sus usuarios
3. Lo hacen con su marca, pero nos los compran a nosotros… !
4. Vendemos la solución completa
![Page 10: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/10.jpg)
Modelo de negocio
Y más cosas
1. Suscripción Esblo Spobfy: cuota mensual y barra libre
2. Bibliotecas Préstamos, adquisición de licencias
3. Aplicaciones en IOS y Android
![Page 11: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/11.jpg)
Cómo funciona
Tienda WEB
App nabva IOS
App nabva Android
Compra y lee libros
Consumen Servicios (muchos!)
Plataforma contenidos
E-‐Reader
![Page 12: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/12.jpg)
Plataforma de contenidos
Tecnologías usadas
• Grails 3 wars: services, content, backoffice
• MySql 2 esquemas en 2 máquinas disbntas
1. SERVICES (usuarios, compras, disposibvos) 2. CONTENT (libros, editoriales, categorías, catálogos)
![Page 13: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/13.jpg)
Plataforma de contenidos
Tecnologías usadas
• ElasbcSearch • Búsqueda de libros, facetas • Evita acceder a la base de datos • Si se cae, usamos la base de datos (pero no tenemos facetas)
• Mahout • Recomendaciones de libros en función de las compras y visitas
• MongoDB • Auditoría y tablas maestras (paises-‐ips, reports, )
![Page 14: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/14.jpg)
Plataforma de contenidos
Componentes
• API para bendas: JSON 100% (rest 90%) Listados de libros, búsquedas, categorías, compras
• API para Ereader, IOS y Android Sincronizar librería, descargar libro, anotaciones, bookmarks
• Carga de contenidos Proceso nocturno desde editoriales (tp, epubs, pdf, onix, carátulas)
• Backoffice Administración de libros, categorías, catálogos, reports, liquidaciones
![Page 15: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/15.jpg)
Problemas y…
“nuestras” soluciones
![Page 16: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/16.jpg)
Plataforma de contenidos
API En caso de error: • Debe seguir devolviendo JSON
• Si es un error incontrolado, debe nobficar del error • Log, auditoria, email
![Page 17: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/17.jpg)
Plataforma de contenidos
API
![Page 18: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/18.jpg)
Plataforma de contenidos
API
![Page 19: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/19.jpg)
Plataforma de contenidos
Seguridad API
“No queremos usar login/token/sesión por cliente”
![Page 20: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/20.jpg)
Plataforma de contenidos
Seguridad API
“No queremos usar login/token/sesión por cliente”
1. Las password son siempre débiles 2. El cliente no maneja sesión
3. El servidor tampoco (stateless, más fácil de replicar)
Solución: pebciones firmadas
![Page 21: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/21.jpg)
Plataforma de contenidos
Seguridad API Firmar una pebción
• Se concatena la url y todos sus parámetros (get o post, todos)
• Se obbene su hash • Se encripta la hash con la clave privada = firma • Se envía la firma en una cabecera
hex( crypt( sha1( url+params, key ) ) )
• El servidor hace el paso inverso. Si los parámetros coinciden, ejecuta la operación.
![Page 22: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/22.jpg)
Plataforma de contenidos
Seguridad API
Al estar basada en una hash, la firma cambiará cada vez que cambie la url y/o los parámetros.
Interceptar la firma no permite manipular la
pebción
¡Pero una pebción interceptada se puede replicar N veces!
![Page 23: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/23.jpg)
Plataforma de contenidos
Seguridad API Evitar que se repliquen las pebciones Solución: nonce
• Cada pebción debe enviar un parámetro obligatorio llamado “nonce”.
• Su valor debe ser un número no usado antes (milesegundos?) • El servidor conserva cada nonce enviado y verifica que no se
repita. • Si se envía el mismo “nonce” se rechaza la pebción.
![Page 24: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/24.jpg)
Algunos trucos
Trabajar con decimales
![Page 25: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/25.jpg)
Algunos trucos
Trabajar con decimales • Los números decimales pierden precisión cuando se
transforman de binario a decimal
• No importa cuando trabajamos con muchos decimales (de hecho, es necesario): distancias, pesos
• Pero SI importa cuando trabajamos con precios!
![Page 26: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/26.jpg)
Algunos trucos
Trabajar con decimales: solución
1. Clases de dominio: usar BigDecimal!
![Page 27: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/27.jpg)
Algunos trucos
Trabajar con decimales: solución
1. Clases de dominio: usar BigDecimal!2. Base de datos. Precisión de n+1 para
productos 3 decimales para € -‐> DECIMAL(16, 3)
![Page 28: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/28.jpg)
Algunos trucos
Trabajar con decimales: solución
1. Clases de dominio: usar BigDecimal!2. Base de datos. Precisión de n+1 para
productos 3 decimales para € -‐> DECIMAL(16, 3)
3. Base de datos. Precisión de n para compras 2 decimales para € -‐> DECIMAL(15, 2)
![Page 29: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/29.jpg)
Algunos trucos
Trabajar con decimales: solución
1. Clases de dominio: usar BigDecimal!2. Base de datos. Precisión de n+1 para
productos 3 decimales para € -‐> DECIMAL(16, 3)
3. Base de datos. Precisión de n para compras 2 decimales para € -‐> DECIMAL(15, 2)
4. Evitar recalcular Al hacer una compra, guardar una “foto” con todos los valores ya
calculados.
![Page 30: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/30.jpg)
Concurrencia
Típico problema de concurrencia
![Page 31: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/31.jpg)
Concurrencia
Típico problema de concurrencia 1. Un usuario se conecta desde diferentes
clientes a la vez (ipad y web),…
2. … ejecuta dos operaciones que escriben en el mismo registro de la base de datos…
![Page 32: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/32.jpg)
Concurrencia
Típico problema de concurrencia
![Page 33: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/33.jpg)
Concurrencia
A) Cuando NO ES un registro importante:
Fecha de úlbma conexión/sincronización/actualización Actualizar una anotación de un libro Datos personales del usuario,…
![Page 34: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/34.jpg)
Concurrencia
A) Cuando NO ES un registro importante: 1. Desacbvar opbmisbc locking 2. Acbvar dynamicUpdate (opcional)
![Page 35: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/35.jpg)
Concurrencia
A) Cuando NO ES un registro importante: 1. Desacbvar opbmisbc locking 2. Acbvar dynamicUpdate (opcional)
UPDATE … WHERE ID = 2678 AND VERSION = 10!
UPDATE table SET campo_que_ha_cambiado WHERE ID = 2678!
![Page 36: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/36.jpg)
Concurrencia
DynamicUpdate PITFALL!! LLLLLLL
Si se modifica un campo dentro de beforeInsert / beforeUpdate
¡No se escribirá! Bug?
Solución: Usar beforeValidate
Se ejecuta después de save(), al insertar o modificar
![Page 37: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/37.jpg)
Concurrencia
B) Cuando ES un registro importante
Modificar el saldo de un usuario Devolver una compra
Consumir un cupón prepago
![Page 38: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/38.jpg)
Concurrencia
B) Cuando ES un registro importante 1. Iniciar transacción
![Page 39: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/39.jpg)
Concurrencia
B) Cuando ES un registro importante 1. Iniciar transacción 2. Bloquear el registro
![Page 40: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/40.jpg)
Concurrencia
B) Cuando ES un registro importante 1. Iniciar transacción 2. Bloquear el registro
SELECT * FROM USER … FOR UPDATE!
![Page 41: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/41.jpg)
Algunos trucos
Operaciones en background Escritura de logs, actualizar estadísbcas, envío de mensajes, colas…
![Page 42: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/42.jpg)
Algunos trucos
Operaciones en background Escritura de logs, actualizar estadísbcas, envío de mensajes, colas…
1. Objebvo Finalizar la pebción lo antes posible
2. Que necesitamos: Crear un hilo con la sesión de Hibernate
3. Plugins: 1. BackgroundThread plugin 2. Executor 3. Quartz
![Page 43: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/43.jpg)
Algunos trucos
Actualizaciones masivas
Si hay muchos registros (cientes de miles o millones) • Extremadamento lento • Puedo agotar el heap • No es eficiente
![Page 44: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/44.jpg)
Algunos trucos
Actualizaciones masivas
• A veces se puede susbtuir… J
![Page 45: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/45.jpg)
Algunos trucos
Actualizaciones masivas • Pero otras no se puede!
Cada registro requiere lógica de negocio L
![Page 46: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/46.jpg)
Algunos trucos
Actualizaciones masivas
Solución • Hilo en background • Seleccionar solo lo necesario (projecbons) • Paginar (hacer de 1000 en 1000 elementos) • Limpiar la sesión de nivel de 1 de Hibernate • Introducir pausas si es necesario
Si falla todo lo demás • Crear un PLSQL y llamarlo on demand o por la noche
![Page 47: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/47.jpg)
Algunos trucos
Actualizaciones masivas
![Page 48: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/48.jpg)
Algunos trucos
Actualizaciones masivas
Projection
![Page 49: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/49.jpg)
Algunos trucos
Actualizaciones masivas
Paginación
![Page 50: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/50.jpg)
Algunos trucos
Actualizaciones masivas
Vaciar la sesión de Hibernate Pausa
![Page 51: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/51.jpg)
Algunos trucos
Actualizaciones masivas
¿Que sucede si cada operación individual es muuuuuy lenta?
Cada operación una llamada a un servicio externo…
![Page 52: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/52.jpg)
Algunos trucos
Actualizaciones masivas
¿Que sucede si cada operación individual es muuuuuy lenta?
SOLUCIÓN: Un pool de hilos
![Page 53: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/53.jpg)
Algunos trucos
Actualizaciones masivas Configuración pool de hilos: plugin Executor
![Page 54: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/54.jpg)
Algunos trucos
Actualizaciones masivas Configuración pool de hilos: plugin Executor
Número de hilos máximos a la vez
![Page 55: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/55.jpg)
Algunos trucos
Actualizaciones masivas
Se obtienen primero SOLO los ids
![Page 56: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/56.jpg)
Algunos trucos
Actualizaciones masivas
Operación lenta: Cargo € en tarjeta
Se encola la operación
![Page 57: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/57.jpg)
Algunos trucos
Actualizaciones masivas
Operación lenta: Cargo € en tarjeta
Esperamos a que acaben todos los hilos
Se encola la operación
![Page 58: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/58.jpg)
Algunos trucos
Actualizaciones masivas
Vaciamos la sesión de Hibernate y volvemos a empezar
![Page 59: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/59.jpg)
Escalabilidad
![Page 60: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/60.jpg)
Escalabilidad
Arquitectura
hIps://services.mundoreader.com
hIps://panel.mundoreader.com
Tiendas (web)
Tomcat Grails
MySql
![Page 61: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/61.jpg)
Escalabilidad
Arquitectura
hIps://services.mundoreader.com
hIps://panel.mundoreader.com
Tiendas (web)
Tomcat Grails
Stateless!! JJJJ
MySql
![Page 62: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/62.jpg)
Escalabilidad
Arquitectura
hIps://services.mundoreader.com
hIps://panel.mundoreader.com
Tiendas (web)
Tomcat Grails
Stateless!! JJJJ
![Page 63: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/63.jpg)
Escalabilidad
Arquitectura
hIps://services.mundoreader.com
hIps://panel.mundoreader.com
Tiendas (web)
Tomcat Grails
Stateless!! JJJJ
![Page 64: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/64.jpg)
Escalabilidad
Evitar trabajo innecesario -‐> Delegar en la bbdd. Evitar N+1 consultas. Peligro! Gorm!!
• Usar JOINs. Crear índices si es necesario.
• Inyectar propiedades (valores agrupados, etc)
• Desnormalizar
![Page 65: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/65.jpg)
Escalabilidad
Inyectar propiedades
• En vez de:
![Page 66: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/66.jpg)
Escalabilidad
Inyectar propiedades
• En vez de:
• Usar
![Page 67: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/67.jpg)
Escalabilidad
Analizar el rendimiento de la bbdd
• OpenNMS • Script de análisis • MySql Slow Queries
show variables like 'slow_query_log';!set global slow_query_log='ON';!!/var/log/mysql/mysql-slow.log!!
![Page 68: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/68.jpg)
Escalabilidad
Arquitectura
hIps://services.mundoreader.com
hIps://panel.mundoreader.com Tomcat Grails
Stateless!! JJJJ
![Page 69: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/69.jpg)
Escalabilidad
Dividir el esquema en dos • 2 MySql fisicamente disbntas • Relaciones ligeras entre tablas de disbnta bbdd • 2 datasources por Tomcat • No JOINs! -‐> Desnormalizar
hIps://panel.mundoreader.com Tomcat Grails
MySql 1
MySql 2
![Page 70: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/70.jpg)
Escalabilidad
Escalabilidad Dos datasources • Configuración
• Clases de dominio
![Page 71: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/71.jpg)
Escalabilidad
Rendimiento DESNORMALIZAR • Duplicar datos de otras tablas • Evita joins -‐> más rápido • Perdida de consistencia • Uso de otros bpos de base de datos
• Libros -‐> ElasbcSearch • Auditoría -‐> MongoDb con Gorm
![Page 72: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/72.jpg)
Escalabilidad
Rendimiento ElasbcSearch • Motor de búsqueda en texto plano • Basado en Lucene • Api JSON 100% • Alta escalabilidad: cluster, nodos, shards • Facetas
![Page 73: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/73.jpg)
Escalabilidad
Rendimiento ElasbcSearch Problema: Indexar desde diferentes puntos de la aplicación • Al modificar un libro • Al modificar una categoría (actualizar todos sus libros)
• Al modificar un catálogo “ “ “ “ • Bucles, hilos de fondo, barras de progreso… LLL
![Page 74: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/74.jpg)
Escalabilidad
Rendimiento ElasbcSearch Problema: Indexar desde diferentes puntos de la aplicación Solución: Demonio de indexación • Único punto de acceso al ES para escribir • Conbnuamente procesa libros encolados para
indexar • Para indexar un libro, solo hay que encolarlo
![Page 75: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/75.jpg)
Escalabilidad
Rendimiento ElasbcSearch Problema: Indexar desde diferentes puntos de la aplicación Solución: Demonio de indexación • Al arrancar, si no hay nodo, lo crea y reindexa • Permite encolar reindexaciones completas • Reconstruir con alias (truco) • Índice por versión de app.
![Page 76: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/76.jpg)
Escalabilidad
Rendimiento Cachear todo!!
• SpringCache • JCS • Implementaciones propias
MySql • Cluster Master/Slave • Servidores read only • Amazon RDS
![Page 77: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/77.jpg)
Escalabilidad
Rendimiento Pruebas de carga: conoce tu límite • Antes y después de aplicar mejoras. Mide lo que has
ganado. Profile tus JVMs • YourKit Java Profiler: memory leaks, threads • Java Melody (no funciona con múlbples datasources) • Plugin BigDesk para ElasbcSearch
![Page 78: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/78.jpg)
Monitorización
Crea tu propia página de información
![Page 79: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/79.jpg)
Monitorización
Monitorizar: página con información
![Page 80: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/80.jpg)
Monitorización
Crea tu propia página de información
![Page 81: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/81.jpg)
Monitorización
Crea tu propia página de información <app>/scripts/_Events.groovy!
![Page 82: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/82.jpg)
Monitorización
Crea tu propia página de información 1. Mostrar estado de
servicios 2. Chequeo de
servicios 3. Mostrar hosts/ips
![Page 83: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/83.jpg)
Monitorización
Crea tu propia página de información 1. Mostrar estado de
servicios 2. Chequeo de
servicios 3. Mostrar hosts/ips
![Page 84: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/84.jpg)
Monitorización
Crea tu propia página de información 1. Mostrar estado de
servicios 2. Chequeo de
servicios 3. Mostrar hosts/ips
![Page 85: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/85.jpg)
Pase a producción
Build • Scripts de update SVN, war y upload a repo Test • SoapUI y manuales Config • Configuración externa en SVN y por versión Deploy • Script de descarga de war desde repo (por versión) Rollback • Dump de base datos. Deploy versión anterior. Config
se conserva entre versiones.
![Page 86: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/86.jpg)
Pase a producción
Config Un directorio por versión:
![Page 87: Cómo construir una plataforma de libro electrónico y no morir en el intento](https://reader031.vdocuments.net/reader031/viewer/2022020116/5585ab1dd8b42a711a8b4ecf/html5/thumbnails/87.jpg)
¡Gracias!
¿Preguntas? (Tienen premio!)