Business Case: UBER El proveedor de servicios de movilización UBER recientemente ha sufrido una vulneración de sus servicios al revelar información de usuarios. Debido a ello se ha pedido hacer una documentación y revisión de los servicios desplegados. Para ello se ha hecho un resumen descriptivo de la arquitectura la cual pasó de ser monolítica el 2014 a una arquitectura orientada a servicios. Uber también ofrece servicios de delivery de comida y de paquetes. Objetivo: El objetivo principal de Uber es mantener un servicio optimizado que haga coincidir las necesidades de los clientes con los proveedores de servicio de transporte. Tomando en cuenta el servicio original de transporte de pasajeros y a partir de ahí extenderlo a delivery de comida y paquetes se ha levantado la siguiente información la cual se pide documentar adecuadamente. • • Los usuarios principales de los servicios son los conductores y los clientes que solicitan los servicios. Los servicios de Uber también deben ser gestionados por los operadores de la empresa que realizan el enrolamiento de conductores, los operadores hacen verificación de las referencias que califiquen a los conductores más idóneos, o atienden a las necesidades de soporte de conductores y clientes. Aplicaciones principales Las aplicaciones principales que se utilizan son: Centro de activación presencial: Es la aplicación web que utilizan los operadores que dan soporte a clientes y conductores, está desarrollada en python. APP Pasajeros: Es la aplicación que utiliza un pasajero que toma un servicio, desarrollada en java y scala. App Conductores: Es la aplicación que utilizan los conductores que ofrecen los servicios de transporte, desarrollada en java y scala. Detrás de estas aplicaciones hay un backend que está conformado por servicios que permiten optimizar la asignación de un conductor a un solicitante de servicio, estos servicios están desarrollados en java, Node, Python y Go. Para llegar a los servicios se utiliza un API Gateway que rutea la funcionalidad de la aplicación al servicio correspondiente. Servicio de gestión de demanda de pasajeros (Riders) Este servicio está compuesto por varias instancias de un microservicio que deja la información en un broker Apache Kafka que registra la geolocalización de un pasajero que solicita un servicio Uber (lugar de recojo) y la geolocalización del lugar de destino. Servicio de gestión de oferta de conductores (Cabs) Este servicio tiene varias instancias de un microservicio que registra la geolocalización de los conductores cada 4 segundos para hacer coincidir la ubicación del pasajero con los conductores más cercanos que tengan alcance al lugar de destino. La información se deja en un broker Apache Kafka que va registrando la geolocalización del conductor en tiempo real. Servicio de despacho operacional (Disco) Este microservicio se encarga de minimizar tiempo de espera, reducir la conducción extra y reducir consumo para el conductor. La función principal es identificar al cliente con la lista de conductores más cercanos y hacer la oferta de servicios para que sea tomada por el conductor. Servicio S3 índice jerárquico hexagonal de Uber (S3) Este servicio es una iniciativa open source de la empresa y es el servicio más importante ya que calcula la distancia del pasajero a los conductores más cercanos, este cálculo puede llegar a ser muy complejo y toma muchos recursos sumados a la cantidad de conductores pudiendo llegar a impactar los tiempos de procesamiento. Debido a ello el servicio S3 de Uber es un servicio que divide el mapa de la tierra en hexágonos los cuales están agrupados hasta en 16 niveles de tamaño, uno puede hacer zoom del nivel más amplio al más detallado. Cada hexágono está mapeado en una base de datos y cuando se desplaza un conductor se identifica en que hexágono se encuentra y se busca el hexágono donde se encuentra el cliente, cuando se busca a los conductores cercanos sólo se busca a aquellos que se encuentran en el mismo hexágono. A partir de ahí se mapea el desplazamiento por proximidad. Este algoritmo acelera mucho la búsqueda de conductores en las proximidades de un pasajero y reduce los tiempos de procesamiento. El Microservicio está hecho en python. Este servicio utiliza la información de conductores, pasajeros y le proporciona al servicio DISCO la información necesaria para optimizar el servicio. Finalmente esta configuración se aplica a cada región(continente) donde tiene presencia UBER Servicio de almacenamiento de información Las bases de datos deben tener capacidad para escalar horizontalmente, de esta manera Uber puede agregar más servidores. Uber utiliza bases de datos No SQL para almacenar la información como MongoDB para los brokers Apache Kafka, Cassandra (Disco y S3) y en menor cantidad MySQL con almacenamiento Json para información procesada por servicios externos. No se tiene un log de accesos detallado de usuarios UBER Servicios externos Se utiliza servicios de pago con Paypal, Mastercard, Visa y los servicios de Google Maps para hacer actualizaciones a la red S3 de Uber. Desde el año 2017 Uber hizo pública la información recolectada de tráfico, esta iniciativa fue reconocida por algunos grupos de usuarios y otros no se sintieron a gusto debido a la privacidad de la información. Hackeo de Uber Recientemente se informó que la infraestructura de UBER fue vulnerada por un acceso no autorizado que reveló información de conductores y clientes de la empresa, para ello se utilizó ingeniería social mediante correos que introdujeron programas que permitieron el acceso a las aplicaciones de los centros de activación presencial. Previamente Uber implementó el análisis de logs para hacer seguimiento de: • Seguimiento de API http • Uso de perfil de usuarios • Recolección de feedback y comentarios • Promoción de cupones • Detección de fraude • Fraude de pagos • Abuso de conductores • Seguimiento histórico de cuentas comprometidas por hackers