大齡碼農的業餘作品:升訊威在線客服系統:系統架構設計

本系列文章詳細介紹使用 .net core 和 WPF 開發 升訊威在線客服與營銷系統 的過程。本產品已經成熟穩定並投入商用,並提供了多國語言版本,服務了一些海外客戶。

本篇主要介紹系統的技術架構,從較高的抽象層次上解釋我是怎樣設計實現這樣一套系統的。


首先我們先粗略的提出一些技術要求和技術指標:

  • 支持多租戶。也就是雲服務的形式,不同的客戶擁有互不干涉的域,各自管理自己的站點和數據。
  • 系統可以橫向擴展,具備彈性擴容的能力。在初期可以以較低的配置環境運行,用戶增加時,可以在不影響原有結構的基礎上,無感的橫向擴展。亦或因服務規模的減小而收縮。
  • 具備較高的安全性,不易被攻擊破壞。除了防火牆層面的配置外,應用系統自身擁有一定的抵禦能力。
  • 安裝部署簡單,在私有化部署時,不需要投入太多人力,最多隻需一個人便可完成全部私有化部署工作。
  • 具備較高的穩定性,部署之後能能夠做到正常運行免人工干預。

接下來我們的頂層設計,都圍繞這些目標進行。在技術選型方面,如題:.net core + WPF 結構。

接下來我一一解釋這幾個部分的選型考慮。

訪客端嵌入部分

指的是客戶網站引入的一個 JavaScript 文件,以便在客戶網站上顯示出客服在線和嵌入的聊天窗口,並且能夠追蹤訪客的狀態報告給客服。

這裏專門指出是”完全原生 JavaScript 。原因在於這個 JavaScript 文件,是需要客戶直接通過 script 標籤嵌入在自己網站頁面中的。所以如果依賴任何第三方庫,都有可能對客戶的網站產生影響,即使是 JQuery ,也有可能與客戶網站自身使用的版本有所不同,產生衝突。
這部分內容需要完全不依賴任何第三方庫實現,在訪客訪問網站時,向服務器報告訪客的基本信息、訪問狀態。並從服務器接收信息,處理客服發送的一些指令。

訪客端

指的是彈出的聊天頁面、留言頁面或其它頁面。

這部分由於是彈出的獨立畫面,與客戶自有網站沒有直接關聯,可以採用完全獨立的技術體系。這裏我們使用的原生 JavaScript + JQuery。

服務器程序和數據庫

服務端程序除了提供一般數據增刪改查能力之外,重要的是需要實現穩定的消息中件間,穩定的站點狀態、客服狀態、訪客狀態等上下文數據在內存中的管理,以及穩定的TCP/IP長連接維護機制。
綜合考慮技術指標和開發效率,我採用了 .net core 做爲服務端程序。既可以部署在 Windows 上,也可以部署在 Linux,如 CentOS 上。
.net core 目前已經具備了完善的技術指標,並且能夠提供其它開發平臺無法比擬的開發效率。得益於整個 .net 技術體系,使我靠一己之力完成整個系統成爲可能。

數據庫同時支持 MySQL 和 SQL Server ,它能夠藉助 Entity Framework Core 與 .net core 無縫融合,提供無與倫比的開發效率。同時,在數據處理的性能上,完全能夠滿足各項技術指標的要求。

事實上 90% 的客戶都把客服系統部署在了 CentOS + My SQL 上 🤣🤣🤣

客服端程序

客服端程序我使用了 WPF 框架。相比 WinForms 程序,WPF 提供了更高的開發效率和更完備的基礎框架,使得畫面呈現、數據處理、模塊解耦更容易。同樣,基於 .net 體系的 WPF 所提供的極高的開發效率是其它開發平臺無法提供的。對於需要一天十幾個小時穩定運行不退出的程序而言,原生客戶端程序的穩定性也是基於 Web 頁面的程序所無法相比的。


在上文中,我們提到系統可以橫向擴展,具備彈性擴容的能力。在初期可以以較低的配置環境運行,用戶增加時,可以在不影響原有結構的基礎上,無感的橫向擴展。亦或因服務規模的減小而收縮。

下面我將從系統的整體結構來闡述這個問題:

從上圖可以看出這是一個典型的分佈式部署系統。客戶網站中嵌入的 JavaScript 文件在運行是地,首先連接路由服務器,路由服務器保存了一張表,每個站點所應該使用的應用服務器地址。就好像DNS服務器一樣,告訴客戶網站你應該向哪裏發起真正的連接請求。接着,客戶網站中嵌入的 JavaScript 程序向對應的應用服務器發起連接,上報訪客狀態,接收服務器指令。
那麼很容易理解,我們只需要擴展我們的應用服務器數量,就可以輕鬆的增加系統的承載能力。反之也可以進行縮減操作。

在處理客戶的私有化部署需求時,我們也可以根據容易的實際需要,取消路由服務器、取消文件服務器、取消CDN內容分發網絡。以一個簡單的方案來應對訪問量不高的中小企業需求。在這個基礎上,我們還可以藉助現在的雲服務器,實現彈性配置,以一個較低配置的服務器開始運行,甚至將數據庫和緩存服務完全部署在一臺服務器上使用,在使用過程中發現確有需要,先增加單臺服務器的配置,不能滿足需求的,再分離數據庫和緩存服務,還不能滿足要求的,則增加路由服務器,增加應用服務器。


本文對系統的整體架構做了簡要的介紹,在接下來的文章中,我將具體解構服務端程序的結構和設計、客服端程序的結構和設計,敬請關注。


目前本產品完全免費,私有化部署完整包可在我的網站上下載:
https://kf.shengxunwei.com


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章