為 Evernote 的未來打下最堅實的基礎

在討論 Evernote 近期的各項發展前,讓我們先來討論一下房間裡那頭大象 (我是說另外那一頭)。

最近這七個月裡發生了非常多變化,導致部分使用者對我們對 Evernote 的長期規劃產生不確定感。讓我們再次聲明:Bending Spoons 取得 Evernote 是希望讓 Evernote 重返榮耀,並無意快速獲利。但遺憾的是,我們對 Evernote 的長期規劃在短期上無可避免地會產生一些痛苦。這些都是必經的,如果不這麼做,Evernote 是不可能存活的,更別提要蓬勃發產。這些變化的最終目的都是要讓 Evernote 更健壯,而事實也的確是如此。不過幾個月前,Evernote 的未來展望都偏悲觀。但此刻,我們對 Evernote 的長期未來是抱著真心樂觀的態度的。

我們專注在讓 Evernote 成為您安全又可靠的第二大腦,一個儲存您最珍貴資料的快速、無誤資料庫,在您需要時隨時隨地都能輕鬆存取。這不是什麼新概念,事實上,它就是近 20 年前 Evernote 的創立基礎。身為 Evernote 的守護者,我們最優先的任務是讓 Evernote 的基礎無比穩固、堅實,確保這個數十年的願景能繼續實現。

因此,我們面對的問題是:我們要如何打造出使用者所需要的極度可靠、絕對快速的產品呢?答案很長,且不直觀。我會盡可能在此文以及往後其他管道盡力給出答案。

最後請讓我再說明一件事:接下來的內容並不涵蓋所有一切。我在本文中將討論限縮到三大主要範疇,未來在適當時機還會有更多資訊與您分享。

重要第一步:速度以及同步處理

所有旅程都有第一步。我們的第一步則是在 2023 年 5 月,當我們介紹能執行及時編輯 (Real-Time Editing, RTE) 的全新同步處理程序時。我們的目標是要帶給您至今最快的記事同步,並能完全無縫地同步在多台裝置上同步編輯記事。同時,我們也希望能終結記事衝突的情況。

這個極具野心的專案讓我們必須使用一個利用到強大的應用程式 (Yjs) 的全新資料結構 (無衝突複製資料類型,CRDT),好將您的記事內容可以即時同步到所有裝置上,而原先的 HTML 記事格式是無法做到這點的。

也很高興能跟各位分享:此重要資料結構和系統革新目前已完成。轉換過程中並非沒有遇到挑戰,特別是在導入 RTE 這種如此基礎的系統時,無可避免會有干擾或中斷,就算做好萬全準備及預防性除錯。我們也確實準備好在過程中可能會遇到困難,也有把握能夠順利解決。通過這次系統調整,我們學到了非常多。目前 Evernote 的使用體驗對絕大部分的使用者來說在順暢度及可靠性應該都是有大幅提升的。

速度:解決掉最後的幾項阻礙

儘管整體來說使用體驗都有正向強化,確實有部分使用者在導入新的 RTE 同步系統後記事載入速度有變慢的情況。這有一部分在預期中:當記事第一次在新的 RTE 記事系統開啟時,它必須通過轉換,因此會需要幾秒的時間來載入。在這第一次的轉換後,以後記事應該都能夠很快地打開並同步。

但是有一些使用者發現,就算記事都已轉為 RTE,載入時間還是明顯變慢。這主要來自系統在一些極特殊的情況下的記事處理異常,導致大量歷史紀錄的異常生成。除了記事載入時間過長,我們也發現這也會提高其他狀況發生的機率,例如內容遺失或工作事項同步等。

找到原因後,我們就快速執行必需的解決方案,包括在後台修正三個性能相關的 bug ( 6/15, 6/27, 7/20 所發布的錯誤修正。且我們也已將這些錯誤修復資料提供到 Yjs 資料庫的開源社群)。執行解決方案後,我們幾乎是立刻就看到受影響的帳戶的記事載入時間恢復正常。若您的帳戶依然有記事載入時間過長的問題,建議您先確認是否安裝最新版本的 Evernote。若問題依然沒有獲得解決,敬請聯繫客服。

導覽:引擎蓋下的重要變更

有些性能強化是發生在產品深處,與使用者每天在編輯器裡的使用體驗距離很遠。其中最重要的就是 Evernote 桌機版和網頁版導覽系統的完全改寫,發生於七月底 (version 10.59)。行動版的導覽系統也在差不多的時間有大幅更新 (version 10.52)。基本上,導覽系統決定應用程式裡的各個元素彼此之間的關聯。儘管現在導覽系統使用原生 API,讓性能可以更好,但是在行動版上幾乎完全感受不到,唯一的提示是在桌機上的新 URL 構成:

www.evernote.com?b=<notebookID>&n=<noteID> →

www.evernote.com/notebook/<notebookID>/note/<noteID>

看起來好像只是網址美化,但其實是讓我們未來得以輕鬆擴張導覽系統的關鍵。

單體式系統移轉

另一個隱形但很重要,且由多組團隊投入許多心力的變更是從單體式系統的移轉。這邊我需要提到一些專業術語,請見諒。

現狀

Monolith 是一個舊 Java Enterprise Edition (JEE) 應用程式,它在後端運行 Evernote 的大部分業務。 因此,它支持多個實體的儲存和同步,包括記事。

在我們開始動手前,資料庫跟程式層是在同一個機器上運作 (應用程式使用 JEE,資料庫是 MySQL)。這樣機器極為笨重且難以管理。程式代碼庫跟下層的基礎架構都累積了大量的技術債物。現在我們使用諸如 RTE 等微服務讓我們可以從單體式模式移轉。

下一步是?

我們採取的策略是專注清理代碼庫並付清技術債。我們已經在基礎架構上獲得顯著成效,事實上我們最近剛剛改寫了整個製造基礎架構,全部利用了現代科技。

在重寫過程中我們將應用程式的部分和資料庫部分做了分割。現在資料庫已經移到一個新的、更現代的基礎架構上,顯著提升了安全性和可靠度。之前所有設定都是由 Puppet 管理。現在資料都是包裝成 Docker 容器。這個新的製造環境跟開發環境更為相似,對開發人員更有幫助。同時意味著我們能更容易辨認我們執行的各項變更是否真的達到我們想要的效果。簡單的說,就是錯誤更少,如果出錯也能更快修正。

工作絕不止歇

接下來幾個月我們會加倍處理各種錯誤,以確保在所有平台上都能有非常流暢的使用體驗。除此之外,我們也計畫改善「工作事項」同步的可靠度,並顯著提升 Evernote 客戶端的速度。(我們已有一些早期測試在網頁版上有很好的成果,希望能很快與您分享這些消息。)

目前 Evernote 的核心功能和使用體驗是我們的第一優先,但這並不代表我們忽略了創新的重要性。有一小群使用者 (包括員工和 Evernote 專家) 已經在測試 AI 搜尋,反饋也都很熱烈且正面。我們的抱負從確保基礎都徹底堅實穩固開始。有了好的基礎,此後發展可說是無可限量。

下回見!

Federico

讓 Evernote 助您整理工作、揮別生活的雜亂。

免費註冊