Hipercubo Cómo proporcionamos a los desarrolladores dispositivos de prueba y no los perdimos

Es imposible probar y depurar completamente las aplicaciones móviles sin dispositivos de prueba. Debería haber muchos de estos dispositivos, porque el mismo código en diferentes modelos se comporta de manera diferente. Pero, ¿cómo organizar la contabilidad del dispositivo? ¿Cómo hacer que los desarrolladores y probadores rápidamente y sin burocracia obtengan un teléfono inteligente específico en la configuración necesaria?


Me llamo Alexey Lavrenyuk. Puede conocerme como uno de los autores de Yandex.Tank y un orador sobre el tema de las pruebas de carga . Luego medí el consumo de energía de los teléfonos móviles. Ahora hago Yandex.Rover en un equipo de vehículos no tripulados (y a veces a la luz de la luna como Santa Claus ). Y entre los teléfonos y el Rover estaba Hypercube.


Hace un par de años, el jefe de desarrollo móvil llegó a nuestro departamento de pruebas de carga y se quejó de la situación con los dispositivos de prueba. Los teléfonos deambulaban de mano en mano, elegir y encontrar rápidamente el teléfono era un problema. Ya teníamos experiencia con dispositivos móviles: construimos un amperímetro digital para medir su consumo de energía. Por lo tanto, decidimos ayudar a los colegas y rápidamente hacer algo genial: parecía funcionar solo durante tres meses. Me río de mí mismo, ingenuo, desde 2020 y cuento lo que realmente nos esperaba.




Concepto de servicio y primeras ideas.


Fuimos uno de los pocos en Yandex que ensamblaron dispositivos de hierro. Además, estábamos versados ​​en dispositivos móviles. Para mí, la idea del servicio estaba en la superficie: debe conectar los teléfonos al concentrador y rastrear su disponibilidad y movimiento en la oficina a través de USB. El diseño cabe en un gabinete de servidor.


Así es como imaginé el proceso:


  1. Mantenemos registros de teléfonos a través de USB. Todos los teléfonos en el gabinete están conectados a través de USB. El teléfono se está cargando y vemos información al respecto, incluida la ID del dispositivo, un identificador único (de hecho, para algunos dispositivos chinos no siempre es único), por el cual puede distinguir un teléfono de otro. Por cierto, por el identificador, que cualquier dispositivo USB tiene en general, puede realizar un seguimiento de cualquier cosa: conecte una unidad flash USB normal a las llaves de su automóvil, por ejemplo, y mantenga un registro automático de llaves.
  2. Leemos a los usuarios en una insignia. Identificamos a todos los que sacan el teléfono del armario con una credencial (un pase por el cual puede reconocer a cualquier empleado de Yandex). Después de que un empleado abre el gabinete, se cree que hizo todos los movimientos de los teléfonos en el gabinete.
  3. Toda la información de movimiento se almacena centralmente en el servicio. Vemos dónde y con quién se encuentra cada teléfono móvil. Podemos rastrear estadísticas: qué modelos son más populares, qué teléfonos faltan.

Puede haber muchos de estos gabinetes, pero la información sobre todos los dispositivos móviles en ellos se encuentra en un solo lugar. Todos los cubos (gabinetes) están combinados y conectados lógicamente, y juntos forman un gran hipercubo (de ahí el nombre interno del servicio).


A todos les gustó la idea, comenzamos a trabajar.


Hipercubo Inicio


Tomamos un servicio de asistencia del lector RFID y la mini computadora Intel NUC. Compramos un arduino, una cerradura eléctrica, un gabinete para equipo de red (era más pequeño que un gabinete de servidor, pero con los mismos "rieles" para arreglar el equipo).




Por supuesto, no nos dieron TK y la lista de compras. No sabíamos exactamente qué modelo de gabinete encajaría, cuántos pernos y metros de cable se necesitan. Los requisitos para el gabinete cambiaron sobre la marcha de acuerdo con los deseos de los equipos. Acordamos, por ejemplo, que almacenaremos 40 teléfonos móviles en un gabinete, y lo colocaremos en la mesita de noche, porque es pequeño e incómodo inclinarse hacia él.




Estantes para teléfonos


Pensamos durante mucho tiempo cómo hacer que los estantes sean cómodos. Yandex tenía bastidores para demostrar teléfonos o probar interfaces. Pensamos reutilizar los bastidores, pero no nos quedaban muy bien: los teléfonos allí ponen la pantalla al usuario, como en un escaparate, no la necesitamos. Queríamos optimizar el espacio en el armario, por lo que decidimos hacer estanterías nosotros mismos.


Hubo una idea de poner los teléfonos dentro, como libros. Para hacer esto, buscamos divisores en papelerías, tratamos de usar soportes para CD-ROM, estantes de las tiendas, todo de una vez. De manera experimental, las esquinas de plástico de un separador de un conducto de cable se pegaron a un estante con adhesivo termofusible. El "diseño del libro" resultó ser muy exitoso y nos gustó.




Pocos lugares y muchos centros


En la parte inferior del gabinete había poco espacio para cuatro concentradores de 10 puertos e Intel NUC; estábamos lejos del primer intento de llevarlos allí. La puerta del gabinete no estaba diseñada para cerrar la cerradura: utilizamos mucho pegamento caliente, bloques de madera y una sierra para metales. Permítame recordarle: el proyecto fue realizado por un grupo de prueba de carga, ninguno de nosotros tenía experiencia con un molinillo en un punto de café.




Prototipo de servicio


Rápidamente nos ocupamos de esto: creamos una página que mostraba la ubicación de los teléfonos y la colocamos directamente en nuestro servicio de prueba de carga. Solo porque te permitió probar rápida y casi sin esfuerzo lo que sucedió.


El primer prototipo de trabajo.


Recolectamos el primer hipercubo en tres semanas. Se veía así:




Al principio, decidimos probar el prototipo en nuestra oficina de Yandex en Moscú (el cliente estaba en Ekaterimburgo). Fue por un encuentro con el equipo móvil Yandex.Browser: ya la conocíamos del proyecto Yandex Volta (una versión más reciente del informe está aquí ). Estos tipos están bien versados ​​en consumo de energía.


Primera prueba


Estantes de nuevo


Resultó que el pegamento caliente no retiene bien las esquinas de plástico en los estantes de metal. Volvemos a la idea de los soportes para teléfonos. Durante mucho tiempo pensé en cómo debería verse el estante ideal en el armario. Ahora parece que fue posible dibujarlo en 15 minutos. Al final, resultó no exactamente como en el primer boceto, pero esto es lo que dibujé entonces:




Tomamos los estantes comprados para gabinetes de servidores, y encima colocamos los divisores fresados ​​hechos de láminas de plástico, que hicimos por encargo. Este diseño ha sobrevivido hasta nuestros días.




Hubs inconvenientes


Los centros para los primeros gabinetes estaban con un interruptor de encendido, botones sin bloqueo, apagados por defecto. Por lo tanto, después de cada reinicio, tuve que encender los cuatro concentradores con las manos. Conectamos Yandex SpeechKit para que el cubo se pronuncie si los hubs salen volando: "No estoy bien, por favor llame a la persona responsable". Cuando entra una persona, la voz le dice que revise los centros. Y el asistente de voz comenzó a llamar a los empleados por su nombre y voz, quienes tomaron cuántos teléfonos.


Problema de bloqueo


Hubo varias iteraciones con el castillo. Cuando estaba buscando cerraduras para el prototipo desde el principio, encontré la única opción que me convenía: "Sheriff": pequeño, fuerte y muy ingenioso (todavía no he visto ningún análogo). Se cerró perfectamente, pero para abrir el armario, era necesario presionar ligeramente la puerta. No todos los usuarios entendieron esto, por lo que decidimos cambiar el bloqueo.


Se llevaron al "Sheriff" con un resorte que empujó la puerta. El gabinete se abrió perfectamente, pero comenzó a cerrarse mal y permaneció abierto (y se consideró cerrado). Esto se debió a que el sensor de cierre se instaló por separado de la cerradura, la puerta tenía una reacción violenta y el sensor a veces funcionaba hasta que se cerró la puerta. Configurarlo no fue realista.


Una vez más, cambiamos la cerradura al siguiente "Sheriff", que ya no tenía un diseño tan ingenioso, pero por otro lado, un sensor de cierre fue incorporado directamente en él. La cerradura funcionó en el prototipo, pero después de ponerlo en funcionamiento en el primer gabinete, comenzó a agarrotarse. Tuve que bailar con una pandereta: desmontar, lubricar, archivar con un archivo. Con el dolor a la mitad, terminó.


Después de las primeras pruebas, quedó claro: a los desarrolladores y probadores les gusta el gabinete, lo usan activamente. Esto es conveniente: puede monitorear los dispositivos y buscar el correcto en el servicio web, en lugar de preguntar a sus colegas: "¿Quién tiene este teléfono ahora?". Identificamos los problemas más importantes: concentradores USB inconvenientes que necesita encender con las manos, cables USB largos de baja calidad (los conectores se rompieron y los cables se enredaron), un bloqueo defectuoso y divisores de estante poco confiables que se cayeron todo el tiempo. El trabajo continuó.


Expansión hiperespacial


El gerente del departamento de gestión de proyectos, también nos ayudó a organizar la subcontratación para los estantes, participó activamente en relaciones públicas internas en Yandex: fue a diferentes equipos y habló sobre nuestro maravilloso servicio. Nos reunimos con representantes de otros departamentos e inesperadamente comenzamos a recibir pedidos internos de varias docenas de gabinetes. Surgió una imagen sombría: probadores de carga durante semanas con todo el equipo ensamblar manualmente los gabinetes de lo que está a la mano.


Nos dimos cuenta de que necesitábamos ayuda con la asamblea. Antes de eso, era necesario optimizar el costo de una instancia del gabinete y su diseño para la producción a pequeña escala.


Aprendiz


Durante un mes y medio de verano logramos encontrar un interno que supiera soldar, perforar y codificar un poco. Con él, rehicimos el viejo gabinete en la Raspberry Pi (para deshacernos del costoso e innecesario Intel NUC) y ensamblamos un gabinete más para la instalación en los mostradores de ayuda en Moscú y San Petersburgo (hay personas inteligentes que ayudarán a nuestros usuarios a hacer frente al prototipo y darán Comentarios útiles).


Alternativas presupuestarias


Para optimizar el costo, reemplazamos los componentes más irrazonablemente caros del prototipo: la mini computadora Intel NUC (25 mil rublos) y el lector RFID (5 mil). Encontraron un lector alternativo en Ali Express por 150 rublos, y desde una mini computadora se mudaron a Raspberry Pi por 3,5 mil rublos.


En la nueva plataforma, nos encontramos con varios problemas. Al principio resultó que el relé para las cerraduras no cambia, porque RPi da 3.3 V, y los relés mecánicos están diseñados para 5 V. Tuve que cambiar a estado sólido. Luego descubrimos que no hay reloj en el tablero, y no podrá tomarse el tiempo usando NTP: no puede autenticarse en la red de la oficina sin la hora correcta (encontramos una placa de extensión especial con un reloj para RPi).


El problema más encantador fue con los iPhones. Tan pronto como se insertó el sexto iPhone en el RPi, dejó de estar disponible en la red. Un gerente de proyecto que pasaba (y en el pasado un administrador duro) nos ayudó a resolver esto. Resultó que la tarjeta de red en el RPi se divorció a través de USB, y los iPhones provocaron un servicio defectuoso para terminar el bus USB. Este problema apareció por primera vez en la oficina de Minsk, los chicos pudieron reproducirlo rápidamente y dar su opinión, lo que nos ayudó mucho. Resolvieron el problema cuando demolieron la interfaz gráfica (si no recuerdo mal), porque el servicio estaba integrado en ella.


Los gabinetes están creciendo


Hubo debate sobre el tamaño del gabinete. Alguien pensó que era necesario poner el doble de teléfonos en un armario, alguien, que los gabinetes grandes eran inconvenientes para usar en la oficina. Y luego descubrimos que ya habíamos comprado todos los pequeños gabinetes de las tiendas de Moscú, y la próxima entrega sería solo en tres meses. El debate terminó por sí solo.


Decidieron agrandar todos los siguientes gabinetes. Mirando hacia el futuro, diré: resultó ser la decisión correcta. Sobre la base de un gran gabinete, se ha vuelto más fácil colocar dispositivos electrónicos; ya no se colocaron 80 teléfonos. En él entre los rieles había un servidor estándar de 19 pulgadas. En un gabinete pequeño, la distancia entre los rieles no era suficiente.




Desarrollo web y UX


Pusimos nuestra varita en uno de los marcos internos de desarrollo web, nos dimos cuenta de que era bueno y arrastramos la placa del teléfono de Django a React. Pero estaba claro que solo una tableta no sería adecuada para nadie. El departamento de servicios geográficos pensó y amaneció la tarea en varias pantallas.


Tuve que conectar un equipo de desarrollo web. Nos asignaron un diseñador de producto que pensó completamente en la interacción de los usuarios con el servicio. Hizo calcomanías convenientes en los gabinetes, colocó los gabinetes en el mapa de la oficina, estudió el chat de soporte para comprender mejor lo que los usuarios quieren. En resumen, tomé el proyecto bajo mi ala en términos de experiencia de usuario.


Los desarrolladores web tomaron la delantera e implementaron rápidamente diseños de diseño. Tenemos algo similar a Yandex.Market en una escala más pequeña: entras, eliges un teléfono, vas a recogerlo en un armario. El sueño es simple.




En algún lugar aquí nos dimos cuenta de que el proyecto tendría que extenderse a todo el Yandex. Acordamos los gastos para corregir errores y mejorar seriamente la calidad del servicio: había un presupuesto general para la compra de gabinetes, repuestos y herramientas. Con la ayuda de Pasha Melnikov, el jefe del grupo de proyectos de hierro RnD (en ese momento, y ahora está involucrado en Yandex.Station), logramos llegar a un acuerdo con una compañía externa sobre la producción de gabinetes en serie teniendo en cuenta nuestros requisitos.


Nueva versión de hubs


Compramos otra versión de los hubs, sin botones de encendido. Ahora no había necesidad de subir dentro del gabinete y encender los cubos después de un reinicio. Armamos un prototipo manualmente, funcionó perfectamente. Pero cuando lo enviamos a Ekaterimburgo, inmediatamente comenzamos a recibir quejas de que el gabinete no ve algunos teléfonos. Entendí esto solo en el acto. Resultó que los nuevos centros tienen una topología diferente (incluso para el mismo modelo de centro en diferentes series, la topología puede variar).


Tanto el viejo como el nuevo concentrador de 10 puertos en el interior consta de tres chips USB con cuatro puertos. Pero en el viejo hub con el botón de encendido, dos chips están atascados en uno, y en el nuevo están conectados por una "guirnalda". El número de puertos es el mismo, pero la profundidad de anidamiento es diferente. No se detectaron teléfonos viejos en puertos con una gran profundidad de anidación. Es bueno que fueran viejos y no muy necesarios. Resolvimos el problema de un dolor de cabeza cortando la cabeza: simplemente tomamos modelos de teléfono más nuevos para el gabinete, bueno, estábamos esperando la implementación de nuestros propios centros. Es cierto que el software tenía que permitir establecer diferentes configuraciones de topología USB para diferentes gabinetes.


Centros propios


Junto con Pasha, comenzamos a desarrollar nuestro propio hub USB externo. Fue necesario para resolver el problema de los hubs comprados, y también para resaltar los dispositivos para los que el usuario vino y acelerar la carga de los teléfonos modernos: para esto tomamos fuentes de alimentación potentes y admitimos los últimos estándares. Los centros tenían la capacidad de conectar sensores de temperatura externos, por lo que podemos controlarlo en cada estante. Se eligieron los tamaños para que dos tarjetas de concentrador instaladas en una caja encajen exactamente en el rack del servidor de 19 pulgadas. Los cubos tienen un perfil bajo para ahorrar espacio entre los estantes; en general, resultaron geniales y modernos. Pasha contará con más detalle sobre este proyecto en Habré.




Asamblea


El ensamblaje de componentes basados ​​en gabinetes comprados también se subcontrató. Según nuestros cálculos, se suponía que el equipo de ensamblaje debía hacer frente por un par de noches, pero debido a la abundancia de trabajo manual, duró un par de semanas. Los cables que están conectados de una manera no estándar de acuerdo con los esquemas dibujados con un bolígrafo en un folleto, soldadura manual, falta de asientos prefabricados para componentes y componentes terminados en sí mismos ... Los gabinetes se terminaron en el sentido literal de la palabra: se perforaron agujeros para las cerraduras y se cortó con un molinillo para otros componentes.


Más cerca de la producción


Ya hemos soñado con dar gabinetes a la producción. Decidimos que para acelerar es necesario simplificar la producción y aumentar la participación en el outsourcing.


Tablero periférico


Diseñé la placa periférica y actualicé los componentes. Ahora se conecta a la Raspberry Pi con un solo cable y todos los demás componentes con conectores estándar.


Configuramos un reloj para RPi en el tablero: antes, colocamos un componente listo para usar, comprado en una tienda. También colocamos un convertidor DC / DC (solía haber una unidad de fuente de alimentación separada) y una interfaz RS-485: esto nos permitió deshacernos de la red de cables. Anteriormente, los conectamos manualmente de punto a punto soldando o pegando en uno de los pines RPi. Verificamos el diagrama, miramos el punto de entrada del cable, buscamos el agujero deseado, y así con cada cable por turno. Fue muy lento y provocó errores de ensamblaje. La nueva placa utilizaba tomas telefónicas.



Resultó más tarde: al realizar el cableado, no tuve en cuenta que necesita conectar el chip RS-485 a patas RPi bien definidas. Tuve que actualizar la versión del tablero. Cuando dibujé el componente de desacoplamiento de energía RS-485, no presté atención al hecho de que la hoja de datos muestra el microchip desde la parte inferior, no desde la parte superior, y cuando lo encendí por primera vez, hizo "¡Bang!" Con un olor característico. Tuve que volver a soldar el chip en la parte posterior de la placa para toda la primera serie de placas.




Nueva versión de gabinete


Los gabinetes comprados han dejado de satisfacernos. Parecían extraños, porque estaban destinados al servidor, y no a la oficina, y también debían modificarse a mano. Tomó mucho tiempo y el resultado fue artesanal. Decidimos hacer nuestros propios gabinetes en la fábrica de Arzamas.


Le pedimos a la fábrica que ensamblara un gabinete modificado basado en su gabinete de servidor estándar: cambie el tamaño, instale la cerradura, saque los conectores necesarios, haga agujeros para fijar los elementos. Dibujaron bocetos de los estantes, hicieron un estuche para la unidad electrónica (RPi y sus amigos), un estuche para el centro. Cuando se trataba del castillo, el ingeniero de diseño de la fábrica modificó ligeramente la opción comprada, y comenzó a funcionar mejor. Se envió un informe de error con una solicitud de extracción para finalizar el hierro a los autores del Sheriff.


Es muy conveniente que toda la electrónica de control del gabinete esté ahora concentrada en una carcasa, que está montada en cuatro pernos. Se puede ensamblar por separado del gabinete, es fácil de quitar y reemplazar todo cuando está roto.






En los gabinetes de prueba, los cables estaban confundidos, los conectores salieron volando del centro y se rompieron, y algunas veces los empleados se llevaron los cables con ellos. Decidimos unir firmemente los cables a los estantes, dejando la capacidad de cambiar los cables. Dibujé un boceto, y la fábrica nos lo vendió en hierro.





Por supuesto, fuimos a Arzamas varias veces: para negociar, para establecer la producción, para aceptar el resultado. Como resultado, preparamos los gabinetes casi por completo, quedaba por ponerlos en funcionamiento. Pero esta es otra historia.




Por cierto, si visitas Arzamas, ve a la hamburguesa en el centro: es genial.


En la proxima serie


Ahora nuestros cubos se utilizan activamente en la empresa. Incluso se nos ocurrieron los nombres: Stanley Cube, Maggi Cube, Arnie Cube (Arnold Schwarzenegger, seis piezas), etc.


En un futuro cercano, sus colegas compartirán historias con usted sobre el destino del servicio. Por ejemplo, sobre cómo se desarrolló Yandex.Hub. O sobre cómo algunos puertos de los centros comenzaron a "entumecerse". En el puerto "adormecido" no puede ver la desconexión de los dispositivos USB, incluso en los mensajes del núcleo no hay nada. Pero todo se normaliza si retira el teléfono del puerto y lo vuelve a pegar. Mientras tanto, los muchachos están escribiendo artículos para ti. Intenta adivinar por qué es posible.

Source: https://habr.com/ru/post/485050/


All Articles