部落格 / 品牌故事

從零開始打造即時客服系統 - 序章:為何探討即時客服系統的工程思維

發佈於 2026/3/1

大多數人認為客戶對答系統(Customer Support System)不過就是個對話框。

事實並非如此。

在那個小巧的懸浮視窗背後,隱藏著一個必須在不可預知的流量下,仍能保持低延遲(Low Latency)的即時通訊核心。為了管理成千上萬——有時甚至是數十萬個——同時在線的連線,必須進行並行控制(Concurrency Control)。在壓力下的記憶體管理也至關重要,任何效率低下的配置模式都可能悄悄導致延遲飆升。此外,還有**多租戶隔離(Multi-tenant Isolation)**機制,確保單一客戶的負載絕不會影響到其他客戶的系統穩定性。

除此之外,SaaS 雲端服務與地端部署(On-premises)環境的部署策略也有本質上的不同。系統還需具備可靠性保證(Reliability Guarantees),以決定訊息在極端情況下是準確送達一次、至少送達一次,還是不幸遺失。而在這一切之下,還有長期的架構取捨(Architectural Trade-offs),這決定了系統在未來幾年(而非幾週)內將如何演進。

表面上看來簡約的介面,實質上是一個在效能、隔離性、可靠性與可維護性之間取得平衡的分層系統。外觀或許極簡,但背後的工程實作絕非易事。

在過去幾年裡,我開發了一套名為 ShenDesk 的即時客戶對答系統。它同時支援 SaaS 與地端部署,並針對高並行、可維護性與架構清晰度進行設計。最初這只是一個極簡的原型,隨後逐漸演變成一個具備完整通訊管線、租戶隔離、訪客追蹤、可擴充 API 的生產級系統。其結構設計旨在自我調整與演進,而非隨著時間堆積偶然的複雜性(Accidental Complexity)。

本系列文章是這段演進過程的技術紀錄——包含了從零開始構建並精煉一套即時基礎設施系統時,所做的決策、面臨的限制、歷經的修正,以及最終學到的教訓。

為什麼要寫這個系列?

工程透明度(Engineering Transparency)能建立信任 —— 對於基礎設施等級的軟體來說更是如此。

在客戶對答系統領域已有許多成熟產品,包括 Zendesk 和 Intercom 等知名平台。這些系統經過多年迭代、擁有龐大資源支持,發展已極為完善。從外部看來,它們擁有簡潔的介面與出色的使用者體驗。

然而,讓這些系統在大規模擴充(Scale)下仍能穩定運作的工程邏輯,往往是外界看不見的。UI 或許看起來直覺簡單,但底層的基礎設施必須在負載下持續運作、禁得起突發流量、可靠地隔離租戶,並且在演進過程中不被自身的複雜性擊垮。這些關於權衡(Trade-offs)、限制與修正的設計選擇,極少出現在公開討論中。

你該如何設計一個基於 .NET 的即時通訊核心,使其在持續的高並行下保持穩定?在管理六位數等級的 WebSocket 連線時,如何避免引發延遲飆升?在分配模式(Allocation patterns)直接影響響應速度的系統中,該如何減輕 GC 壓力?除了理論架構圖之外,**多租戶隔離(Multi-tenant Isolation)在實務上又是什麼樣子?而當企業客戶要求地端部署(On-premises)**而非純 SaaS 服務時,又會產生哪些架構上的妥協?

這些問題無法透過功能清單來回答,而是必須透過在各種限制下形塑出的**架構思維(Architectural Thinking)**來解答。

本系列文章將從工程視角探討這些議題。我們會檢視那些當時看似合理、隨後卻需要修正的決策;討論在簡約與擴充性、抽象化與效能、以及短期交付與長期可維護性之間的取捨。

這不是一場行銷活動,也不是那種直接提供生產級程式碼的逐步教學。相反地,這是一場對於架構決策、實務限制以及在長期開發與演進即時系統過程中所獲教訓的結構化探索。

本系列文章將涵蓋哪些內容?

本系列將追隨系統的演進歷程——從最初的假設到逐漸成熟的架構型態。我們將從最根本的問題開始:為什麼「從零開始」打造一套客戶對答系統是有意義的?又是哪些限制證明了這個決策的合理性?接著,我們將探討系統如何從極簡原型轉向**生產等級(Production-grade)**架構,並檢視早期的簡約設計如何逐步讓位給嚴謹的結構。

討論內容將涵蓋 .NET 即時通訊核心的設計,以及在持續負載下處理高並行 WebSocket 連線的實務現狀。我們將探討記憶體配置模式與 GC(垃圾回收) 行為在延遲敏感環境中的表現;這些並非理論課題,而是直接影響使用者體驗的核心力量。此外,我們也會針對背壓(Backpressure)、佇列管理與故障隔離等穩定機制進行探討,研究如何防止系統發生級聯失效(Cascading Failures)

隨著系統規模擴張,架構重點轉向了多租戶隔離、部署彈性與可靠性保證。為了同時支援 SaaS 與**地端(On-premises)**環境,我們必須面對不同的維運限制,並針對可設定化、自動化與環境假設做出明確決策。訊息可靠性模型——以及在理論保證與維運實務之間的折衷——也成了核心考量。

後續文章將反思:當早期設計證實不足以應對需求時,如何重寫核心組件?如何在不過度工程化(Over-engineering)的前提下設計具擴充性的 API?以及如何在不影響底層系統穩定性的情況下,將 AI 功能整合進延遲敏感的即時管線(Pipeline)中。

每一篇文章都將專注於**工程邏輯(Engineering Reasoning)**而非表層功能。在適當之處,我會討論各種權衡取捨、被否決的替代方案以及架構上的妥協——因為真實的系統往往是由限制而非理想所塑造的。架構圖或許展現了清晰的藍圖,但這種清晰通常是在不斷修正後才浮現的。

這個系列並非圍繞著「產品能做什麼」來編排,而是圍繞著「一個系統如何禁得起成長、負載與時間的考驗」來展開。

預計涵蓋的主題包括:

  • 為什麼要從零開始打造一套客戶對答系統?
  • 從 MVP 到生產級架構的演進
  • 在 .NET 中設計即時通訊核心
  • 處理高並行的 WebSocket 連線實務
  • 即時系統中的記憶體最佳化與 GC 壓力管理
  • 通訊管線中的背壓(Backpressure)與穩定性機制
  • 多租戶架構:邏輯隔離 vs 實體隔離
  • 針對地端部署(On-Premises)的設計考量
  • 訊息可靠性與送達保證模型
  • 重寫核心組件的經驗與教訓
  • 具備擴充性的開放 API 設計
  • 將 AI 整合至即時對答系統中

每一篇文章都將聚焦於工程邏輯(Engineering Reasoning),而非表層的功能介紹。

在適當之處,我會深入探討各種權衡取捨、曾被否決的替代方案,以及架構上的折衷——因為真實的系統往往是由「限制」而非「理想」所塑造出來的。

範圍與界限

本系列文章將聚焦於開發與演進一套「生產環境即時系統」時,所累積的架構設計、設計思維與工程教訓。重點在於背後的邏輯推演:為什麼做出特定決策、受到哪些限制影響,以及這些決策如何經得起時間的考驗。

本系列不會揭露任何敏感的安全細節、客戶資料、特定部署配置或內部的專有實作機制。真實的系統運作於特定的維運脈絡中,這些內容不應該、也無法對外公開。對我們而言,穩定性與安全性並非理論上的關懷,而是實務上的責任。

在提供範例時,我會將其抽象化(Abstracted),以呈現設計模式而非揭露內部結構。關於基準測試(Benchmarks)的討論,將著重於趨勢與方向,而非精確的生產數據。若文中包含架構圖,則代表的是概念模型,而非實際的基礎設施佈局。

我的初衷是分享思維,而非暴露維運風險。**工程透明度(Engineering Transparency)並不代表需要公開每一行程式碼或每個部署細節,而是要對塑造系統的決策保持清晰,並對伴隨而來的權衡取捨(Trade-offs)**保持誠實。

設定界限並非對討論的限制,而是負責任工程實務的一部分。

本系列文章適合哪些讀者?

如果你正在建構即時系統(Real-time systems),且延遲、並行與可靠性對你而言並非抽象的理論,而是每天都要面對的工程限制,那麼這個系列或許對你有幫助。如果你正在設計 SaaS 基礎設施,並且發現架構決策鮮少是孤立的——它們會像漣漪一樣影響到部署模型、租戶隔離、維運複雜度以及長期可維護性——那麼這些內容應該會讓你產生共鳴。

如果你正在探索理論架構圖之外的多租戶架構(Multi-tenant architecture),或者正在處理高度依賴 WebSocket 的負載,且連線生命週期管理與記憶體行為直接影響到系統穩定性,那麼這裡討論的主題可能正對應到你所面臨的問題。同樣地,如果你在意如何設計一套在經過數年(而非數週)的迭代後,仍能保持易於理解且具備適應力的系統,那麼本系列正是以此觀點出發撰寫的。

這並非為了「快速消費」而優化的內容。它預設讀者願意從權衡取捨(Trade-offs)而非絕對標準出發,並從「演進」而非「速成方案」的角度進行思考。重點不在於功能的比較,而在於結構化邏輯(Structural reasoning);不在於打造一個「能動一次」的東西,而在於打造一個隨著複雜度增加,仍能持續穩定運作的系統。

如果你只是在尋找「如何在 10 分鐘內寫出聊天 App」的快速指南,這裡恐怕不適合你。市面上已有許多優秀的快速原型開發資源,而本系列關心的是:當原型開始面對真實流量、真實限制與真實維運責任時,究竟會發生什麼事。

一份長期的工程紀錄

軟體系統是會演進的。

隨著功能增加與邊緣案例(Edge cases)浮現,系統會不斷堆積複雜度;它們會遇到早期設計中完全看不見的效能瓶頸(Bottlenecks),並迫使你重新審視那些曾經看似完全合理的假設。在架構圖中顯得簡潔的設計,到了生產環境的現實中,往往會變得層次交疊且充滿權衡。

沒有任何一個系統能與最初的版本保持一致。隨著新需求湧現,**並行模型(Concurrency models)**會被調整、資料結構會被替換、訊息管線會被重寫,部署流程則可能先被簡化,隨後又因現實需求而再度變得複雜。隨著時間推移,挑戰不再只是讓系統「動起來」,而是確保它在層層累積的決策之下,仍能持續運作而不至於崩潰。

本系列文章旨在記錄這段歷程——它不是一個被過度包裝的成功故事,而是一個持續進行中的工程實作過程。內容將包含架構的修正、結構的調整,以及當最初的信心轉化為更深層理解的那些時刻。系統的穩定性鮮少能透過單一的正確決策達成,它通常是持續迭代、受限與精煉後的結果。

在**基礎設施等級(Infrastructure-level)的 SaaS 系統中,演進並非選項。真實的流量會暴露隱藏的弱點,真實的客戶會引入足以重塑架構的需求,而真實的維運責任則會改變我們評估權衡取捨(Trade-offs)**的方式。久而久之,工程實作的重點將不再只是增加功能,而是在適應變化的同時,仍能保有系統的清晰度。

如果你對即時架構(Real-time architecture)分散式設計權衡(Distributed design trade-offs),或是構建與維護必須持續運作之系統的現實面感興趣,這份紀錄或許對你有參考價值。

結語

如果你覺得這些討論對你有幫助,我非常歡迎你的想法、指正或不同的觀點。工程實作受益於對話,而**理性的異議(Thoughtful disagreement)**往往能磨練出更清晰的架構。在此先感謝願意追蹤本系列並認真參與討論的讀者。

ShenDesk 並非一個純概念性的專案,它是一個真實的產品,並已在生產環境中供真實使用者使用。這裡討論的所有想法都植根於實務開發,而非單純的理論建模。如果你對產品本身感興趣,可以在此了解更多:

https://www.shendesk.com

關於系統設計的對話,鮮少能在單一文章中完結。如果你也正在建構類似的基礎設施、面臨類似的權衡取捨,或者單純對深入討論**即時架構(Real-time architecture)**感興趣,我很樂意與你聯繫並交換意見。

工程實作鮮少是孤軍奮戰——即便系統是由單一開發者獨立完成的也是如此。

即時客服系統

即時客服系統

品牌故事

更多關於提升團隊效能的文章

所有文章
System Operational • Global Access

與全球先鋒同行
定義服務新高度

加入全球 500+ 先鋒團隊。無論是在我們的雲端極速啟動,還是在您的私有基礎設施中穩健佈署,我們都能提供卓越支持。