GNU/Linux, Open Source, Cloud Computing, DevOps y más...

Aplicación web para subastas de coches online y presenciales

5 comentarios

Este fue un proyecto muy interesante relacionado con el mundo del motor en el que lideré un equipo técnico de 4 personas en el diseño y desarrollo de una completo software enfocado a realizar subastas de coches tanto de forma online como de forma presencial en una nave industrial especialmente acondicionada para esta misión. Lamentablemente, a pesar de lo bonito del proyecto y de tratarse de una startup con mucho potencial y un gran equipo humano de casi 20 personas, la aplicación no pudo llegar a utilizarse en un escenario real porque la empresa se disolvió antes de poder empezar su verdadera andadura por diversos problemas a nivel comercial y de gestión.

Sin embargo, a nivel técnico la aplicación se implementó y se desplegó completamente, cumpliendo muy satisfactoriamente los requisitos y objetivos planteados inicialmente. Se tomaron como modelos principalmente las aplicaciones de subastas de automóviles de BCA y de Autorola y también otras como CarsOnTheWeb, ManheimEurocarBidSubastacarSubasto mi Coche, etc. Creo humildemente que conseguimos mejorarlas en varios aspectos.

BCA bidding

Gestión completa de las subastas en tiempo real

Nuestro principal reto tecnológico era conseguir un sistema de gestión de subastas que permitiera aceptar pujas de forma simultánea tanto de potenciales compradores ubicados en cualquier localización geográfica a través de Internet, como de los propios asistentes al evento que acudían al evento de la subasta de forma presencial y que pujaban directamente en sala.

15-FRONTAL-subastas-en-directo

Seguimiento de subastas en directo a través de Internet

Para conseguirlo se desarrolló el motor en tiempo real utilizando websockets y se hizo un gran esfuerzo de optimización no sólo a nivel de websockets, sino de toda la pila tecnológica implicada, desde el sistema operativo o las comunicaciones en red hasta la base de datos o el motor de ejecución para lograr ofrecer unos tiempos de respuesta iniciales inferiores a 100 ms desde que un usuario pulsaba el botón de pujar hasta que dicha puja quedaba recogida en el sistema y actualizaba el precio actual y otros contadores y datos de interés del coche que se estaba subastando en ese momento. Todo ello debía realizarse además con cientos de usuarios pujando simultáneamente, por lo que hubo que implementar un sofisticado sistema de encolamiento y tratamiento de pujas, así como de resolución de conflictos entre las mismas.


Error: Your Requested widget " ai_widget-6" is not in the widget list.
  • [do_widget_area above-nav-left]
    • [do_widget_area above-nav-right]
      • [do_widget_area footer-1]
        • [do_widget id="wpp-4"]
      • [do_widget_area footer-2]
        • [do_widget id="recent-posts-4"]
      • [do_widget_area footer-3]
        • [do_widget id="recent-comments-3"]
      • [do_widget_area footer-4]
        • [do_widget id="archives-4"]
      • [do_widget_area logo-bar]
        • [do_widget id="oxywidgetwpml-3"]
      • [do_widget_area menu-bar]
        • [do_widget id="search-3"]
      • [do_widget_area sidebar]
        • [do_widget id="search-4"]
        • [do_widget id="ai_widget-2"]
        • [do_widget id="categories-5"]
        • [do_widget id="ai_widget-3"]
        • [do_widget id="ai_widget-4"]
        • [do_widget id="ai_widget-5"]
      • [do_widget_area sub-footer-1]
        • [do_widget id="text-4"]
      • [do_widget_area sub-footer-2]
        • [do_widget_area sub-footer-3]
          • [do_widget_area sub-footer-4]
            • [do_widget_area upper-footer-1]
              • [do_widget id="search-2"]
              • [do_widget id="recent-posts-2"]
              • [do_widget id="recent-comments-2"]
              • [do_widget id="archives-2"]
              • [do_widget id="categories-2"]
              • [do_widget id="meta-2"]
            • [do_widget_area upper-footer-2]
              • [do_widget_area upper-footer-3]
                • [do_widget_area upper-footer-4]
                  • [do_widget_area widgets_for_shortcodes]
                    • [do_widget id="search-5"]
                    • [do_widget id="ai_widget-6"]
                  • [do_widget_area wp_inactive_widgets]
                    • [do_widget id="wpp-2"]
                    • [do_widget id="text-1"]
                    • [do_widget id="recent-posts-3"]
                    • [do_widget id="categories-3"]
                    • [do_widget id="archives-3"]
                    • [do_widget id="icl_lang_sel_widget-3"]

                  Aún así el sistema estaba preparado para rebajar aún más los tiempos de respuesta cuando se hubiera puesto en producción, ya que la fase de pruebas y certificación se realizó con el servidor de pujas emplazado en la zona eu-west-1 de Amazon Web Services. Es decir, el servidor se encontraba ubicado en Irlanda y las pujas se realizaban mayoritariamente desde Madrid y otras partes de España, y esto introducía una latencia de red innecesaria de 50-60 ms que estaba previsto minimizar emplazando el subsistema de pujas en Madrid. Otras mejoras estaban previstas para alcanzar el objetivo de 30 ms de tiempo de respuesta que me había planteado para la salida a producción de la aplicación.

                  Arquitectura multicapa

                  Otro de los principales objetivos de diseño del proyecto era conseguir una arquitectura desacoplada que permitiera separar completamente y de forma efectiva las capas de presentación, lógica de negocio y datos, de forma que la misma base de datos de coches, subastas, fabricantes, clientes, proveedores, etc. pudiera ser utilizada tanto por nuestro software de subastas como por diversas aplicaciones corporativas, como CRM y fuerza de ventas, herramientas de tasación, gestión interna de las entradas y salidas de vehículos así como de su mantenimiento, apps móviles, distintos microservicios, dispositivos electrónicos conectados (Raspberry Pi) con distintos cometidos, etc.


                  Error: Your Requested widget " ai_widget-6" is not in the widget list.
                  • [do_widget_area above-nav-left]
                    • [do_widget_area above-nav-right]
                      • [do_widget_area footer-1]
                        • [do_widget id="wpp-4"]
                      • [do_widget_area footer-2]
                        • [do_widget id="recent-posts-4"]
                      • [do_widget_area footer-3]
                        • [do_widget id="recent-comments-3"]
                      • [do_widget_area footer-4]
                        • [do_widget id="archives-4"]
                      • [do_widget_area logo-bar]
                        • [do_widget id="oxywidgetwpml-3"]
                      • [do_widget_area menu-bar]
                        • [do_widget id="search-3"]
                      • [do_widget_area sidebar]
                        • [do_widget id="search-4"]
                        • [do_widget id="ai_widget-2"]
                        • [do_widget id="categories-5"]
                        • [do_widget id="ai_widget-3"]
                        • [do_widget id="ai_widget-4"]
                        • [do_widget id="ai_widget-5"]
                      • [do_widget_area sub-footer-1]
                        • [do_widget id="text-4"]
                      • [do_widget_area sub-footer-2]
                        • [do_widget_area sub-footer-3]
                          • [do_widget_area sub-footer-4]
                            • [do_widget_area upper-footer-1]
                              • [do_widget id="search-2"]
                              • [do_widget id="recent-posts-2"]
                              • [do_widget id="recent-comments-2"]
                              • [do_widget id="archives-2"]
                              • [do_widget id="categories-2"]
                              • [do_widget id="meta-2"]
                            • [do_widget_area upper-footer-2]
                              • [do_widget_area upper-footer-3]
                                • [do_widget_area upper-footer-4]
                                  • [do_widget_area widgets_for_shortcodes]
                                    • [do_widget id="search-5"]
                                    • [do_widget id="ai_widget-6"]
                                  • [do_widget_area wp_inactive_widgets]
                                    • [do_widget id="wpp-2"]
                                    • [do_widget id="text-1"]
                                    • [do_widget id="recent-posts-3"]
                                    • [do_widget id="categories-3"]
                                    • [do_widget id="archives-3"]
                                    • [do_widget id="icl_lang_sel_widget-3"]

                                  Para ello opté por implementar la arquitectura que se muestra a continuación basada en una API REST y en los ya mencionados websockets para actuar como interfaz de separación entre las capas de presentación y lógica de negocio:

                                  Arquitectura conceptual 3-tier basada en API RESTBase tecnológica

                                  Las tecnologías utilizadas para dar soporte a todos estos requerimientos fueron las siguientes:

                                  Tecnología empleada
                                  Servidores de subastas y pujas Instancias EC2 en Amazon Web Services (AWS)
                                  Sistema operativo Linux (Ubuntu 14.04 LTS)
                                  Backend / motor de ejecución PHP (ReactPHP y Symfony 2.6)
                                  API REST Symfony 2.6 + FOSRestBundle
                                  Base de datos MySQL 5.6
                                  Frontales web AngularJS 1.3 + Restangular

                                  Puestos de subastador y anotador y pantallas de sala

                                  Desde el principio se planteó como requisito ineludible que la interfaz de usuario de la aplicación fuera responsive para que pudiera ser utilizada desde cualquier tipo de dispositivo móvil o tableta, además de en los distintos equipos utilizados en sala para los puestos del subastador, anotador y pantallas informativas de sala desde las que se podía seguir en todo momento la subasta en curso.

                                  08-BACKOFFICE-pantalla-del-subastador

                                  Pantalla del subastador

                                  09-BACKOFFICE-pantalla-del-anotador

                                  Pantalla del anotador

                                  10-BACKOFFICE-pantalla-de-sala-hd-1920x1080

                                  Pantallas de sala

                                  Panel de administración interna

                                  Para gestionar todo lo que ocurría entre bastidores durante la jornada de celebración de las subastas, pero también en las jornadas previas y posteriores con la preparación de las mismas y la gestión de las ventas realizadas, se disponía de un completo panel de administración:

                                  01-BACKOFFICE-escritorio

                                  Inicio - Mi escritorio

                                  02-BACKOFFICE-listado-vehículos

                                  Listado de vehículos

                                  07-BACKOFFICE-edición-vehículo

                                  Formulario de edición de vehículos

                                  03-BACKOFFICE-creación-de-cuenta

                                  Formulario de creación de cuentas de clientes

                                  05-BACKOFFICE-detalle-cuenta-desde-tablet

                                  Vista de detalle de una cuenta de cliente (tablet)

                                  06-BACKOFFICE-listado-cuentas-desde-móvil

                                  Listado de cuentas de cliente (móvil)

                                  Sitio web público

                                  Como he comentado al principio, además de tratarse de subastas presenciales, se debía dar acceso a pujadores externos para que pudieran registrarse a las distintas subastas disponibles, seleccionar y marcar como favoritos los coches que les resultaran más interesantes, pujar por dichos vehículos cuando estuvieran subastándose en sala y pudieran finalmente efectuar el proceso de compra completo de los coches una vez que les fueran adjudicados. Para ello se tuvo que desarrollar un sitio web público muy potente que permitiera llevar a cabo todas estas operaciones.

                                  17-FRONTAL-detalle-de-subasta

                                  Detalle de una subasta

                                  16-FRONTAL-calendario-de-subastas

                                  Calendario de subastas

                                  15-FRONTAL-subastas-en-directo

                                  Seguimiento de subastas en directo a través de Internet

                                  14-FRONTAL-registro-usuarios-desde-móvil

                                  Registro de usuarios desde móvil

                                  13-FRONTAL-detalle-cuenta

                                  Detalle de una cuenta de cliente corporativo con varios pujadores autorizados

                                  12-FRONTAL-registro-usuarios

                                  Registro de usuarios profesionales

                                   

                                  Sobre el autor

                                  Daniel López Azaña
                                  Arquitecto de soluciones Cloud AWS & Linux Sysadmin Freelance

                                  Emprendedor, generador de ideas y mente inquieta. Apasionado de las nuevas tecnologías, especialmente de los sistemas Linux y del software libre. Me gusta escribir además sobre actualidad tecnológica, Cloud Computing, AWSi, DevOps, DevSecOps, seguridad, desarrollo web y programación, SEO, ciencia, innovación, emprendimiento, etc.

                                  DanielAplicación web para subastas de coches online y presenciales

                                  Artículos relacionados

                                  5 comentarios

                                  Unirte a la conversación
                                  • Lucas - 10/06/2018 responder

                                    Hola, quería ver online el software de subastas online, me interesa el producto. Soy de argentina. Gracias

                                  • Alexis Do Nascimento - 08/02/2019 responder

                                    Me interesa el producto. ¿Podemos coordinar una demo?

                                  • Ferhabe Raziel - 17/06/2019 responder

                                    Hola, ¿dónde o cómo obtener esta funcionalidad e integrarla en mi solución web?

                                  • Leo - 08/11/2019 responder

                                    Estoy interesado en conocer si el producto se puede contratar/licenciar a pesar de no haber sido usado en el caso de los coches. gracias

                                  • Jorge - 31/12/2019 responder

                                    Buenos dias , estoy interesado como puedo contactar,
                                    Gracias

                                  Deja una respuesta

                                  Tu dirección de correo electrónico no será publicada.