部署指引
依規模為 Server SDK 應用選擇部署形態:單機、拆分匯入匯出、多協同節點。
本頁依規模介紹 Server SDK 應用的三種部署形態。先閱讀 Collaboration SDK、匯入匯出和範例,了解模組如何組裝;部署是把同一套組裝放到一個或多個節點上。
單機
所有功能部署在一個 Node.js 程序裡,瀏覽器直接連線。
- Database Adapter 實作
IDatabaseAdapter契約,見 資料庫配接器。 - 匯入匯出的任務與檔案儲存、逾時和下載連結見檔案交換整合。
- 一次轉換是 CPU 密集型的,大檔案會拖慢協同。
匯入匯出影響協同回應,或要面向多人持續服務時,拆分匯入匯出。
拆分匯入匯出
匯入匯出放到獨立節點;協同仍是一個節點;閘道分別路由兩類路徑;兩者連同一個資料庫。
匯入匯出節點組裝 Database Adapter、UniverCollabService 和轉換模組,直接存取資料庫,注入點與單機相同。
協同單節點能服務的文件數受程序記憶體限制。超出容量或需要故障轉移時進入多節點。
多協同節點
多個協同節點執行同一份程式碼,連同一個資料庫。pub/sub adapter 在節點間中繼 Room、Presence 和廣播,ticket store 共用 Session Ticket,@univerjs-pro/collaboration-cluster-redis 提供 Redis 實作。參考範例:Multi-node。
每個協同節點把 Redis 的 pub/sub adapter 和 ticket store 傳給 Endpoint,其餘組裝保持原樣:
TypeScript
import { createClient } from "redis";import { RedisPubSubAdapter, RedisSessionTicketStore } from "@univerjs-pro/collaboration-cluster-redis";import { UniverCollabEndpoint } from "@univerjs-pro/collaboration-endpoint";const client = createClient({ url: process.env.REDIS_URL });const subClient = client.duplicate();await Promise.all([client.connect(), subClient.connect()]);const pubSub = new RedisPubSubAdapter({ pubClient: client, subClient });const ticketStore = new RedisSessionTicketStore({ client });const endpoint = new UniverCollabEndpoint(service, { pubSub, ticketStore });進一步
一個節點上同時處理超大文件會拖慢同節點上小文件的請求。可以依文件規模劃分節點池,由閘道把大文件路由到單獨的節點池處理;路由鍵仍是 unit ID,各池共用資料庫和 pub/sub。
你覺得這篇文檔如何?