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 資料庫中。更糟糕的是,您無法在自己的機器上在本機執行所有服務。每個服務都需要部署到雲端才能進行測試。

了解到這種架構會對 iopool 未來的成長造成問題,Luc 提出了一系列針對新版 iopool 後端的重大變更。其中包括移除個別的微服務、切換到關聯式資料庫,以及最核心的,實作 Prisma。

Prisma 之旅

Luc 並不認為 iopool 的版本 1 是一個失敗。相反地,它展現了他們對 LIT(學習、迭代和測試)方法的承諾,讓他們將其視為一種學習,並開始從頭重構應用程式設計、後端和程式碼。

許多開發團隊聽到「重構」會感到畏縮,考慮到所需的時間和精力,這是理所當然的,但 iopool 還有一個額外的障礙:他們需要在不到六個月的時間內重構一個花了他們兩年時間開發的產品。他們還必須及時在六月開始的下一個旺季之前完成。

iopool architecture before Prisma

iopool 在選擇他們的 ORM 時有五個要求

  • 速度 → 應該幾乎沒有學習曲線,並且應該盡快實作。在一週內,他們就有一個資料庫在運作,並且可以對所有資料進行類型安全存取。透過使用 Prisma Schema 來建構他們的資料庫,他們能夠快速迭代不同的結構,從一開始就獲得最佳的資料庫。「如果沒有 Prisma,我們永遠無法及時準備好 iopool 2.0」。

  • 靈活性 → 他們必須發布許多新功能才能保持競爭力。Prisma 和 Nexus 的結合使解析器的管理變得輕而易舉。一切都始終易於存取。

  • 易於使用 → 他們移除了微服務之間複雜的路徑,這些路徑原本需要用來了解資料的去向(或不去向)。Prisma 非常有助於輕鬆地以他們需要的方式取得資料。

  • 可靠性 → 他們在最初 2 年的開發中錯過的一件事是單元測試。他們最終能夠在後端為每個流程添加單元測試。將 Prisma Client 導入測試流程非常容易,並使程式碼庫更加可靠。「現在每次提交新程式碼後,我們都可以安心入睡,有了 Prisma,誤差範圍非常小」。

  • 舒適性 & 生產力 → 他們現在能夠使用本機伺服器來即時測試他們的功能,而這在 Prisma 中是開箱即用的。這對他們來說是生產力的一大提升。

新技術堆疊

確定了他們的要求後,iopool 開始使用全新的技術堆疊來開發版本 2 的後端。

新的技術堆疊依賴於流行的技術,例如 React Native、GraphQL(使用 Apollo)、Postgres 和 DynamoDB。在版本 2 中,Prisma 扮演著關鍵的角色。

iopool architecture after Prisma

大幅升級的 iopool 版本 2 透過 AWS Lambda 廣泛使用無伺服器函數。Nexus 用於提供從 React Native 應用程式呼叫的 GraphQL API。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 電子報