超立方体。 我们如何为开发人员提供测试设备而又不会丢失它们

如果没有测试设备,就不可能完全测试和调试移动应用程序。 应该有许多这样的设备,因为不同模型上的相同代码的行为不同。 但是如何组织设备计费? 如何使开发人员和测试人员无需繁琐的手续就能快速获得具有必要配置的特定智能手机?


我叫阿列克谢·拉夫伦尤克。 您可能知道我是Yandex.Tank的作者之一,也是负载测试主题的发言人。 然后,我测量了手机的功耗。 现在,我在无人驾驶汽车小组中(有时在月光下也像圣诞老人一样 )进行Yandex.Rover的操作。 在电话和流动站之间是Hypercube。


几年前,移动开发负责人来到我们的负载测试部门,抱怨测试设备的状况。 手机四处走动,选择并迅速找到手机是一个问题。 我们已经在移动设备方面拥有丰富的经验:我们制造了一个数字电流表来测量其能耗。 因此,我们决定帮助同事并迅速做一件很酷的事情:它似乎只能工作三个月。 从2020年开始,我天真地嘲笑自己,并告诉我们真正的期待。




服务理念和初衷


我们是Yandex中为数不多的组装铁装置的公司之一。 此外,我们精通手机。 对我来说,这项服务的主意是浮出水面的:您需要将电话连接到集线器,并通过USB跟踪电话的可用性和在办公室中的移动。 该设计适合服务器机柜。


这是我想象的过程:


  1. 我们通过USB保留电话记录。 机柜中的所有电话均通过USB连接。 手机正在充电,我们会看到有关此信息的信息,包括设备ID(设备ID)-唯一的标识符(实际上,对于某些中文设备,它并不总是唯一的),您可以通过它区分一部手机与另一部手机。 顺便说一下,通过标识符(通常是任何USB设备都具有的标识符),您可以跟踪任何东西:例如,将常规的USB闪存驱动器连接到汽车钥匙上,并自动记录钥匙。
  2. 我们在徽章上读取用户。 我们使用徽章(可以识别任何Yandex员工的通行证)来识别从壁橱拿走电话的每个人。 员工打开机箱后,可以相信他在机箱中进行了电话的所有移动。
  3. 所有移动信息都集中存储在服务中。 我们会看到每部手机的位置和位置。 我们可以跟踪统计数据:哪些型号更受欢迎,哪些电话不见了。

可以有很多这样的机柜,但是其中所有移动设备上的信息都集中在一个地方。 所有多维数据集(柜)被组合在一起并在逻辑上相连,它们一起形成一个大型的Hypercube(因此该服务的内部名称)。


每个人都喜欢这个主意,我们开始工作。


超立方体。 开始


我们在服务台购买了RFID阅读器和Intel NUC微型计算机。 我们购买了一个arduino,一个电锁,一个用于网络设备的机柜(它比服务器机柜要小,但具有用于固定设备的相同“导轨”)。




当然,我们没有得到传统知识和购物清单。 我们不确切知道哪种机柜模型适合,需要多少螺栓和几米的电线。 内阁的要求根据团队的意愿随时随地更改。 例如,我们同意在一个柜子中存放40部手机,并将其放在床头柜上,因为它很小且不便于倾斜。




手机货架


我们思考了很长时间如何使架子舒适。 Yandex拥有用于展示电话或测试接口的机架。 我们本来打算重用机架,但它们不太适合我们:那里的电话向用户显示屏幕,就像在商店橱窗中一样-我们不需要它。 我们想优化壁橱中的空间,因此我们决定自己制造架子。


有个想法把电话紧紧地放在里面,就像书本一样。 为此,我们在文具店里寻找分隔物,尝试使用CD-ROM支架和商店货架-全部使用。 以实验方式,使用热熔胶将电缆隔断器中的塑料角粘贴到架子上。 事实证明,“书本布局”非常成功,我们喜欢它。




很少的地方和许多枢纽


在机柜的底部,几乎没有空间容纳四个10端口集线器和Intel NUC-我们距离将它们推向那儿的尝试还很遥远。 橱柜门不是用来固定锁的-我们使用了很多热胶,木块和钢锯。 让我提醒您:该项目是由负载测试小组完成的,我们每个人都没有在咖啡店使用磨床的经验。




服务原型


我们很快处理了这个问题:我们制作了一个页面来显示电话的位置,并将其直接放置在我们的负载测试服务中。 仅仅因为它允许您快速而几乎不费力地尝试发生的事情。


第一个工作原型


我们在三周内收集了第一台Hypercube。 他看起来像这样:




最初,我们决定在我们位于莫斯科的Yandex办公室(客户在叶卡捷琳堡)测试原型。 他参加了移动Yandex.Browser团队的试行-我们已经从Yandex Volta项目中认识了她(该报告的更新版本在此处 )。 这些家伙精通功耗。


第一次测试


再次上架


事实证明,热胶不能很好地固定金属架子上的塑料角。 我们回到了电话架的想法。 我想了很久,衣柜里理想的架子应该看起来如何。 现在看来可以在15分钟内绘制它。 最后,结果与第一个草图不太一样,但是这是我当时所画的:




我们拿起购买的服务器机柜架子,然后在顶部放上由我们定做的塑料薄片制成的磨碎隔板。 这种设计一直持续到今天。




集线器不方便


第一个机柜的集线器带有电源开关,没有锁定的按钮,默认情况下处于关闭状态。 因此,每次重新启动后,我不得不用手打开所有四个集线器。 我们连接了Yandex SpeechKit,以便如果集线器飞出时立方体发出声音:“我不好,请致电负责人。” 当有人进来时,声音会告诉您检查集线器。 语音助理开始用打了多少电话的员工的姓名和语音给员工打电话。


锁定问题


城堡有几次迭代。 当我一开始为原型寻找锁时,我发现了唯一适合我的选择-“警长”:小巧,结实,非常机智(我还没有看到类似产品)。 它完美地关闭了,但是要打开壁橱,需要轻按门。 并非所有用户都了解这一点,因此我们决定更改锁定。


他们带着推门的弹簧拿下了“警长”。 内阁完美地打开了-但它开始无法很好地关闭并保持开启状态(并认为自己已关闭)。 这是因为关闭传感器与锁分开安装,门上有间隙,有时传感器一直工作到关门为止。 进行设置是不现实的。


我们再次将锁更改为下一个“ Sheriff”,后者不再具有这种机智的设计,但另一方面,直接在其中内置了关闭传感器。 锁在原型上起作用,但是在第一个机柜中投入使用后,它开始被抓住。 我不得不用铃鼓跳舞:拆卸,润滑,用锉刀锉。 悲痛欲绝,他清盘了。


经过第一次测试后,情况变得很清楚:开发人员和测试人员喜欢机柜,他们会积极使用它。 这很方便:您可以监控设备并在Web服务中搜索合适的设备,而不必问同事:“谁现在有这部手机?”。 我们确定了最重要的问题:您需要用手打开不便的USB集线器,质量不佳的长USB电线(连接器断开,并且电线缠在一起),锁不牢和不可靠的隔板始终掉下来。 工作继续进行。


超空间扩展


项目管理部门的经理(他还帮助我们组织了货架的外包工作)在Yandex中积极从事内部PR:他去了不同的团队,并谈论了我们的出色服务。 我们会见了其他部门的代表,意外地开始收到几十个内阁的内部订单。 出现了一片阴暗的景象:负载测试人员花了数周的时间,整个团队都从手头上手动组装了机柜。


我们意识到我们需要组装方面的帮助。 在此之前,有必要针对小规模生产而优化一个机柜实例的成本及其设计。


见习生


在一个半月的暑假中,我们设法找到了一位懂得如何焊接,钻孔和编码的实习生。 借助它,我们在Raspberry Pi上重新放置了旧机柜(以摆脱昂贵和不必要的Intel NUC),并在莫斯科和圣彼得堡的帮助台上再安装了一个机柜(那里有聪明的人将帮助我们的用户应对原型并提供有用的反馈)。


预算替代方案


为了优化成本,我们更换了原型中最不合理的组件:英特尔NUC微型计算机(2.5万卢布)和RFID阅读器(5000卢布)。 他们在Ali Express上以150卢布的价格找到了另一台阅读器,然后从小型计算机上以3.5千卢布的价格转移到Raspberry Pi。


在新平台上,我们遇到了一些麻烦。 最初,结果证明锁的继电器不切换,因为RPi可以提供3.3 V电压,而机械继电器的设计电压为5V。我不得不切换到固态。 然后我们发现板上没有时钟,并且无法通过NTP花费时间:没有正确的时间,您将无法在办公室网络中进行身份验证(我们找到了一个带有RPi时钟的特殊扩展板)。


最引人入胜的问题是iPhone。 一旦将第六部iPhone插入RPi,它就无法通过网络使用。 一个项目经理经过(过去是一个苛刻的管理员)帮助我们解决了这个问题。 事实证明,RPi上的网卡通过USB离婚了,iPhone挑起了一辆越野车服务来完成USB总线。 这个问题首先出现在明斯克办公室,他们能够快速重现该问题并提供反馈,这对我们有很大帮助。 他们拆除了图形界面时解决了问题(如果我没记错的话),因为该服务已集成到其中。


内阁不断增长


关于内阁大小的辩论。 有人认为有必要在一个人的壁橱里放两倍数量的电话,因为这不便于在办公室中使用。 然后我们发现我们已经从莫斯科商店购买了所有小柜子,下一次交货只需要三个月。 辩论自行结束。


他们决定将以下所有机柜都做大。 展望未来,我会说:事实证明这是正确的决定。 在大型机壳的基础上,放置电子设备变得更加容易;不再有80部电话放在其中。 在它之间的导轨是19英寸的标准服务器。 在小机柜中,导轨之间的距离不够。




Web开发和UX


我们把魔杖刺入了一个内部Web开发框架,意识到它很好,然后将电话板从Django拖到了React。 但是很显然,仅平板电脑并不适合任何人。 地理服务部门在几个屏幕上思考并实现了我们的任务。


我不得不组建一个Web开发团队。 我们分配了一位产品设计师,他充分考虑了用户与服务之间的交互。 他在橱柜上贴了方便的贴纸,将橱柜放在办公室地图上,研究了支持聊天,以便更好地了解用户的需求。 简而言之,就用户体验而言,我是该项目的负责人。


Web开发人员使用了前端并快速实现了设计布局。 我们得到了类似于Yandex.Market的小规模产品:您进来,选择一部电话,然后去壁橱里取货。 梦想很简单。




在这里的某个地方,我们意识到该项目必须推广到整个Yandex。 我们商定了费用,以纠正错误并严重改善服务质量:采购橱柜,备件和工具有总预算。 在铁RnD项目组负责人Pasha Melnikov的帮助下(当时,他现在从事Yandex.Station的工作),我们在考虑到我们的要求的情况下设法与外部公司就串行机柜的生产达成了协议。


集线器的新版本


我们购买了另一个版本的集线器,没有电源按钮。 现在,无需重新启动后就可以爬入机柜内部并打开集线器。 我们手动组装了一个原型-效果很好。 但是,当我们将他送到叶卡捷琳堡时,我们立即开始收到内阁看不到某些电话的投诉。 仅当场理解。 事实证明,新的集线器具有不同的拓扑结构(即使对于不同系列的同一集线器型号,其拓扑结构也可能会有所不同)。


内部的新旧10端口集线器均由三个USB芯片和四个端口组成。 但是在带有电源按钮的旧式集线器中,两个芯片卡在一个芯片中,而在新式中,它们通过“花环”连接。 端口数相同,但是嵌套深度不同。 在嵌套深度较大的端口中未检测到旧电话。 很好,他们很老,不是很必要。 我们通过砍掉头部解决了头部疼痛的问题:我们只是在机柜中采用了较新的电话型号,所以,我们正在等待自己的集线器的实施。 没错,该软件必须能够为不同的机柜设置不同的USB拓扑配置。


自己的集线器


我们与Pasha一起开始开发自己的外部USB集线器。 需要解决购买的集线器的问题,并突出显示用户购买的设备并加快现代电话的充电速度:为此,我们采用了功能强大的电源并维持最新的标准。 集线器具有连接外部温度传感器的能力-因此我们可以在每个机架上对其进行控制。 选择大小后,可以将两个安装在一个机箱中的集线器卡完全装入19英寸服务器机架中。 集线器的外形小巧以节省架子之间的空间-总的来说,它们看上去很酷而且很现代。 Pasha将在Habré上详细介绍该项目。




组装方式


基于采购机柜的组件组装也已外包。 根据我们的计算,组装团队原本应该应付几个晚上,但是由于体力劳动的丰富,它持续了几个星期。 根据在传单上用笔绘制的方案以非标准方式进行连接的电线,手动焊接,缺少现成的用于零件的零件和成品零件本身...机柜的字面意思是完成的:钻出了用于锁孔,并用砂轮机切割了其他零件的图形。


接近生产


我们已经梦想过将橱柜投入生产。 我们认为,有必要加快简化生产并增加外包份额的必要性。


外围板


设计外围板并更新组件。 现在,它通过一根电缆连接到Raspberry Pi,所有其他组件都通过标准连接器连接。


我们在板上设置了一个用于RPi的时钟:早些时候,我们粘贴了一个单独的现成组件,该组件在商店中购买。 我们还放置了一个DC / DC转换器(以前是一个单独的电源单元)和一个RS-485接口:这使我们摆脱了电线网。 以前,我们通过焊接或粘贴到RPi引脚之一来手动将它们逐点连接。 我们检查了图表,查看了电线的入口点,寻找了所需的孔-依次旋转每根电线。 这非常耗时,并且会引发组装错误。 新板使用电话插孔。



后来发现:布线时,我没有考虑到需要将RS-485芯片连接到定义明确的RPi引脚。 我必须更新电路板的版本。 当我拔出RS-485电源去耦组件时,我没有注意到数据表是从底部而不是顶部显示微芯片,并且当我第一次打开它时,它发出带有特殊气味的“砰!”。 我必须为整个第一系列电路板重新焊接电路板背面的芯片。




新柜版


购买的橱柜已不再适合我们。 它们看起来很奇怪,因为它们是针对服务器而不是办公室的,并且还需要手动进行修改。 花了很多时间,结果是手工的。 我们决定在Arzamas的工厂制造自己的橱柜。


我们要求工厂根据其标准服务器机柜组装经过修改的机柜:更改尺寸,安装锁,带出必要的连接器,在孔中固定元件。 他们绘制了架子的草图,为电子部件(RPi和她的朋友)制造了一个盒子,为集线器做了一个盒子。 来到城堡时,工厂的设计工程师对购买的选件进行了少许修改,并且开始工作得更好。 一份带有拉长要求以完成熨斗的错误报告已发送给警长的作者。


现在,所有机柜控制电子设备都集中在一个安装在四个螺栓上的外壳中,这非常方便。 它可以与柜子分开组装,损坏时易于拆卸和更换。






在测试柜中,电线混乱,连接器从集线器中飞出并折断,有时员工会随身携带电线。 我们决定将电线牢固地固定在架子上,同时保留更换电线的能力。 我画了一个草图-工厂用铁把它卖给了我们。





当然,我们去过Arzamas几次:谈判,建立生产,接受结果。 结果,我们几乎已经准备好了机柜,但仍可以继续使用。 但这是另一个故事。




顺便说一句,如果您碰巧参观了Arzamas,请去中心的汉堡:很酷。


在下一个系列中


现在,我们的多维数据集已在公司中得到积极使用。 我们甚至为他们起了个名字:斯坦利·库伯(Stanley Cube),玛吉·库伯(Maggi Cube),阿妮·库伯(Arnie Cube)(阿诺德·施瓦辛格(Arnold Schwarzenegger),六幅),等等。


在不久的将来,同事将与您分享有关服务命运的故事。 例如,关于Yandex.Hub是如何开发的。 或关于集线器的某些端口如何开始变得“​​麻木”的。 在“麻木”端口上,即使在内核消息中也看不到USB设备的断开连接。 但是,如果您将手机从端口中取出并放回原处,则一切正常。 同时,这些家伙正在为您撰写文章-尝试自己猜测为什么会这样。

Source: https://habr.com/ru/post/zh-CN485050/


All Articles