Charles R. Martin & Ben Popper
我们谈论了使SpaceX公司的火箭飞行的软件,保证代码正确无误的测试团队,还有帮助星链卫星之间以及与用户通信的代码。在上一条,我们的主题是这些团队的工作是如何帮助航天器建造的。应用软件团队会为火箭制造的每个阶段都量身打造相应的ERP系统。一位软件工程经理Anthony Rose谈到,“我们的一项职责是,开发公司里几乎每个人都会用到的软件,覆盖航天器竖立在发射场前的流程。包括供应链、财务、制造、仓储管理等”。
从采购到接收原材料、创建和执行建造航天器的指令、质量跟踪和变更管理、还有实现发射一枚火箭的过程,这套系统需要足够的健壮,能处理从制造到猎鹰9 发射的所有事务。火箭会运送货物或人员前往国际空间站,也可以送卫星入轨,可靠性是首要考虑点。
“一个软件中的例子是,一个管理分系统说某个部件存在于工厂里,那么,它在哪里的系统会帮助这个部件移到它需要在的位置,并且这都是为了尽可能高效的制造火箭。另外一个例子是,我们如何进行管理变更和缺陷跟踪。我们不得不小心的跟踪某个部件与其它部件的关系,以及在一项设计中缺陷或变化是如何回溯的,还有它是如何影响航天器的其它部分。” Rose解释道。
软件栈 — 从monolith到microservices
Steven Sepanloo是团队中的一名软件工程项目经理,谈到了在他4年半的SpaceX公司工作经历中是如何转变的。“直到最近它都一直在演变推进但不是革命性的。4年前我们有AngularJS、C#
以及MSSQL,这和一个标准的单页面web程序差不多。这些程序都还在那儿,但研发新的程序时我们转向了AngularJS。” 团队也开始使用容器化,开发microservices,同时从SQL服务转向,以利用PostgreSQL的好处。
作为应用软件团队中的高级经理,Kyle Madonia 已经在SpaceX工作了7年半,说道:“当我们开始时,我们才从ASP.NET转而使用 Knockout JS,这是在Angular之前的事。”
在那时SpaceX使用的monolith程序中,有一些是在自有的JS框架中而其它的开始转而使用Knockout JS。“在2014年,我们开始开发了一个新的架构。有趣的事情是,我们老的解决方案叫DS9,而新的叫TNG,因为我们的团队喜欢Star Trek。” Madonia 笑着说道。随后团队开始使用 Angular JS并且考虑要用microservices。
“monolith中的一个问题是,你不得不把所有的东西部署在一起。如果在我们的工作场所系统中有某些东西损坏了,但当我们有大的变化,我们想要释放库存系统,我们将不得不等待这些变化部署完成,” Madonia说道,“我们处于每周发布的节奏,我们需要做的更快。” 为了达到目标,团队集中精力于改变操作,将老程序的维护工作最小化。
在2019年,当为SpaceX的星链开发系统的工作成为现实时,团队看到了机会能走的更远。“我们想要一个新的制造执行系统,因为制造卫星天线将不同于制造火箭。举个例子,我们不需要整个的工作场所程序,” 她说道。团队开始在Warp Drive以外开发,monolith ERP系统已经用了多年。“它使用ActiveMQ来进行同步的API请求,而且它是与主系统无关的。”
团队为工作于卫星星座的操作开发了完全独立的系统,一个新的遥测系统,以及所有的面向星链用户端的App软件。“每个服务都是独立的,并且有具体的规则来管理它们间的通信和依赖。你总是能使用APIs来得到你想要的信息,但是每个服务都没有与其它东西绑定。”
向上,向上
对于专注于航天器以外的软件团队而言,大的变化只是他们使用的编程语言,以及他们所支持的项目的多样性。“对我来说有趣的事是,我们已经从本质上衡量了四个并行的商业项目:猎鹰火箭运载的商业载荷,载人龙飞船,全球 络服务—星链,还有星际航行飞船—星舰,” Sepanloo说道 。噢,不要忘了位于德萨斯的星舰基地的开发。大量的创新已应用在我们如何工作和如何支持不同的商业线上。我们总的人数没有增加,取而代之的是,我们在设法变的更高效。举个例子,我们让工程师们与问题靠的更近,以此来尽可能缩短理解问题、找到健壮的解决方案的时间。
我们鼓励工程师们提出什么样是应该做的,解释商业原型 — 它有什么影响以及为什么它值得去做,然后开发一个可扩展的、有性能的解决方案,它能解决端到端的问题。“那是一个非常有效的处理,类似于你可能认为要增加开发一个启动模块。” Sepanloo说道。“我们真的集中精力于将我们的工程师们尽可能的接近于实际的系统。”
就像Rose解释的,团队支持星链的诀窍在于提出“ 你如何以公司为中心,而公司又集中精力建造高度定制的航天发射器。” 让他的软件工程师们熟知生产装配线,这些装配线将生产星链,他将工程师们与第一线移的更近。
“从历史上说,他们与其它的软件团队坐在主建筑物内 — 它与火箭装配工厂在同一栋建筑内,但是我们在不同的楼层。而现在,我的团队就刚好紧邻星链生产线。我们已经将每个人都移到了这里,这样我们就能在同一条生产线上,以便理解它,并且将相关流程开发进系统里,这是与很多别的软件工程师的不同之处,” Rose说道。“我们实际上已经换班到生产线上不同岗位体验过,所以我们能真正的理解面临的挑战是什么。自那时起,我们就已经有能力去开发一些创新性的解决方案 — 并且这样的事情只是冰山一角。”
数据,数据,无处不在 — 或不是
星链不只是引入了制造过程中的新的思维,而且围绕数据提取和存储也产生了新的点子。“当你第一次尝试某些新事物时,好比你改变了火箭的基本配置,同样重要的是要有能力去分析那些数据,” Sepanloo说道。SpaceX已经成功实践了可回收火箭的想法,它在飞行中产生数据,而且特别有趣。火箭第二级被抛掉了,但第一级和整流罩是可以回收的。“我们的航天器不再是昂贵的,我们已经让一枚助推器飞了9次,对我们而言是一个里程碑。对于理解硬件设备来说,数据是作为正在增加的飞行概率的功能,这是非常重要的。”
就连处于开发测试中的操作也会产生关键的数据。“当星舰原型SN10硬着陆时(实际是令人兴奋的),人们以为我们会不高兴,但是其实我们在庆祝,” Madonia说道。“我们做了如此多成功的演练,我们也有能力去收集如此大量的有价值的数据,而它们将帮助我们的下一次尝试。”
说到星链,需要用一个不同的办法。与火箭发射处理数据不同的是,它们有一个清晰的开始、结束时间,卫星和 络是恒定的数据流。当团队已经有一个火箭的数据仓库时,他们为星链创建了一个新的遥测数据仓库,使用了 .NET 5、Kafka、HBase, HDFS, Docker, 和Kubernetes。该系统被设计成可以水平测量,以便能适应一个非常大比例的遥测用户用例,但是团队对于只保持必要的最小数据量仍然保持警惕。这个策略是为避免在一大堆数据中做分析时陷入停滞,取而代之的是,只采集需要的数据,分析它,然后再次尝试。
探索太阳系
Rose和Sepanloo每日忙于建造太空飞行器的具体细节,但是他们并没有失去眼界,其软件能够承担宏大的任务。“我认为接下来SpaceX有趣的事情是一些大目标。 为了达到在火星上自我发展这一目标,需要的航天器的数量要在一个未曾见过的制造节奏上,而我们正在尝试去做。” Sepanloo说。
正如他们所看到的,制造这些东西很难,我们也在建造那些呈现出挑战的东西。
从团队为星链创造出智能工厂,到卫星与 络的自动化工作,为做到很棒的星链用户体验,这需要有创新性的解决方案,才能保证这套系统能处理2021年的发射清单,我们并不缺乏令人鼓舞的项目。“每一年,我都保持思考,这些东西将是让SpaceX如此令人兴奋的一年。” Madonia说,“每年都是,但我又想了下,下一年也还会是!当我在这里开始,我从未想象过我会从事于创造出全球ISP( 络服务提供商)的软件上,它将Internet带给以前到达不了的地方。”
团队希望能快速地让系统自动化,尤其是当机器变的越来越复杂时。“那实际上是我在想很多酷的创新点的地方,它将指引我们建造出整个的星际舰队,以及操纵多样的太空港。” Sepanloo说,“对于我们团队来说这是很酷的机会,我们着眼于开发出正确的系统来连接数字世界与真实世界。”
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!