2021年4月19日

iopool 如何在不到6个月的时间内用 Prisma 重构他们的应用程序

2020年,iopool 意识到他们的架构正在拖慢他们的速度,并阻碍他们创新。他们决定转向 Lambda 函数和由 Prisma 提供支持的关系数据库。继续阅读,了解这如何帮助他们快速而自信地前进,并大大简化了他们的开发过程。

How iopool refactored their app in less than 6 months with Prisma

在一个炎热的夏日,没有什么比跳进一个美丽的蓝色泳池来降温更棒了。同样,没有什么比想跳进去却看到泳池是黏糊糊的绿色、长满了藻类,根本不适合游泳更糟糕的了。更令人烦恼的是,还需要手动测试,了解如何调整 PH 值,校准添加的化学品量等等。

这就是 iopool 的用武之地。他们为私人泳池、按摩浴缸和热水浴缸提供完整的泳池管理解决方案,从复杂的泳池传感器和移动应用程序开始,并包括保持泳池清洁和安全所需的所有产品。

技术债务

2020年,iopool 的工程师意识到他们正面临一些严重的技术债务挑战,这使得公司技术栈的未来面临风险。iopool 的首席软件工程师 Luc Matagne 认识到这些技术挑战的严重性。用他的话来说,“那是一场开发人员的噩梦”。

项目中共有16个微服务。文件结构、代码结构和工具存在很多差异。所有数据都存储在一个带有“假关系”的 NoSQL 数据库中。锦上添花的是,你无法在自己的机器上本地运行所有服务。每个服务都需要部署到云端才能进行测试。

Luc 知道这种架构会阻碍 iopool 的未来发展,于是提出了一系列针对 iopool 后端新版本的全面改革。这包括拆除单独的微服务,切换到关系数据库,以及其核心,实施 Prisma。

Prisma 之旅

Luc 并没有将 iopool 的版本1视为失败。相反,它表明了他们对 LIT(学习、迭代和测试)方法的承诺,使他们能够将其视为一次学习,并从头开始重构应用程序设计、后端和代码。

许多开发团队听到“重构”都会畏缩,考虑到所需的时间和精力,这是理所当然的,但 iopool 还有一个额外的障碍:他们需要在不到六个月的时间内重构一个耗时两年的产品。他们还必须及时完成,以便赶上将于六月开始的下一个旺季。

iopool architecture before Prisma

iopool 在选择 ORM 时有五个要求

  • 速度 → 学习曲线应该很小甚至没有,并且应该尽快实现。在一周内,他们就建立了一个正在运行的数据库,并获得了对其所有数据的类型安全访问。通过使用 Prisma Schema 来构建数据库,他们能够快速迭代不同的结构,从一开始就获得最佳数据库。“没有 Prisma,我们永远无法及时准备好 iopool 2.0”。

  • 灵活性 → 他们必须发布许多新功能才能保持竞争力。Prisma 和 Nexus 的结合使得解析器的管理变得轻而易举。一切都始终易于访问。

  • 易用性 → 他们移除了微服务之间复杂的路径,这些路径需要理解数据流向(或未流向)何处。Prisma 在轻松获取所需数据方面非常有帮助。

  • 可靠性 → 在开发的前两年中,他们缺少单元测试。他们终于能够将单元测试添加到后端中的每个流程。将 Prisma Client 引入测试过程非常容易,并且大大提高了代码库的可靠性。“现在每次提交新代码后,我们都可以安然入睡,使用 Prisma,错误率非常小”。

  • 舒适性生产力 → 他们现在能够使用本地服务器实时测试他们的功能,而且 Prisma 提供了开箱即用的支持。这对他们来说是巨大的生产力提升。

新的技术栈

确定了要求后,iopool 着手使用全新的技术栈开发其后端的版本2。

新的技术栈依赖于流行的技术,例如 React Native、GraphQL(使用 Apollo)、Postgres 和 DynamoDB。在版本2中,Prisma 扮演着关键角色。

iopool architecture after Prisma

大幅升级的 iopool 版本2广泛使用了通过 AWS Lambda 实现的无服务器函数。Nexus 用于提供 GraphQL API,该 API 从 React Native 应用程序调用。Prisma Client 用于访问 iopool 用于除水质数据之外所有事务的 Postgres 数据库。对于收集到的海量水质数据,选择 DynamoDB 是因为它能够轻松处理这种大规模的数据。

在版本2中转向使用 TypeScript,特别是 Prisma 和 Nexus,已经取得了丰厚的回报。iopool 现在能够每周发布两次或更多次,而不是像以前的微服务架构那样每两三周发布一次。以前需要数周开发时间的功能已缩短至数天。

因为我们找到了 Prisma,所以我们决定开始对整个项目进行重构。我们知道 Prisma 会帮助我们更快、更自信地完成,尤其是在我们重构时间有限的情况下。

开发周期的改进在很大程度上归因于 Prisma 提供的类型安全。iopool 的开发人员在使用 Prisma Client 进行数据库访问调用时,能够获得智能感知、自动补全和类型检查,这对于速度提升至关重要。

Prisma Migrate 在 iopool 的版本2升级中也起到了关键作用。Migrate 让团队对数据库模式更改的方法充满信心,允许多个开发人员协作处理一个中央模式,并使更改在不同环境中无缝应用。

当我们编辑或更改模式时,我们知道如果使用 Prisma,它就能正常工作。

结论

iopool 的后端版本2开发体验非常顺畅,这在很大程度上要归功于 Prisma 处于核心地位。Prisma 让他们的开发人员能够更快地行动,实现版本1难以实现的新功能,并为公司的未来带来了新的可能性。

要了解 iopool 如何成功使用 Prisma,以及了解更多关于 Prisma 本身的信息,请查看以下资源

不要错过下一篇文章!

订阅 Prisma 新闻通讯

© . This site is unofficial and not affiliated with Prisma Data, Inc.