.net core 和 WPF 開發升訊威線上客服與營銷系統:系統總體架構

sheng.chao發表於2020-12-27

本系列文章詳細介紹使用 .net core 和 WPF 開發 升訊威線上客服與營銷系統 的過程。本產品已經成熟穩定並投入商用。
線上演示環境:https://kf.shengxunwei.com 注意:演示環境僅供演示交流與評估,不保證 7x24 小時可用。

文章目錄列表請點選這裡


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

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

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

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

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

訪客端嵌入部分

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

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

訪客端

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

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

伺服器程式和資料庫

服務端程式除了提供一般資料增刪改查能力之外,重要的是需要實現穩定的訊息中件間,穩定的站點狀態、客服狀態、訪客狀態等上下文資料在記憶體中的管理,以及穩定的TCP/IP長連線維護機制。
綜合考慮技術指標和開發效率,我採用了 .net core 做為服務端程式,SQL Server 做為資料庫的方案。
.net core 目前已經具備了完善的技術指標,並且能夠提供其它開發平臺無法比擬的開發效率。得益於整個 .net 技術體系,使我靠一己之力完成整個系統成為可能。

資料庫我採用了 SQL Server ,它能夠藉助 Entity Framework Core 與 .net core 無縫融合,提供無與倫比的開發效率。同時,在資料處理的效能上,完全能夠滿足各項技術指標的要求,在日常使用和運維上,也提供了 Oracle 和 MySQL 無法比擬的便利性和工作效率。

客服端程式

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


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

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

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

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


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

相關文章