Hypercube. Como fornecemos aos desenvolvedores dispositivos de teste e não os perdemos

É impossível testar e depurar completamente aplicativos móveis sem dispositivos de teste. Deve haver muitos desses dispositivos, porque o mesmo código em modelos diferentes se comporta de maneira diferente. Mas como organizar a contabilidade de dispositivos? Como fazer com que desenvolvedores e testadores rapidamente e sem burocracia obtenham um smartphone específico na configuração necessária?


Meu nome é Alexey Lavrenyuk. Você pode me conhecer como um dos autores do Yandex.Tank e como palestrante sobre o tópico de teste de carga . Então eu medi o consumo de energia dos telefones celulares. Agora eu faço o Yandex.Rover em uma equipe de veículos não tripulados (e às vezes luar como Papai Noel ). E entre os telefones e o Rover estava o Hypercube.


Há alguns anos, o chefe de desenvolvimento móvel veio ao nosso departamento de teste de carga e reclamou da situação com os dispositivos de teste. Telefones vagavam de mão em mão, para escolher e encontrar rapidamente o telefone era um problema. Já tínhamos experiência com dispositivos móveis: construímos um amperímetro digital para medir seu consumo de energia. Portanto, decidimos ajudar os colegas e rapidamente fazer uma coisa legal: parecia funcionar por apenas três meses. Eu rio de mim mesmo, ingênuo, a partir de 2020 e digo o que realmente nos esperava.




Conceito de serviço e primeiras idéias


Fomos um dos poucos em Yandex que montaram dispositivos de ferro. Além disso, éramos versados ​​em dispositivos móveis. Para mim, a idéia do serviço estava à superfície: você precisa conectar os telefones ao hub e rastrear sua disponibilidade e movimentação pelo escritório via USB. O design cabe em um gabinete de servidor.


Aqui está como eu imaginei o processo:


  1. Mantemos registros de telefones via USB. Todos os telefones no gabinete estão conectados via USB. O telefone está carregando e vemos informações sobre ele, incluindo o ID do dispositivo - um identificador exclusivo (na verdade, para alguns dispositivos chineses nem sempre é único), pelo qual você pode distinguir um telefone do outro. A propósito, pelo identificador - que qualquer dispositivo USB possui em geral - você pode acompanhar tudo: conecte uma unidade flash USB normal às chaves do carro, por exemplo, e mantenha um registro automático das chaves.
  2. Lemos os usuários em um crachá. Identificamos todos que tiram o telefone do armário usando um crachá (um passe pelo qual você pode reconhecer qualquer funcionário da Yandex). Depois que um funcionário abre o gabinete, acredita-se que ele tenha feito todos os movimentos dos telefones no gabinete.
  3. Todas as informações de movimento são armazenadas centralmente no serviço. Vemos onde e com quem cada celular está localizado. Podemos rastrear estatísticas: quais modelos são mais populares, quais telefones estão ausentes.

Pode haver muitos desses gabinetes, mas as informações em todos os dispositivos móveis neles estão em um só lugar. Todos os cubos (armários) são combinados e conectados logicamente e, juntos, formam um Hypercube grande (daí o nome interno do serviço).


Todo mundo gostou da idéia, começamos o trabalho.


Hypercube. Iniciar


Nós contratamos um helpdesk para o leitor RFID e o minicomputador Intel NUC. Compramos um arduino, uma trava elétrica, um gabinete para equipamentos de rede (era menor que um gabinete de servidor, mas com os mesmos “trilhos” para consertar o equipamento).




Obviamente, não recebemos TK e a lista de compras. Não sabíamos exatamente qual modelo de gabinete caberia, quantos parafusos e metros de fio são necessários. Os requisitos para o gabinete foram alterados de acordo com os desejos das equipes. Concordamos, por exemplo, que armazenaremos 40 telefones celulares em um armário e colocaremos o armário na mesa de cabeceira, porque é pequeno e inconveniente inclinar-se para ele.




Prateleiras para telefones


Pensamos durante muito tempo em como tornar as prateleiras confortáveis. A Yandex tinha racks para demonstrar telefones ou testar interfaces. Pensamos em reutilizar os racks, mas eles não nos agradaram muito: os telefones colocam a tela no usuário, como na vitrine de uma loja - não precisamos disso. Como queríamos otimizar o espaço no armário, decidimos fazer as próprias prateleiras.


Havia uma ideia de colocar os telefones com força, como livros. Para fazer isso, procuramos divisórias em papelarias, tentamos usar suportes de CD-ROM, prateleiras - tudo por aí. De maneira experimental, cantos de plástico de um separador de corte de um duto de cabo foram colados a uma prateleira com adesivo de fusão a quente. O “layout do livro” acabou sendo muito bem-sucedido e gostamos.




Poucos lugares e muitos hubs


Na parte inferior do gabinete, havia pouco espaço para quatro hubs de 10 portas e Intel NUC - estávamos longe da primeira tentativa de empurrá-los para lá. A porta do armário não era para prender a fechadura - usamos muita cola quente, blocos de madeira e uma serra. Deixe-me lembrá-lo: o projeto foi realizado por um grupo de teste de carga, nenhum de nós teve experiência com um moedor em uma cafeteria.




Protótipo de serviço


Lidamos rapidamente com isso: criamos uma página que mostrava a localização dos telefones e a colocamos diretamente em nosso serviço de teste de carga. Só porque permitiu que você tentasse rápida e quase sem esforço o que aconteceu.


O primeiro protótipo de trabalho


Coletamos o primeiro Hypercube em três semanas. Ele ficou assim:




Inicialmente, decidimos testar o protótipo em nosso escritório da Yandex em Moscou (o cliente estava em Ecaterimburgo). Ele foi dar uma volta na equipe móvel Yandex.Browser - já a conhecíamos no projeto Yandex Volta (uma versão mais recente do relatório está aqui ). Esses caras são bem versados ​​no consumo de energia.


Primeiro teste


Prateleiras novamente


Descobriu-se que a cola quente não segura cantos de plástico nas prateleiras de metal. Voltamos à ideia de estandes telefônicos. Pensei durante muito tempo sobre como deveria ser a prateleira ideal no armário. Agora parece que foi possível desenhá-lo em 15 minutos. No final, acabou não muito parecido com o primeiro esboço, mas aqui está o que eu desenhei:




Pegamos as prateleiras compradas para armários de servidores e, em cima, colocamos os divisores fresados ​​de plástico, que fizemos por encomenda. Este design sobreviveu até hoje.




Hubs inconvenientes


Os hubs dos primeiros gabinetes estavam com um interruptor, botões sem trava, desligados por padrão. Portanto, após cada reinicialização, tive que ativar os quatro hubs com as mãos. Conectamos o Yandex SpeechKit para que o cubo pronuncie se os hubs voarem: "Não estou bem, ligue para a pessoa responsável". Quando uma pessoa entra, a voz diz para você verificar os hubs. E o assistente de voz começou a ligar para os funcionários, por nome e voz, que levavam quantos telefones.


Problema de bloqueio


Houve várias iterações com o castelo. Quando eu estava procurando bloqueios para o protótipo no começo, encontrei a única opção que me convinha - “Xerife”: pequena, forte e muito espirituosa (ainda não vi análogos). Fechou-se perfeitamente, mas para abrir o armário, foi necessário pressionar a porta levemente. Nem todos os usuários entenderam isso, por isso decidimos alterar o bloqueio.


Eles pegaram o "xerife" com uma mola que empurrou a porta. O gabinete abriu perfeitamente - mas começou a fechar mal e permaneceu aberto (e se considerou fechado). Isso ocorreu porque o sensor de fechamento foi instalado separadamente da trava, a porta teve uma folga e o sensor funcionou algumas vezes até a porta ser fechada. Configurá-lo era irreal.


Mais uma vez, mudamos a trava para o próximo “xerife”, que não era mais de um design tão espirituoso, mas, por outro lado, um sensor de fechamento foi construído diretamente nela. A trava funcionou no protótipo, mas depois de colocá-lo em operação no primeiro gabinete, ele começou a ser apreendido. Eu tive que dançar com um pandeiro: desmonte, lubrifique, lima com uma lima. Com dor ao meio, ele acabou.


Após os primeiros testes, ficou claro: desenvolvedores e testadores gostam do gabinete, eles o usam ativamente. Isso é conveniente: você pode monitorar os dispositivos e procurar o dispositivo certo no serviço da Web, em vez de perguntar aos seus colegas: “Quem tem esse telefone agora?”. Identificamos os problemas mais importantes: hubs USB inconvenientes que você precisa ligar com as mãos, cabos USB longos de baixa qualidade (os conectores quebraram e os fios emaranhados), uma trava ruim e divisores de prateleira não confiáveis ​​que caíam o tempo todo. O trabalho continuou.


Expansão do hiperespaço


O gerente do departamento de gerenciamento de projetos - ele também nos ajudou a organizar a terceirização para as prateleiras - estava envolvido ativamente em relações públicas internas no Yandex: ele passou por equipes diferentes e falou sobre o nosso maravilhoso serviço. Nos reunimos com representantes de outros departamentos e, inesperadamente, começamos a receber pedidos internos para várias dúzias de armários. Uma imagem sombria surgiu: os testadores de carga por semanas com toda a equipe montam manualmente os armários do que está à mão.


Percebemos que precisávamos de ajuda com a montagem. Antes disso, era necessário otimizar o custo de uma instância do gabinete e seu design para produção em pequena escala.


Estagiário


Durante um mês e meio de verão, conseguimos um estagiário que sabia soldar, perfurar e codificar um pouco. Com ele, refizemos o gabinete antigo no Raspberry Pi (para livrar-nos do caro e desnecessário Intel NUC) e montamos mais um gabinete para instalação em centrais de atendimento em Moscou e São Petersburgo (existem pessoas inteligentes lá que ajudarão nossos usuários a lidar com o protótipo e fornecer feedback útil).


Alternativas de orçamento


Para otimizar o custo, substituímos os componentes mais absurdamente caros do protótipo: o minicomputador Intel NUC (25 mil rublos) e o leitor RFID (5 mil). Eles encontraram um leitor alternativo no Ali Express por 150 rublos e, de um mini computador, mudaram para o Raspberry Pi por 3,5 mil rublos.


Na nova plataforma, tivemos vários problemas. No início, descobriu-se que o relé para os bloqueios não muda, porque o RPi fornece 3,3 V e os relés mecânicos são projetados para 5 V. Eu tive que mudar para o estado sólido. Em seguida, descobrimos que não há relógio no quadro e você não pode demorar um pouco usando o NTP: não é possível autenticar na rede do escritório sem a hora correta (encontramos uma placa de extensão especial com um relógio para RPi).


O problema mais encantador foi com os iPhones. Assim que o sexto iPhone foi inserido no RPi, ele ficou indisponível na rede. Um gerente de projeto que estava passando (e no passado um administrador severo) nos ajudou a descobrir isso. Descobriu-se que a placa de rede no RPi era divorciada via USB, e os iPhones provocaram um serviço de buggy para concluir o barramento USB. Esse problema apareceu pela primeira vez no escritório de Minsk; os caras foram capazes de reproduzi-lo rapidamente e fornecer feedback, o que nos ajudou muito. Eles resolveram o problema quando demoliram a interface gráfica (se bem me lembro), porque o serviço estava integrado a ela.


Armários estão crescendo


Houve um debate sobre o tamanho do gabinete. Alguém pensou que era necessário colocar o dobro de telefones em um armário, alguém - que armários grandes eram inconvenientes para usar no escritório. E então descobrimos que já tínhamos comprado todos os armários pequenos das lojas de Moscou, e a próxima entrega seria em apenas três meses. O debate terminou por conta própria.


Eles decidiram fazer todos os seguintes armários grandes. Olhando para o futuro, direi: foi a decisão certa. Com base em um gabinete grande, ficou mais fácil colocar eletrônicos; 80 telefones não eram mais colocados nele. Entre os trilhos havia um servidor padrão de 19 polegadas. Em um pequeno gabinete, a distância entre os trilhos não era suficiente.




Desenvolvimento Web e UX


Apertamos nossa varinha em uma das estruturas internas de desenvolvimento da web, percebemos que era bom e arrastamos a placa telefônica do Django para o React. Mas ficou claro que apenas um tablet não seria adequado para ninguém. O departamento de serviços geográficos pensou e começou a tarefa em várias telas.


Eu tive que ligar uma equipe de desenvolvimento web. Foi designado um designer de produto que pensou plenamente na interação dos usuários com o serviço. Ele fez adesivos convenientes nos armários, colocou os armários no mapa do escritório, estudou o bate-papo de suporte para entender melhor o que os usuários desejam. Em resumo, assumi o projeto em termos de experiência do usuário.


Os desenvolvedores da Web assumiram a interface e implementaram rapidamente os layouts de design. Temos algo semelhante ao Yandex.Market em uma escala menor: você entra, escolhe um telefone, vai buscá-lo em um armário. O sonho é simples.




Em algum lugar aqui, percebemos que o projeto teria que ser implementado em todo o Yandex. Combinamos despesas para corrigir erros e melhorar seriamente a qualidade do serviço: havia um orçamento geral para a compra de armários, peças de reposição e ferramentas. Com a ajuda de Pasha Melnikov, chefe do grupo de projetos de ferro RnD (na época, e agora ele está envolvido no Yandex.Station), conseguimos concordar com uma empresa externa sobre a produção de gabinetes seriais, levando em consideração nossos requisitos.


Nova versão dos hubs


Compramos outra versão dos hubs, sem botões de energia. Agora não havia necessidade de subir no gabinete e ligar os hubs após uma reinicialização. Montamos um protótipo manualmente - ele funcionou perfeitamente. Mas quando o enviamos a Ecaterimburgo, imediatamente começamos a receber reclamações de que o gabinete não vê alguns telefones. Entendeu isso apenas no local. Os novos hubs têm uma topologia diferente (mesmo para o mesmo modelo de hub em séries diferentes, a topologia pode variar).


O antigo e o novo hub de 10 portas no interior consiste em três chips USB com quatro portas. Mas no antigo hub com o botão liga / desliga, dois chips estão presos em um e no novo eles são conectados por uma "guirlanda". O número de portas é o mesmo, mas a profundidade do aninhamento é diferente. Telefones antigos não foram detectados em portas com uma grande profundidade de aninhamento. É bom que eles fossem velhos e não muito necessários. Resolvemos o problema de uma dor de cabeça cortando a cabeça: pegamos modelos de telefone mais novos para o gabinete, bem, estávamos esperando a implementação de nossos próprios hubs. É verdade que o software precisava possibilitar definir diferentes configurações de topologia USB para diferentes gabinetes.


Hubs próprios


Juntamente com o Pasha, começamos a desenvolver nosso próprio hub USB externo. Era necessário resolver o problema dos hubs adquiridos e também destacar os dispositivos que o usuário procurava e acelerar o carregamento dos telefones modernos: para isso, pegamos fontes de alimentação poderosas e suportamos os padrões mais recentes. Os hubs tinham a capacidade de conectar sensores externos de temperatura - para que possamos controlá-lo em cada prateleira. Os tamanhos foram escolhidos para que duas placas de hub instaladas em um caso se encaixassem exatamente no rack de servidor de 19 polegadas. Os hubs têm um perfil discreto para economizar espaço entre as prateleiras - em geral, eles são legais e modernos. Pasha falará com mais detalhes sobre este projeto em Habré.




Assembléia


A montagem de componentes baseados em armários adquiridos também foi terceirizada. De acordo com nossos cálculos, a equipe de montagem deveria aguentar algumas noites, mas, devido à abundância de trabalho manual, durou algumas semanas. Os fios que são conectados de maneira não-padrão de acordo com os esquemas desenhados com uma caneta em um folheto, solda manual, falta de assentos prontos para componentes e componentes acabados ... Os armários foram acabados no sentido literal da palavra: furos foram feitos para trancas e as figuras foram cortadas por um moedor para outros componentes.


Mais perto da produção


Já sonhamos em dar armários para produção. Decidimos que para acelerar é necessário simplificar a produção e aumentar a participação da terceirização.


Placa periférica


Projetou a placa periférica e atualizou os componentes. Agora, ele era conectado ao Raspberry Pi com um único cabo e a todos os outros componentes com conectores padrão.


Montamos um relógio para o RPi no quadro: antes, colocávamos um componente pronto em separado, comprado em uma loja. Também colocamos um conversor CC / CC (costumava haver uma fonte de alimentação separada) e uma interface RS-485: isso nos permitiu livrar-se da rede de fios. Anteriormente, nós os conectávamos manualmente de ponto a ponto soldando ou colando em um dos pinos RPi. Verificamos o diagrama, examinamos o ponto de entrada do fio, procuramos o orifício desejado - e assim com cada fio por sua vez. Foi muito demorado e provocou erros de montagem. A nova diretoria usava tomadas telefônicas.



Descobriu-se mais tarde: ao fazer a fiação, não levei em conta que você precisava conectar o chip RS-485 a pernas RPi bem definidas. Eu tive que atualizar a versão do quadro. Quando desenhei o componente de desacoplamento de energia RS-485, não prestei atenção no fato de que a folha de dados do microcircuito dava uma visão de baixo, não de cima, e quando o liguei pela primeira vez, produziu um "estrondo!" Com um cheiro característico. Eu tive que soldar novamente o chip na parte traseira do painel durante toda a primeira série de painéis.




Nova versão do gabinete


Os armários comprados deixaram de nos adequar. Eles pareciam estranhos, porque eram destinados ao servidor, e não ao escritório, e também precisavam ser modificados manualmente. Demorou muito tempo e o resultado foi artesanal. Decidimos fazer nossos próprios armários na fábrica em Arzamas.


Pedimos à fábrica para montar um gabinete modificado com base no gabinete de servidor padrão: altere o tamanho, instale a trava, traga os conectores necessários, faça furos para fixar os elementos. Eles desenharam esboços das prateleiras, fizeram um estojo para a unidade eletrônica (RPi e suas amigas), um estojo para o hub. Quando chegou ao castelo, o engenheiro de design da fábrica modificou levemente a opção comprada e começou a funcionar melhor. Um relatório de erro com uma solicitação de pull para finalizar o ferro foi enviado aos autores do xerife.


, , . , .






, , . , . — .





, , : , , . , . .




, , : .



. : , , ( , ) . .


. , , .. , «». «» USB-, . , . — , .

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


All Articles