本系列文章详细介绍使用 .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内容分发网络。以一个简单的方案来应对访问量不高的中小企业需求。在这个基础上,咱们还能够借助如今的云服务器,实现弹性配置,以一个较低配置的服务器开始运行,甚至将数据库和缓存服务彻底部署在一台服务器上使用,在使用过程当中发现确有须要,先增长单台服务器的配置,不能知足需求的,再分离数据库和缓存服务,还不能知足要求的,则增长路由服务器,增长应用服务器。
本文对系统的总体架构作了简要的介绍,在接下来的文章中,我将具体解构服务端程序的结构和设计、客服端程序的结构和设计,敬请关注。