本系列文章詳細介紹使用 .net core 和 WPF 開發 升訊威在線客服與營銷系統 的過程。本產品已經成熟穩定並投入商用。
請訪問:https://kf.shengxunwei.com
書接上回,本篇主要介紹系統的技術架構,從較高的抽象層次上解釋我是怎樣設計實現這樣一套系統的。
首先我們先粗略的提出一些技術要求和技術指標:
- 支持多租戶。也就是雲服務的形式,不同的客戶擁有互不干涉的域,各自管理自己的站點和數據。
- 系統可以橫向擴展,具備彈性擴容的能力。在初期可以以較低的配置環境運行,用戶增加時,可以在不影響原有結構的基礎上,無感的橫向擴展。亦或因服務規模的減小而收縮。
- 具備較高的安全性,不易被攻擊破壞。除了防火牆層面的配置外,應用系統自身擁有一定的抵御能力。
- 安裝部署簡單,在私有化部署時,不需要投入太多人力,最多只需一個人便可完成全部私有化部署工作。
- 具備較高的穩定性,部署之后能能夠做到正常運行免人工干預。
接下來我們的頂層設計,都圍繞這些目標進行。在技術選型方面,如題:.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內容分發網絡。以一個簡單的方案來應對訪問量不高的中小企業需求。在這個基礎上,我們還可以借助現在的雲服務器,實現彈性配置,以一個較低配置的服務器開始運行,甚至將數據庫和緩存服務完全部署在一台服務器上使用,在使用過程中發現確有需要,先增加單台服務器的配置,不能滿足需求的,再分離數據庫和緩存服務,還不能滿足要求的,則增加路由服務器,增加應用服務器。
本文對系統的整體架構做了簡要的介紹,在接下來的文章中,我將具體解構服務端程序的結構和設計、客服端程序的結構和設計,敬請關注。
請訪問:https://kf.shengxunwei.com
聯系QQ: 279060597
聯系E-mail:C5118@outlook.com
推薦您關注我的微信訂閱號,在我更新文章或產品信息時會進行推送。