本系列文章詳細介紹使用 .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內容分發網絡。以一個簡單的方案來應對訪問量不高的中小企業需求。在這個基礎上,咱們還能夠藉助如今的雲服務器,實現彈性配置,以一個較低配置的服務器開始運行,甚至將數據庫和緩存服務徹底部署在一臺服務器上使用,在使用過程當中發現確有須要,先增長單臺服務器的配置,不能知足需求的,再分離數據庫和緩存服務,還不能知足要求的,則增長路由服務器,增長應用服務器。
本文對系統的總體架構作了簡要的介紹,在接下來的文章中,我將具體解構服務端程序的結構和設計、客服端程序的結構和設計,敬請關注。