2021年7月6日

从 Sequelize 迁移到 Prisma 如何助力 Invisible 实现规模化发展

Invisible 是一家 B2B 效率型初创公司,通过 Worksharing 帮助用户自动化和外包任何复杂的流程或业务过程。Prisma 在帮助 Invisible 确保其技术栈的未来适用性并支持其规模化发展方面发挥了关键作用。

How migrating from Sequelize to Prisma allowed Invisible to scale

Invisible:操作效率和自动化解决方案

在过去的一年里,许多公司越来越清楚地认识到,仅仅实现数字化还不足以实现业务转型。企业需要建立一个专注于操作效率和自动化的数字化转型战略。这对于提高生产力和效率,并在对客户体验要求不断提高的市场中保持竞争力至关重要。

Invisible 出现之前,企业依赖 BPO(业务流程外包)来实现操作效率,依赖 RPA(机器人流程自动化)和其他工具来实现自动化。

然而,这些解决方案单独来看都是不足的。每个企业都有定制且复杂的业务流程,许多 RPA 的“一刀切”方法无法解决这些问题。同样,将业务外包给 BPO 可能避免了为内部资源创建新流程、培训计划等的需要,但它仅适用于支持相对简单、大规模的工业流程。

Invisible 利用 Worksharing 解决了这个问题。它结合了 BPO 和 RPA 的优点,同时保留了人类判断的关键要素。

卓越运营和自动化是 Invisible 的基因。我们正在将知识工作工业化,将一切分解到最小的组成部分,将一切转化为流程,构建工具并协调激励措施。这是通过 Invisible 的数字流水线实现的:客户可以在 Invisible 在线门户上选择预建的业务流程,或者使用我们提供的可用“构建模块”构建自己的自定义流程。

斯科特·唐斯斯科特·唐斯,Invisible 首席技术官

选择 Prisma 提升内部效率

Invisible 通过确保其内部遵循相同的原则来保障客户的操作效率和自动化:他们选择能够帮助开发者节省时间的技术,同时确保其技术栈的未来适用性。

这就是为什么高级软件工程师 Pieter Venter 在设计 Invisible 新技术栈时选择 Prisma 的原因。当 Pieter 加入 Invisible 并评估其技术栈后,他决定需要进行全面重构,为平台未来多年的发展奠定坚实基础。

使用 Prisma 可以让 Invisible 团队做到以下几点:

  • 快速演进其 schema,根据市场需求添加新功能和流程
  • 在编写后端所需的自定义逻辑时具有灵活性
  • 对使用的工具充满信心,无需担心持续维护和故障排除

最初,Invisible 使用的是 Sequelize,它提供了强大的 TypeScript 类型支持,但创建模型需要大量的样板代码。此外,类型定义和实际类型不会根据查询选择而更新。他们也考察了 Hasura,但它最终未能满足他们的期望,因为它缺乏后端自定义逻辑所需的灵活性。

Prisma 是理想的解决方案

  • 它为 GraphQL 实现而构建
  • 它使用基于查询选择推断出的类型,在客户端提供自动生成的类型
  • 流畅的 API 对于开发者来说非常易学,有助于开发新的现代化查询引擎

在正在运行的应用中从 Sequelize 迁移到 Prisma

对于 Invisible 来说,从 Sequelize 迁移到 Prisma 的过程非常轻松顺利

团队创建了一个 Prisma 客户端,与他们在 Heroku 上托管的单体 API 服务器中使用的 Sequelize 客户端并行运行。他们使用 Prisma 的 introspect 功能基于现有数据库构建了一个新的 Prisma 文件,最终该文件与他们之前的 schema 非常相似。

同时,他们还创建了一个新的无服务器 GraphQL API(使用 Postgres 托管在 Vercel 上),该 API 只使用 Prisma,没有 Sequelize 的遗留负担。简单的数据模型和业务逻辑被快速轻松地迁移到了新的后端。

高并发请求也被迁移到了新的无服务器函数,以减轻旧 API 服务器在 Heroku 老旧 dynos 上的负载,并允许他们在 Heroku 上缩减规模。

目前,所有新的核心数据模型都在新仓库的 Prisma schema 和新的 Postgres 数据库中构建,所有剩余的旧查询正在慢慢从 Sequelize 和 Heroku 迁移出来,目标是在年内完全淘汰它们。

这种循序渐进的方法使得 Invisible 得以继续拥有数百名代理商全天候、不间断地在全球各地无缝工作,并确保他们的客户没有经历任何停机。

虽然他们本可以选择在一周内完成迁移,但他们决定循序渐进,以便他们能够继续开发新功能,并利用 Prisma 更快地发布这些功能。

Invisible 的技术栈

Invisible 在各处都使用 TypeScript,这使得他们能够实现从数据库到前端的 100% 类型安全代码,而无需维护类型。他们的技术栈包括一些 React 应用 (NextJS) 和 Nodejs 后端 API 服务器。他们在 Postgres 中使用 Prisma,数据模型具有高度关系性。

他们目前的技术栈包括:

与 Sequelize 甚至 TypeORM 相比,Prisma 的类型安全 ORM 方法提升到了新的水平。tRPC + Prisma 的组合简直太容易上手了!它提供了完整的类型安全,无需编写和维护任何代码生成或复杂的类型和接口。Prisma 生成类型,tRPC 使用并传递它们,我们甚至不需要维护任何 API 服务器。借助 Nextjs 和 Vercel,我们还获得了出色的开发者体验和用户体验,而且成本仅是我们运行自己的有状态服务器通常需要支付的一小部分。

Pieter VenterPieter Venter,Invisible 高级软件工程师

目前,Invisible 团队正专注于将 Heroku 上的单体 API 重构为一系列无服务器函数,托管在 Vercel 上。此外,他们用 tRPC 替换了 GraphQL 和 Apollo,tRPC 是 React Query 的一个轻量级封装,同时处理客户端和服务器的获取逻辑。这极大地简化了他们的技术栈,并将实现更快的特性开发和更可靠的数据库增量更改

Prisma 与他们新的微服务架构无缝协作,并已被抽象到一个独立的库中,可以在需要数据的服务之间共享。Prisma 会根据无服务器函数的需求自动打开和关闭数据库连接。请查看 世界上最糟糕的泳池派对:Prisma 的连接管理——Martina Welander 关于该主题的演讲!

Invisible's tech stack before and after Prisma

Invisible 的工程文化

Invisible 真正践行了跨部门的责任文化,尤其是在工程团队中。以下是 斯科特·唐斯,Invisible 首席技术官,对团队内部共享责任感的描述:

我们所有的伙伴(“员工”这个词被禁止使用!)都认同透明的、基于绩效的模型,每个人随着时间的推移都能获得有意义的股权,我们的薪资和奖金直接与业务绩效挂钩。每个人的工作都直接影响并塑造着公司的发展方向和成功。

斯科特·唐斯斯科特·唐斯,Invisible 首席技术官

从 Pieter 的工作中尤其可以看出这一点:Pieter 独自评估了之前技术栈的缺陷,并承担了设计一个全新的、可扩展且面向未来的解决方案的责任。

如果您想加入完全远程工作的 Invisible 团队,请在此处查看所有空缺职位 这里

结论

过去一年,Invisible 的收入翻了两番,因为越来越多的公司意识到了提高效率和自动化的重要性。依赖 Prisma 这样的技术使得他们能够保持敏捷性和可扩展性,并确保能够满足客户不断增长的需求。

采用 Prisma 使 Invisible 能够比以前更快地部署更改,确保他们能够继续为团队提高效率,同时为客户降低成本。

要了解 Prisma 如何帮助您的团队提高生产力,请加入 Prisma Slack 社区

不要错过下一篇文章!

订阅 Prisma 新闻通讯