ITPub博客

首页 > 应用开发 > Javascript > 从第一天到生产环境:将Lyft的分析与乘车智能助手打造为入职……

从第一天到生产环境:将Lyft的分析与乘车智能助手打造为入职……

Javascript 作者:ITPUB社群 时间:1970-01-01 08:33:46 0 删除 编辑

从第一天到生产环境:将 Lyft 的分析与行程智能助手作为入职项目构建

由 Lyft 的 Sagar Baronia 撰写。

一种不同的第一天

大多数入职旅程都遵循一条熟悉的轨迹:入职培训、福利登记、设置笔记本电脑,并在最初几周内逐渐找到自己的立足点。我的经历也遵循了这条轨迹,但从一开始就有一条额外的线索与之并行。

我于 2026 年 3 月加入 Lyft,担任营销、业务与广告团队的高级数据科学家——算法方向,带来了近十年的数据科学经验,先是在 Oracle,之后在 Amazon 工作了四年。从我与管理层 Ravi Chandra Babu Ginjipalli 的第一次对话开始,就很清楚我的入职将有一个额外的维度。除了标准的新员工流程外,我还将承担一个真实的生产项目:一个旨在通过实际交付来教我了解 Lyft 系统的项目。

这个项目:从零开始为 Lyft 的分析与行程智能助手——简称 ARIA——构建生产前端。这就是从第一天到在三周内上线生产服务的故事。

Aria:从原型到生产

Aria 是一个 AI 驱动的工具,让 Lyft 员工能够通过自然语言探索行程分析数据。Lyft 内获得批准的用户无需编写 SQL 查询或浏览仪表板,就可以提出诸如“上个月 SF 有多少次行程?”之类的问题,并立即获得答案。

后端智能已经存在。我的团队已经构建了为 Aria 的 AI 智能体提供支持的服务:LangGraph 编排、SQL 生成流水线、语义层,所有这些都已具备。但面向用户的层运行在 Streamlit 上——用于原型开发尚可,但达不到生产级。对于我们团队中少数测试它的人来说还可以,但它无法扩展到整个公司,没有接入 Lyft 认证,并且位于标准服务框架之外。这意味着 Aria 无法从原型升级为 Lyft 其他人员真正可用的东西。

目标是使用我们内部的 Node.js 框架和 Next.js 构建一个合适的 Web 客户端,连接到现有的后端,并具备真实的认证、真实的部署基础设施以及真实的扩展路径。如今,Aria 已被 Lyft 内获得批准的用户积极使用,采用率逐周增长。

入职理念:通过交付来学习

Ravi 对这种以项目为中心的方法的考虑是经过深思熟虑的。在高级别上,加入一家新公司的挑战不是学习一门语言或一个框架——而是理解组织特定的生产生态系统如何协同运作。这里的认证如何工作?部署流水线端到端是什么样子?服务如何被发现、路由和监控?一个需要上生产的前端项目会迫使你在几周内回答所有这些问题,因为如果不回答这些问题,你根本无法交付。

这并不是要跳过标准入职流程。每个周五,我都有专门的时间用于常规新员工培训:合规课程、入职介绍会、每位新 Lyfter 都要完成的清单事项。这个项目是并行进行的,而不是替代入职流程,两条线相互促进。入职材料变得更有意义,因为我对它们有了真实的背景理解;项目推进得更快,因为入职培训填补了我原本需要去询问的空白。

我的入职伙伴 Alex Gao,团队里另一位全栈应用科学家,在最初那段日子里发挥了重要作用——帮助我熟悉代码库、团队流程和公司节奏。

让这一切成为可能的支持体系

一个雄心勃勃的入职项目只有在文化支持它时才能奏效。从第一周开始,Alex 就向我介绍了那些后来成为我日常参考的 Slack 频道:用于所有 Envoy 和 DNS 问题的网络频道(当你配置生产前端时这至关重要),以及前端工程频道,软件工程师、产品设计师和前端专家在那里分享模式和解决方案。

我还被介绍给了跨团队的资深软件工程师,当我遇到仅靠文档无法解决的障碍时,他们的响应非常迅速。前端平台团队的资深软件工程师 Glen Cheney 在我努力让前端和后端之间的流式连接正常工作时尤其有帮助。Glen 没有让我从零开始调试,而是指给我一个已经解决了类似流式模式的现有内部服务。我深入研究那个服务的仓库,追踪它如何处理流式握手并保持连接活跃,然后改编了适用于我们设置的各个部分。原本可能需要数天试错的工作,变成了一个下午的专注阅读,并在当天结束时得到了一个可工作的原型。

这种指导——由经验丰富的工程师帮助你找到正确的参考,而不是重新发明轮子——正是好的入职体验和卓越的入职体验之间的区别所在。

这种跨团队的慷慨并非例外。它反映了一种文化:帮助直属团队之外的人,是 Lyft 工程运作方式的自然组成部分。

第一周:搭建基础

第一个任务是创建 Aria 前端仓库并生成 Lyft Node Service 脚手架。我配置了所有必要的插件——认证、日志、指标、服务客户端——并为聊天界面构建了初始布局外壳。

然后是基础设施工作:用于路由的 Envoy 静态配置、使用 CNAME 记录和 CloudFront 别名的 DNS 设置,以及预发布环境部署。第一个真正的教训很快就来了。一次早期的部署问题让我诊断出认证插件不兼容,我通过切换到更适合我们设置的另一个插件解决了这个问题。部署稳定了下来,到那一周结束时,Aria 的预发布环境已经上线。它还没有做太多事情,但脚手架已经立起来了,而且我对 Lyft 部署基础设施的了解,已经超过了数周阅读所能教给我的。

在项目之外,我在 Lyft 的第一周也有自己的节奏。我参加了纽约入职培训,认识了其他新员工,并开始融入公司文化。还有任何新工作都会有的实际事务:处理好薪资和福利、完成验证文书、设置股权账户和通勤福利。我还花时间配置我的开发环境,熟悉 AI 驱动的编码工具,并提交了我的第一个测试 PR,只是为了了解 Lyft 的审查和合并流程是如何运作的。从各方面来说,这都是充实的一周。

第二周:让系统对话

前端部署到 staging 后,重点转向将其与后端连接。我构建了到 Aria 后端服务的连接层,并开始迭代 manifest 文件变更和部署配置,以使两个服务正常通信。

事实证明,这比预期要复杂。连接不断遇到问题,而通常的本地阅读日志调试方法并不够用。这时 Grafana 成为了无价的工具。通过 Grafana 的日志聚合追踪请求,我能够确定根本原因在于 Envoy 设置——会话配置没有正确连接,这悄无声息地中断了服务之间的连接。一旦问题可见,修复起来相对较快;真正的收获是养成了在感觉不对劲时首先使用 Grafana 的本能——跨服务追踪请求、按时间窗口扫描日志、缩小到链中实际断裂的那一跳。这是我如今几乎每天都依赖的习惯。

本周另一项重要工作是构建用于聊天状态管理的 XState 状态机。聊天交互涉及的状态量惊人:会话 ID、消息序列、流式进度、错误处理、连接生命周期。XState 为我们提供了一种结构化的方式来建模所有可能的转换,并让 UI 即使在网络不稳定的情况下也能保持可预测。

在入职方面,我仍在处理新员工清单中剩余的事项,并熟悉那些让 Lyft 日常工作更顺畅的工具和流程。我还第一次体验了 Lyft Pass——这是在这里工作带来的一个小而有趣的福利。

第 3 周:最后一英里

后端连接稳定后,最后一周的重点是让 Server-Sent Events (SSE) 流式传输端到端工作。这是让 Aria 的聊天界面感觉响应迅速且现代化的关键部分,答案会逐 token 流式传入,而不是作为一整块文本到达。

前端侧流式传输的配置方式出现了一个小问题。SSE 连接通过 Next.js API route 管道传输的方式需要特定设置,而文档中并没有立即说明这一点。在前端平台团队的帮助下,我们让流式传输管道顺利工作。在此过程中,我们还发现来自后端的 token 块大小太大,这让流式传输感觉断断续续,而不是流畅自然。这需要后端侧进行更改,以发送更小、更频繁的块:这是一个很好的例子,说明前端工作常常会暴露技术栈中其他位置的问题。

本周还包括生产环境加固:生产环境中 CNAME 和 CloudFront alias 的 DNS 管理变更、生产虚拟主机的 Envoy 静态配置更新,以及添加测试用例以提高整个仓库的覆盖率。到本周末,Aria 已在生产环境中上线。

到这时,我已经完成了应在第三周前完成的强制性培训,并让自己跟上入职课程和清单事项的进度。我还花时间探索前端未来迭代可能的样子,与 Product Design 进行了早期讨论,并收集团队对他们接下来希望看到什么的反馈。

Aria 前端——已上线

这让我对 Lyft 有了怎样的了解

有一句话常被归于物理学家 Richard Feynman:“我不能创造的东西,我就还不理解。”这一原则不仅适用于物理学,也适用于任何复杂系统。你可以阅读每一份架构文档、研究每一份基础设施指南、参加每一次入职培训,但在你亲自让某个东西通过生产系统之前,仍然无法真正理解它是如何呼吸的。那个不配合的 auth plugin、悄悄中断连接的 Envoy session config、稍微有点大的 streaming chunks——这些都不在任何入职演示中。你只有亲自撞上它们,才能真正学会。

在这个过程中,Lyft 的工程文化有三点让我印象深刻。

内部工具链非常成熟。Lyft Node Service、Envoy、metaservice、InfraDocs——这些不是纸上谈兵的框架,而是维护良好、文档完善的系统,新工程师从第一周起就能真正在其上构建。那些“入门”指南确实能让你顺利上手。

跨团队支持是真诚的。其他团队的资深工程师会回答我的问题、审阅上下文,并帮我调试那些不在他们直接职责范围内的问题。这反映了一种文化:帮助自己团队之外的人在 Lyft 的工程运作中是自然而然的事。

文档文化是真实存在的。指导这个项目的高层设计文档、前端平台文档、基础设施参考资料——它们都是我每天使用的真正的工作文档,而不是在 wiki 里积灰的摆设。

Aria 的下一步

前端只是开始。未来的路线图包括:用图表进行数据可视化以提供更丰富的分析响应、增强聊天历史管理、归档聊天检索,以及用于专业数据展示的自定义渲染组件。每一项都建立在现已就位的基础设施之上:部署流水线、状态管理模式、流式架构。

Aria 已经在帮助 Lyft 员工比以往更快地获取数据问题的答案。下一阶段是让这些答案更丰富、更具可操作性。

结语

理解一个生产系统最好的方式就是通过它交付一些东西。三周、一个新服务,以及对 Lyft 工程生态系统的理解——比任何课程单独能提供的都要深入得多。我感谢 Ravi 设计了这样一个入职流程,从第一天起就信任我能产生真正的影响;感谢 Alex 作为出色的入职伙伴;感谢 Glen 在我卡住时为我指明正确的参考资料;也感谢 Lyft 每一位回复了那个新来的、又对 Envoy 配置有问题的同事的 Slack 消息的工程师。

当入职流程给某人一个真正的挑战,指引他们找到正确的渠道,并信任技术和人的系统来支持他们时,结果不仅仅是一个交付的项目——而是一个真正理解公司如何运作的新员工。


转载声明:本文为转载整理,原文版权归原作者及原站点所有。

原文来源:Lyft Engineering Blog

原创地址:https://eng.lyft.com/from-day-1-to-production-building-lyfts-analytics-rides-intelligence-assistant-as-onboarding-5c5643c192d9?source=rss----25cd379abb8---4

原文作者:Sagarbaronia;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-11-21

  • 博文量
    1148
  • 访问量
    548767