• .net core 和 WPF 开发升讯威在线客服与营销系统:系统总体架构


    本系列文章详细介绍使用 .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内容分发网络。以一个简单的方案来应对访问量不高的中小企业需求。在这个基础上,我们还可以借助现在的云服务器,实现弹性配置,以一个较低配置的服务器开始运行,甚至将数据库和缓存服务完全部署在一台服务器上使用,在使用过程中发现确有需要,先增加单台服务器的配置,不能满足需求的,再分离数据库和缓存服务,还不能满足要求的,则增加路由服务器,增加应用服务器。


    本文对系统的整体架构做了简要的介绍,在接下来的文章中,我将具体解构服务端程序的结构和设计、客服端程序的结构和设计,敬请关注。

  • 相关阅读:
    thinkphp 3.2 服务器 session 设置时间周期失效问题 服务器是linux windows 上暂时没有发现此类问题
    php 不常见的开发模式
    js 里面的 call 方法 和 apply 方法
    PHP读取文件目录, 并显示需要的目录
    PHP 时间格式
    Python之旅.第三章.函数
    Python之旅.第三章.函数
    Python之旅.第三章.函数
    Python之旅.第三章.函数
    Python之旅.第三章.函数
  • 原文地址:https://www.cnblogs.com/sheng_chao/p/14198997.html
Copyright © 2020-2023  润新知