大龄码农的业余作品:升讯威在线客服系统:系统架构设计
本系列文章詳細(xì)介紹使用 .net core 和 WPF 開發(fā) 升訊威在線客服與營(yíng)銷系統(tǒng) 的過程。本產(chǎn)品已經(jīng)成熟穩(wěn)定并投入商用,并提供了多國(guó)語(yǔ)言版本,服務(wù)了一些海外客戶。
本篇主要介紹系統(tǒng)的技術(shù)架構(gòu),從較高的抽象層次上解釋我是怎樣設(shè)計(jì)實(shí)現(xiàn)這樣一套系統(tǒng)的。
首先我們先粗略的提出一些技術(shù)要求和技術(shù)指標(biāo):
- 支持多租戶。也就是云服務(wù)的形式,不同的客戶擁有互不干涉的域,各自管理自己的站點(diǎn)和數(shù)據(jù)。
- 系統(tǒng)可以橫向擴(kuò)展,具備彈性擴(kuò)容的能力。在初期可以以較低的配置環(huán)境運(yùn)行,用戶增加時(shí),可以在不影響原有結(jié)構(gòu)的基礎(chǔ)上,無感的橫向擴(kuò)展。亦或因服務(wù)規(guī)模的減小而收縮。
- 具備較高的安全性,不易被攻擊破壞。除了防火墻層面的配置外,應(yīng)用系統(tǒng)自身?yè)碛幸欢ǖ牡钟芰Α?/li>
- 安裝部署簡(jiǎn)單,在私有化部署時(shí),不需要投入太多人力,最多只需一個(gè)人便可完成全部私有化部署工作。
- 具備較高的穩(wěn)定性,部署之后能能夠做到正常運(yùn)行免人工干預(yù)。
接下來我們的頂層設(shè)計(jì),都圍繞這些目標(biāo)進(jìn)行。在技術(shù)選型方面,如題:.net core + WPF 結(jié)構(gòu)。
接下來我一一解釋這幾個(gè)部分的選型考慮。
訪客端嵌入部分
指的是客戶網(wǎng)站引入的一個(gè) JavaScript 文件,以便在客戶網(wǎng)站上顯示出客服在線和嵌入的聊天窗口,并且能夠追蹤訪客的狀態(tài)報(bào)告給客服。
這里專門指出是”完全原生 JavaScript 。原因在于這個(gè) JavaScript 文件,是需要客戶直接通過 script 標(biāo)簽嵌入在自己網(wǎng)站頁(yè)面中的。所以如果依賴任何第三方庫(kù),都有可能對(duì)客戶的網(wǎng)站產(chǎn)生影響,即使是 JQuery ,也有可能與客戶網(wǎng)站自身使用的版本有所不同,產(chǎn)生沖突。
這部分內(nèi)容需要完全不依賴任何第三方庫(kù)實(shí)現(xiàn),在訪客訪問網(wǎng)站時(shí),向服務(wù)器報(bào)告訪客的基本信息、訪問狀態(tài)。并從服務(wù)器接收信息,處理客服發(fā)送的一些指令。
訪客端
指的是彈出的聊天頁(yè)面、留言頁(yè)面或其它頁(yè)面。
這部分由于是彈出的獨(dú)立畫面,與客戶自有網(wǎng)站沒有直接關(guān)聯(lián),可以采用完全獨(dú)立的技術(shù)體系。這里我們使用的原生 JavaScript + JQuery。
服務(wù)器程序和數(shù)據(jù)庫(kù)
服務(wù)端程序除了提供一般數(shù)據(jù)增刪改查能力之外,重要的是需要實(shí)現(xiàn)穩(wěn)定的消息中件間,穩(wěn)定的站點(diǎn)狀態(tài)、客服狀態(tài)、訪客狀態(tài)等上下文數(shù)據(jù)在內(nèi)存中的管理,以及穩(wěn)定的TCP/IP長(zhǎng)連接維護(hù)機(jī)制。
綜合考慮技術(shù)指標(biāo)和開發(fā)效率,我采用了 .net core 做為服務(wù)端程序。既可以部署在 Windows 上,也可以部署在 Linux,如 CentOS 上。
.net core 目前已經(jīng)具備了完善的技術(shù)指標(biāo),并且能夠提供其它開發(fā)平臺(tái)無法比擬的開發(fā)效率。得益于整個(gè) .net 技術(shù)體系,使我靠一己之力完成整個(gè)系統(tǒng)成為可能。
數(shù)據(jù)庫(kù)同時(shí)支持 MySQL 和 SQL Server ,它能夠借助 Entity Framework Core 與 .net core 無縫融合,提供無與倫比的開發(fā)效率。同時(shí),在數(shù)據(jù)處理的性能上,完全能夠滿足各項(xiàng)技術(shù)指標(biāo)的要求。
事實(shí)上 90% 的客戶都把客服系統(tǒng)部署在了 CentOS + My SQL 上 ??????
客服端程序
客服端程序我使用了 WPF 框架。相比 WinForms 程序,WPF 提供了更高的開發(fā)效率和更完備的基礎(chǔ)框架,使得畫面呈現(xiàn)、數(shù)據(jù)處理、模塊解耦更容易。同樣,基于 .net 體系的 WPF 所提供的極高的開發(fā)效率是其它開發(fā)平臺(tái)無法提供的。對(duì)于需要一天十幾個(gè)小時(shí)穩(wěn)定運(yùn)行不退出的程序而言,原生客戶端程序的穩(wěn)定性也是基于 Web 頁(yè)面的程序所無法相比的。
在上文中,我們提到系統(tǒng)可以橫向擴(kuò)展,具備彈性擴(kuò)容的能力。在初期可以以較低的配置環(huán)境運(yùn)行,用戶增加時(shí),可以在不影響原有結(jié)構(gòu)的基礎(chǔ)上,無感的橫向擴(kuò)展。亦或因服務(wù)規(guī)模的減小而收縮。
下面我將從系統(tǒng)的整體結(jié)構(gòu)來闡述這個(gè)問題:
從上圖可以看出這是一個(gè)典型的分布式部署系統(tǒng)。客戶網(wǎng)站中嵌入的 JavaScript 文件在運(yùn)行是地,首先連接路由服務(wù)器,路由服務(wù)器保存了一張表,每個(gè)站點(diǎn)所應(yīng)該使用的應(yīng)用服務(wù)器地址。就好像DNS服務(wù)器一樣,告訴客戶網(wǎng)站你應(yīng)該向哪里發(fā)起真正的連接請(qǐng)求。接著,客戶網(wǎng)站中嵌入的 JavaScript 程序向?qū)?yīng)的應(yīng)用服務(wù)器發(fā)起連接,上報(bào)訪客狀態(tài),接收服務(wù)器指令。
那么很容易理解,我們只需要擴(kuò)展我們的應(yīng)用服務(wù)器數(shù)量,就可以輕松的增加系統(tǒng)的承載能力。反之也可以進(jìn)行縮減操作。
在處理客戶的私有化部署需求時(shí),我們也可以根據(jù)容易的實(shí)際需要,取消路由服務(wù)器、取消文件服務(wù)器、取消CDN內(nèi)容分發(fā)網(wǎng)絡(luò)。以一個(gè)簡(jiǎn)單的方案來應(yīng)對(duì)訪問量不高的中小企業(yè)需求。在這個(gè)基礎(chǔ)上,我們還可以借助現(xiàn)在的云服務(wù)器,實(shí)現(xiàn)彈性配置,以一個(gè)較低配置的服務(wù)器開始運(yùn)行,甚至將數(shù)據(jù)庫(kù)和緩存服務(wù)完全部署在一臺(tái)服務(wù)器上使用,在使用過程中發(fā)現(xiàn)確有需要,先增加單臺(tái)服務(wù)器的配置,不能滿足需求的,再分離數(shù)據(jù)庫(kù)和緩存服務(wù),還不能滿足要求的,則增加路由服務(wù)器,增加應(yīng)用服務(wù)器。
本文對(duì)系統(tǒng)的整體架構(gòu)做了簡(jiǎn)要的介紹,在接下來的文章中,我將具體解構(gòu)服務(wù)端程序的結(jié)構(gòu)和設(shè)計(jì)、客服端程序的結(jié)構(gòu)和設(shè)計(jì),敬請(qǐng)關(guān)注。
目前本產(chǎn)品完全免費(fèi),私有化部署完整包可在我的網(wǎng)站上下載:
https://kf.shengxunwei.com
總結(jié)
以上是生活随笔為你收集整理的大龄码农的业余作品:升讯威在线客服系统:系统架构设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Blazor快速开发框架Known-V2
- 下一篇: 一篇文章彻底搞懂TiDB集群各种容量计算