SlideShare uma empresa Scribd logo
1 de 73
El camino a validar 600
facturas por segundo
en un solo servidor
• Desarrollador Back End (Elixir, Erlang, GO)
• Desarrollador Móvil (iOS, Android, Híbrido)
• Instructor (iOS, Android, Phoenix)
• @misaelpc / misaelpc
Sobre mi
• Proceso de Facturación en México
• Problemas y Retos
• Arquitectura
• Conclusiones
Agenda
Facturación en
México
Elementos de una factura
Certificado
Emisor
Receptor
Lista de Conceptos
Sello Emisor
Sello Pac
• CFDI 3.2 (2012) - Validador
• CFDI 3.3 (2017) - Validador
Versiones recientes
• Validación de catálogos
• Validación de contribuyentes
• Validación de impuestos y totales
• Validación de tipos de comprobantes
(Ingreso/Egreso)
CFDI 3.3
• Nómina
• Pagos
• Combustibles
• Comercio Exterior
• Estados de cuenta
• 37 complementos en Total
Complementos
• 601441101 - Juegos educativos
• 601441102 - Juegos de mesa
• 601441103 - Naipes
• 601441104 - Juegos de video
Catálogo productos
Catálogo contribuyentes
LRFC
Registros: 80 Millones
Actualización: 2 Días
LCO
Registros: 20 Millones
Actualización: Diaria
¡No hay deltas!
• RFC - 3 GB
• LCO - 1 GB
• Códigos Postales - 2 MB
• Productos y Servicios - 2.5 MB
• 40 Catálogos en Total
Catálogos
Problemas y
Retos
• 600 documentos por segundo
• Máximo en 4 servidores
• Actualización de catálogos diaria en minutos
Desempeño requerido
• Reportes de errores claros para el usuario (350
código oficiales por parte del SAT)
• Facturas sin emitir
• Facturas emitidas y timbradas
• Facilidad de agregar más reglas
Validación
• Añadir más complementos en poco tiempo
• Añadir más reglas de validación en poco tiempo
• Añadir reglas personalizadas por cliente
Validación
• Horizontal (Para dedicar servidores a un cliente)
• Vertical (Para aprovechar todos los recursos del
servidor)
Escalabilidad
• Evitar regresiones en cada actualización
Confiabilidad
• Ventanas de mantenimiento cortas (minutos)
• Fácil de instalar
Aprovisionamiento
Arquitectura
Diagrama conceptual
Sistema de Validación
Recepción de
Documentos /
Envio de
respuesta
Workflow de
documentos
Motores de
validación
Catálogos
• Tiempo de búsqueda en los catálogos corto
• Dividir la validación por etapas
• Nano servicios de validación
Desempeño
Diagrama conceptual
Sistema de Validación
Recepción de
Documentos /
Envio de
respuesta
Workflow de
documentos
Motores de
validación
Catálogos
• Carga masiva indexada
• Búsqueda
Catálogos
• Viabilidad de usar una base de datos relacional
• Tiempos de indexación mayores de 10 horas
• Tiempos de consulta de 40 - 60 ms
Carga masiva (Postgres)
• Búsqueda Binaria - 2 a10 ms
• ETS (Indexed Keys) - 20 a 60 μs
Almacenamiento en
memoria
Búsqueda binaria
Registro Federal de
Contribuyentes
80 Millones - 3GB
Memoria
150
Cold Cache
Tiempo de carga 2 segundos
Tiempo de búsqueda 2 - 10 ms
Key value store
Memoria
Cold Cache
Memoria
Hot Cache
Tiempo de búsqueda 20- 60 µs
Métricas almacenamiento
Métricas almacenamiento
Métricas almacenamiento
Concepto
Sistema de Validación
Recepción de
Documentos /
Envio de
respuesta
Workflow de
documentos
Motores de
validación
Catálogos
• Millones de usuarios en un solo servidor
• Tolerante a fallos
Plataforma tecnológica
WhatsApp
Phoenix
Multitenant
Validación
Certificados
Validación
Schema XML
Validación
Catálogos
Validación
Cálculos
WorkFlow
Cliente 1
Cliente 2
Cliente N
Validación
Certificados
Validación
Schema XML
Validación
Catálogos
Validación
Cálculos
WorkFlow
Validación
Certificados
Validación
Schema XML
Validación
Catálogos
Validación
Cálculos
WorkFlow
Nano servicios (OTP)
WorkFlow
Validación Catálogos Cálculos
WorkFlow
Validación Catálogos Cálculos
Diagrama de concepto
Sistema de Validación
Recepción de
Documentos /
Envio de
respuesta
Workflow de
documentos
Motores de
validación
Catálogos
Etapas de Validación
Validación
Certificados
Validación
Schema XML
Validación
Catálogos
Validación
Cálculos
Reportes de Errorres
Éxito
Etapas de Validación
Métricas
(XProf)
Validación esquema
Validación certificado
Validación de catálogos
Validación cálculos
Diagrama de concepto
Sistema de Validación
Recepción de
Documentos /
Envio de
respuesta
Workflow de
documentos
Motores de
validación
Catálogos
Validación
Certificados
Validación
Schema XML
Validación
Catálogos
Validación
Cálculos
Reportes de Errorres
Éxito
WorkFlow
Flujo de validación
Motores de validación
Motor de validación
100 Reglas
OK
Motor de validación
100 Reglas
90 Errores
Compilador de reglas
Motor de validación
100 Reglas
YAML RULES Elixir Tuples
Indexed Cache
Compiler
Flujo de Documentos
WorkFlow Dinamico - Cliente 2
WorkFlow Dinamico - Cliente 1
Validación
Certificados
Validación
Schema XML
Validación
Catálogos
Validación
Certificados
Validación
Schema XML
WorkFlow Dinamico - Cliente 3
Validación
Certificados
Validación
Schema XML
Validación
Recompensas
Reglas dinámicas
Rules Engine
function validate_sum (list , total) -> Bool
function validate_tax (list , total) -> Bool
Validate
validate_sum, x_path, x_path
validate_tax, x_path, x_path
validate_rfc, x_path
Dynamic Function Call
- function name
- Params
Escalamiento vertical
Validación
Certificados
Validación
Schema XML
Validación
Catálogos
Validación
Cálculos
WorkFlow 1
Validación
Certificados
Validación
Schema XML
Validación
Catálogos
Validación
Cálculos
WorkFlow 2
Validación
Certificados
Validación
Schema XML
Validación
Catálogos
Validación
Cálculos
WorkFlow N
.
.
.
.
Procesador
RAM
Maquina Virtual Erlang
BEAM
Escalamiento horizontal
SERVER
- Código
- Cache
- Maquina Virtual
- Web Server
- Reglas
SERVER
- Código
- Cache
- Maquina Virtual
- Web Server
- Reglas
SERVER
- Código
- Cache
- Maquina Virtual
- Web Server
- Reglas
SERVER
- Código
- Cache
- Maquina Virtual
- Web Server
- Reglas
Despliegue
80 MB
SERVER
- Código
- Cache
- Maquina Virtual
- Web Server
- Reglas
70 MB por datos
de catálogos
Confiabilidad
Error
Factura
XML
Errores
Headers Etapa
Error
Factura
XML
Errores
Headers Etapa
Reporte de errores
• 1200 Pruebas automatizadas
• Generador de Facturas
• Agregar facturas reales para probar
• Cada motor se puede probar unitariamente
Pruebas automatizadas
• Realizar 1200 facturas a mano llevaría mucho
tiempo
• Compilador de facturas
Generador de facturas
Generador de facturas
Factura Completa
Certificado
Emisor
Receptor
Lista de Conceptos
Sello Emisor
Sello Pac
5 Campos
10 Campos
10 Campos
20 Campos
5 Campos
4 Campos
Deltas de
Prueba
Compilador
Factura de
Prueba
• MikeFlow Multiple (Variante de GithubFlow)
• Linter en cada branch feature
• 1200 Pruebas unitarias en cada branch feature(15
s)
Integración continua
• Gitlab Docker Runners
• Despliegue a staging en cada push a master
• Despliegue a prod en la generación de TAGS
Entrega continua
CI/CD pipeline
Aprovisionamiento
• Pipeline de despliegue - 10 Minutos
• Tiempo de arranque del Sistema - 30 Segundos
Ventanas de
mantenimiento
• Carga de catálogos em memoria
• Carga de reglas
• Calentamiento de cache
• Web Server
Arranque del sistema
Conclusiones
• Pruebas de carga realizadas con Tsung (Erlang)
• 600 TPS 16 GB RM - Xenon Quad-Core
Pruebas de carga
• 6 GB RAM
• Procesador 80 %
Rendimiento server
• 5 Integrantes
• 4 Meses
Desarrollo
• Elixir/Erlang
• Phoenix Framework
Plataforma tecnológica
• El sistema se comunica con Python para la
validación de esquema
• OTP
• Máquina virtual Erlang
Herramienta adecuada
Preguntas

Mais conteúdo relacionado

Semelhante a Bunsan: Cómo validamos 600 facturas por segundo en un miniservidor

24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...
24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...
24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...
SpanishPASSVC
 
Sistel Control Profile [ES]
Sistel Control Profile [ES]Sistel Control Profile [ES]
Sistel Control Profile [ES]
Sistel CONTROL
 
Lo que hay que saber si quieres migrar o actualizar tu versión de Microsoft ...
 Lo que hay que saber si quieres migrar o actualizar tu versión de Microsoft ... Lo que hay que saber si quieres migrar o actualizar tu versión de Microsoft ...
Lo que hay que saber si quieres migrar o actualizar tu versión de Microsoft ...
CLARA CAMPROVIN
 
Mantenimiento y mejora continua de la performance de las aplicaciones
Mantenimiento y mejora continua de la performance de las aplicacionesMantenimiento y mejora continua de la performance de las aplicaciones
Mantenimiento y mejora continua de la performance de las aplicaciones
Abstracta
 

Semelhante a Bunsan: Cómo validamos 600 facturas por segundo en un miniservidor (20)

Azure Realtime analytics: Análisis de datos en tiempo real
Azure Realtime analytics: Análisis de datos en tiempo realAzure Realtime analytics: Análisis de datos en tiempo real
Azure Realtime analytics: Análisis de datos en tiempo real
 
24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...
24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...
24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...
 
Presentación de ERP THEOS v1 2014
Presentación de ERP THEOS v1 2014Presentación de ERP THEOS v1 2014
Presentación de ERP THEOS v1 2014
 
SQL Server 2014 y La Plataforma de Datos
SQL Server 2014 y La Plataforma de DatosSQL Server 2014 y La Plataforma de Datos
SQL Server 2014 y La Plataforma de Datos
 
Sql server 2014 y la plataforma de datos
Sql server 2014 y la plataforma de datosSql server 2014 y la plataforma de datos
Sql server 2014 y la plataforma de datos
 
Prueba de esto
Prueba de estoPrueba de esto
Prueba de esto
 
BI real time analytics
BI real time analyticsBI real time analytics
BI real time analytics
 
Gestion almacenes
Gestion almacenesGestion almacenes
Gestion almacenes
 
Dynamics saturday madrid 2019 web api
Dynamics saturday madrid 2019   web apiDynamics saturday madrid 2019   web api
Dynamics saturday madrid 2019 web api
 
¿Cómo abordar con éxito una migración a Microsoft Dynamics NAV? Sin morir en ...
¿Cómo abordar con éxito una migración a Microsoft Dynamics NAV? Sin morir en ...¿Cómo abordar con éxito una migración a Microsoft Dynamics NAV? Sin morir en ...
¿Cómo abordar con éxito una migración a Microsoft Dynamics NAV? Sin morir en ...
 
Evaluación y prácticas para migrar a la nube
Evaluación y prácticas para migrar a la nubeEvaluación y prácticas para migrar a la nube
Evaluación y prácticas para migrar a la nube
 
Query store
Query storeQuery store
Query store
 
Query store
Query storeQuery store
Query store
 
Sistel Control Profile [ES]
Sistel Control Profile [ES]Sistel Control Profile [ES]
Sistel Control Profile [ES]
 
Protocol HTTP
Protocol HTTPProtocol HTTP
Protocol HTTP
 
Presentación: Seminario Infraestructura para eCommerce - Agosto 2014
Presentación: Seminario  Infraestructura para eCommerce - Agosto 2014Presentación: Seminario  Infraestructura para eCommerce - Agosto 2014
Presentación: Seminario Infraestructura para eCommerce - Agosto 2014
 
Stratesys - OpenText Innovation Tour - 16 JUL 2015
Stratesys - OpenText Innovation Tour - 16 JUL 2015Stratesys - OpenText Innovation Tour - 16 JUL 2015
Stratesys - OpenText Innovation Tour - 16 JUL 2015
 
Automatiza y aprovecha al máximo tu proceso de recepción de facturas electrón...
Automatiza y aprovecha al máximo tu proceso de recepción de facturas electrón...Automatiza y aprovecha al máximo tu proceso de recepción de facturas electrón...
Automatiza y aprovecha al máximo tu proceso de recepción de facturas electrón...
 
Lo que hay que saber si quieres migrar o actualizar tu versión de Microsoft ...
 Lo que hay que saber si quieres migrar o actualizar tu versión de Microsoft ... Lo que hay que saber si quieres migrar o actualizar tu versión de Microsoft ...
Lo que hay que saber si quieres migrar o actualizar tu versión de Microsoft ...
 
Mantenimiento y mejora continua de la performance de las aplicaciones
Mantenimiento y mejora continua de la performance de las aplicacionesMantenimiento y mejora continua de la performance de las aplicaciones
Mantenimiento y mejora continua de la performance de las aplicaciones
 

Mais de Software Guru

Mais de Software Guru (20)

Hola Mundo del Internet de las Cosas
Hola Mundo del Internet de las CosasHola Mundo del Internet de las Cosas
Hola Mundo del Internet de las Cosas
 
Estructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesEstructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso reales
 
Building bias-aware environments
Building bias-aware environmentsBuilding bias-aware environments
Building bias-aware environments
 
El secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorEl secreto para ser un desarrollador Senior
El secreto para ser un desarrollador Senior
 
Cómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealCómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto ideal
 
Automatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowAutomatizando ideas con Apache Airflow
Automatizando ideas con Apache Airflow
 
How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:
 
Introducción al machine learning
Introducción al machine learningIntroducción al machine learning
Introducción al machine learning
 
Democratizando el uso de CoDi
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDi
 
Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0
 
Taller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSTaller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJS
 
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
 
¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?
 
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOps
 
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosElixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
 
Así publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stress
 
Achieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsAchieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goals
 
Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19
 
De lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoDe lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseño
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (10)

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 

Bunsan: Cómo validamos 600 facturas por segundo en un miniservidor