大龄码农的业余作品:升讯威在线客服系统:系统架构设计

本系列文章详细介绍使用 .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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/340431.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯练习题(二)

📑前言 本文主要是【算法】——蓝桥杯练习题(二)的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 …

C#编程-实现多线程

实现多线程 多线程帮助同时执行各种操作。这为用户节省时间。多线程程序包括一个主线程和其他用户定义的线程以同时执行多个任务。 微处理器为执行的进程分配内存。每个进程占有内存中它们自己的地址空间。但是,所有在进程中的线程占有相同的地址空间。多线程允许在一个程序…

RHCE9学习指南 第20章 计划任务

有时需要在某个指定的时间执行一个操作,此时就要使用计划任务了。计划任务有两种:一个是at计划任务,另一个是crontab计划任务。 下面我们分别来看这两种计划任务的使用。 20.1 at at计划任务是一次性的,到了指定的时间点时就开始…

机器人行业概况(2)

上篇已经介绍过关于机器人的定义以及分类,下面来看看机器人产业市场规模。 二、国内机器人产业市场规模 中国机器人产业在国家智能制造相关政策的引导下蓬勃发展。在新冠肺炎疫情防控期间,消毒、配送、测温、巡检等各类机器人的“火线上岗”&#xff0…

SpringBoot+SSM项目实战 苍穹外卖(11)

继续上一节的内容,本节学习Apache ECharts,实现营业额统计、用户统计、订单统计和销量排名Top10功能。 数据统计效果图: 目录 Apache ECharts入门案例 营业额统计用户统计订单统计销量排名Top10 Apache ECharts Apache ECharts 是一款基于 …

130基于MATLAB并结合IBD算法的盲迭代反卷积法进行图像复原

基于MATLAB并结合IBD算法的盲迭代反卷积法进行图像复原 ,输出复原前后图像,PSF频谱结果。程序已调通,可直接运行。 130 matlab盲迭代反卷积IBD (xiaohongshu.com)

Netty-Netty组件了解

EventLoop 和 EventLoopGroup 回想一下我们在 NIO 中是如何处理我们关心的事件的?在一个 while 循环中 select 出事 件,然后依次处理每种事件。我们可以把它称为事件循环,这就是 EventLoop 。 interface io.netty.channel. EventLoo…

计算机系统总线

总线:连接计算机各个设备的公共信息。 数据总线,地址总线,控制总线 并行总线,串行总线 单总线结构,双总线结构,三总线结构 数据总线 CPU——内存———IO设备 双向传递数据。 地址总线 用于传输地址&am…

C练习——递归求第n个人年龄

题目: 有n个人坐在一起,第n个人比第n-1个人大2岁,第n-1个人比第n-2个人大2岁,以此类推,……,第1个人是10岁。请问第n个人年龄多大? 解析: 简单循环也能求解 但按题意要求递归求解…

全网最细RocketMQ源码一:NameSrv

一、入口 NameServer的启动源码在NameStartup,现在开始debug之旅 二、createNamesrcController public static NamesrvController createNamesrvController(String[] args) throws IOException, JoranException {System.setProperty(RemotingCommand.REMOTING_VER…

Github全球第一的免费waf防火墙雷池社区版的语义分析检测算法

传统规则防护,在当下为什么失灵? 当下,Web 应用防火墙大多采用规则匹配方式来识别和阻断攻击流量,但由于 Web 攻击成本低、方式复杂多样、高危漏洞不定期爆发等原因,管理者们在安全运维工作中不得不持续调整防护规则&a…

[C#]winform部署PaddleOCRV3推理模型

【官方框架地址】 https://github.com/PaddlePaddle/PaddleOCR.git 【算法介绍】 PaddleOCR是由百度公司推出的一款开源光学字符识别(OCR)工具,它基于深度学习框架PaddlePaddle开发。这款工具提供了一整套端到端的文字检测和识别解决方案&a…