主动恢复服务或Innopolis一项工业项目的历史

哈Ha! 我叫Roman,今天我想谈一谈Innopolis大学如何为Acronis Active Restore系统开发测试平台和服务,该系统应很快成为公司产品线的一部分。 每个对大学如何与产业合作伙伴建立关系感兴趣的人,我都请您继续学习。

图片

Active Restore的开发始于Acronis内部,但作为Innopolis大学的学生,我们作为工业培训项目的一部分参与了此过程。 我的策展人(现在是同事)Daulet Tumbaev 在他的帖子中已经写过关于这个想法以及建筑的文章 。 今天,我将谈谈我们如何准备Innopolis的服务。

一切始于夏天,当时我们得知在第一学期,IT公司会来找我们,并为实际工作提供他们的想法。 因此,在2018年12月,我们获得了15个不同的项目,在月底我们确定了优先事项,以找出谁最喜欢。

所有的本科生都填写了一个表格,其中有必要选择我们要参与的四个项目。 有必要激励我为什么以及为什么要进行这些项目。 例如,我指出我已经在C / C ++中进行系统编程和开发的经验。 但最重要的是,该项目使我得以发展自己的技能并不断发展。

两周后,我们被分配了,从第二学期开始,就开始了项目工作。 团队成立了,在第一次会议上,我们评估了彼此的优缺点,并分配了角色。

  • Roman Rybkin是Python / C ++开发人员。
  • Eugene Ishutin-Python / C ++开发人员,负责与公司进行交互。
  • Anastasia Rodionova是负责编写文档的Python / C ++开发人员。
  • 布兰登·阿科斯塔(Brandon Acosta)-搭建环境,为实验和测试做准备。

前两个星期,我们必须开始这一过程。 我们与客户建立了联系,正式确定了项目要求,启动了迭代过程,并建立了工作环境。

顺便说一句,当我们开始选修课时,我们与客户的合作真的开始沸腾了。 事实是,Acronis领导着Innopolis大学(不仅是)所选择的学科。 内核团队的领先开发人员Alexey Kostyushko持续教授两门课程:逆向工程以及Windows内核体系结构和驱动程序。 据我所知,将来还将计划开设有关系统编程和多线程计算的课程。 但是最主要的是,所有这些课程的设计方式都可以帮助学生应对工业项目。 他们认真地理解主题领域,从而简化了项目工作。

因此,我们比其他团队更加努力地开始工作,并且与Acronis本身的互动更加紧密。 Alexey Kostyushko担任产品负责人的代理人,从他那里我们获得了主题领域的必要知识。 多亏了他的选修课,我们的艰苦技能和能力得到了极大的提升,我们真正准备好完成面对我们的任务。

从思想到项目


所有团队的第一个月都尽可能地艰难。 每个人都迷路了,不知道从哪里开始-也许是带着文档,或者相反,是陷入代码。 最初,大学和公司代表的策展人和导师提出了相互矛盾的意见。

当一切都准备就绪(至少在我的脑海中)时,很明显,大学的导师帮助我们在团队中建立了内部关系并准备了文件。 但是真正的突破点是三月Daulet的到来。 我们整个周末只是坐下来工作。 然后,我们重新考虑了项目的实质,重新启动,重新分配了任务的优先级,并迅速前进。 我们了解开始实验(稍后再做)和开发服务需要做什么。 从那时起,总的想法变成了明确的计划。 代码的真正开发开始了,在两周内,我们开发了测试平台的第一个版本,其中包括虚拟机,必要的服务以及用于自动化实验和收集数据的代码。

值得一提的是,与工业项目同时进行的培训课程帮助我们为项目建立了称职的架构并组织了质量管理。 最初,这些任务每周花费70-90%的时间,但是事实证明,需要时间来避免开发过程中的问题。 该大学的目标是,我们学会熟练地建立开发流程,而作为客户的公司对结果更感兴趣。 当然,这带来了很多混乱,但有助于将理论和实践技能结合在一起。 足够的复杂性和负担确保了动机的存在,从而导致了项目的成功。

最初,我们团队中的两个人从事纯开发,一个人接管了文档,另一个人则投入了环境的搭建。 但是,后来又有3个单身汉加入了我们,并与他们成为了一个团队。 大学决定为第三学年的学生启动一个工业测试项目。 将团队从4人扩大到7人极大地加快了这一过程,因为我们的单身汉可以轻松地执行与开发相关的任务。 Ekaterina Levchenko帮助编写了用于测试台的python代码和批处理脚本。 Ansat Abirov和Ruslan Kim担任开发人员,他们从事算法的选择和优化。

我们一直以这种格式进行工作,直到5月底启动实验为止。 此刻,单身汉的工业项目结束了。 他们中的两个人开始了Acronis实习并继续与我们合作。 因此,5月以后,我们已经组成了一个由6个人组成的团队。

在我们面前的是第三学期,在Innopolis的这门课没有学术活动。 我们只有2个选修课,其余时间都花在了一个工业项目上。 在第三学期,这项服务的工作量很大。 开发过程完全落在了轨道上,演示和报告变得正常。 在这种格式下,我们工作了1.5个月,到7月底,我们几乎完成了工作的开发部分。

技术细节


首先,制定了一项服务要求,该要求应与文件系统微型过滤器驱动程序(可以在此处阅读)充分交互,并考虑其体系结构。 考虑到进一步的代码支持的简便性,我们立即提供了一种模块化方法。 我们的服务包括几个经理,代理和处理程序,甚至在开始编码之前,就已经具备了以并行模式工作的能力。

但是,在与Acronis成员开会时讨论了体系结构之后,决定先进行实验,然后再进行服务本身。 结果,开发仅用了2.5个月。 在其余时间中,我们进行了一项实验,以找到可以运行Windows的文件的最小列表。 在实际系统中,这组文件是使用驱动程序生成的,但是,我们决定使用半除法试探性地找到该文件集,以检查驱动程序的运行情况。

图片
实验的立场。


为此,我们将来自两个虚拟机的Python放在一起。 其中一个在Linux上工作,第二个在Windows上工作。 为它们配置了两个磁盘:Virtual HD1和Virtual HD2。 两个驱动器都连接到安装了Linux的VM1。 在HD1的该虚拟机上,安装了Killer应用程序,该应用程序“损坏”了HD2。 损坏是指从磁盘上删除某些文件。 HD2是适用于Windows的VM2的启动磁盘。 在磁盘“损坏”之后,我们尝试启动VM2。 如果可以这样做,则认为从磁盘删除的文件不需要运行。

为了自动执行此过程,我们尝试了不随机删除文件,而是将其作为预先考虑的方法的一部分。 该算法包括3个步骤:

  1. 将文件列表一分为二。
  2. 删除一半文件之一。
  3. 尝试启动系统。 如果系统已启动,则将已删除的文件添加到不必要的列表中。 否则,我们返回到步骤1。

首先,我们决定对算法进行仿真。 假设文件系统中有1,000,000个文件。 在这种情况下,最重要的搜索是在关键文件占总数的15%的情况下进行的。

图片
半分割法。

首先,该实验存在很多问题。 准备2-3周的测试台。 还有1-1.5个月,我不得不捕捉错误,添加代码并应用各种技巧来使立场正常。

最困难的事情是捕获与缓存磁盘操作相关的错误。 实验进行了2天,产生了非常乐观的结果,比模拟快了好几倍。 但是,关键文件测试失败,系统无法启动。 事实证明,在强制关闭虚拟机期间,没有执行文件系统缓存的删除操作,因此,磁盘没有完全擦除。 结果,该算法收到了不正确的结果,并且在几天的时间里,我们竭尽全力地将所有卷积弄清楚了。

在某个时刻,我们注意到在连续操作期间,该算法被埋在文件系统的其中一个段中,并开始尝试删除相同的文件(以期获得新的结果)。 当算法停留在最需要的区域,同时选择错误的删除间隔时,就会发生这种情况。 至此,我们决定添加一个改组文件列表。 也就是说,经过几次迭代,文件列表被重新排列。 这有助于使算法摆脱困境。

一切准备就绪后,我们将这两个VM启动了3天。 总共进行了约600次迭代,其中有20多次成功启动。 显然,该实验可以运行很长时间,也可以在功能更强大的计算机上运行,​​以找到运行Windows的最佳文件大小。 此外,该算法可以分布在多台计算机上,以进一步加速此过程

在我们的案例中,除了Windows,磁盘上只有Python和我们的服务。 在三天内,我们设法将文件数量从7万减少到5万。 文件列表仅减少了28%,但是很明显,这种方法是行得通的,它使您可以确定加载操作系统所需的最少文件集。

服务架构


让我们来谈谈一些服务结构。 主要服务模块是队列管理器。 由于我们从驱动程序获得了文件列表,因此我们需要从该列表中还原文件。 为此,我们创建了优先事项转弯。

图片

我们有依次还原的文件列表。 并且,如果出现新的访问请求,则优先还原紧急需要的文件。 因此,在队列的开头将有用户现在真正需要的那些文件,而在队列的末尾将是将来可能需要的那些文件。 但是随着用户的积极工作,可以形成“非凡对象队列”,以及当前正在还原的文件列表。 此外,搜索操作应该已经一次应用于所有这些队列。 las,我们没有找到可以在支持搜索以及动态更改优先级的同时设置几个文件优先级的队列实现。 我们不想适应现有的数据结构,因此我们不得不编写自己的数据并建立使用它的能力。

图片

我们的服务需要首先与Daulet所使用的驱动程序进行通信,然后再与负责还原文件的组件进行通信。因此,对于初学者来说,我们决定创建自己的恢复系统小型仿真器,该仿真器可以从外部驱动器发布文件,以便可以恢复并测试服务。

总共提供了两种操作模式-正常模式和恢复模式。 在正常模式下,驱动程序向我们发送受操作系统启动影响的文件列表。 然后,在系统运行时,驱动程序监视所有文件操作,并将通知发送到我们的服务,然后依次更改文件列表。 在恢复模式下,驱动程序会通知服务系统恢复是必需的。 该服务将文件排队,运行从备份请求文件的软件代理,然后开始恢复过程。

文凭,工作邀请和新项目


服务准备就绪并经过测试后,我们就完成了该项目的最后一个活动。 有必要更新和构建我们积累的所有工件,并将结果展示给客户和大学。 对于公司而言,这是向项目实施迈出的又一步,对于拥有毕业论文的大学而言。

演讲之后,向学生们提出了一个建议。 几周后,我去了Acronis。 该项目的结果使开发人员认为,可以通过将服务降低到本机Windows应用程序级别来提高服务效率。 但是在下一篇文章中会对此进行更多介绍。

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


All Articles