历史性突破:使用 .net core 日处理消息量超过 1.7 万条!
业余时间用 .net core 写了一个在线客服系统。并在博客园写了一个系列的文章,写介绍这个开发过程:
.net core 和 WPF 开发升讯威在线客服系统:目录
https://blog.shengxunwei.com/Home/Post/44a31a32-d4e1-4ddd-8526-8a2bcd2e22be
开始只是写着玩玩,验证一下 .net core 到底行不行。做这个选择的时候还是比较担心的,能不能扛得住一个后台系统的数据处理压力。
在编码的过程中,查阅了大量的资料,.net core 和 c# 到底怎样才能实现高性能的后台服务。
好在功夫不负有心人,前几天查了一下客户的使用情况,当天处理的收发消息量超过了 1.7 万条!一家电子商务公司,在线咨询量远远超过了我的预计。
虽然系统完全是免费的,免费给客户使用,但是从技术上讲,达到这样一个成绩,很欣慰。
也证明了使用 .net core 做为大型系统后台的实力,是完全OK的!
===
在本文我简单介绍一下系统后台的架构,还请大家多多指正。
服务器程序和数据库
服务端程序除了提供一般数据增删改查能力之外,重要的是需要实现稳定的消息中件间,稳定的站点状态、客服状态、访客状态等上下文数据在内存中的管理,以及稳定的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内容分发网络。以一个简单的方案来应对访问量不高的中小企业需求。在这个基础上,我们还可以借助现在的云服务器,实现弹性配置,以一个较低配置的服务器开始运行,甚至将数据库和缓存服务完全部署在一台服务器上使用,在使用过程中发现确有需要,先增加单台服务器的配置,不能满足需求的,再分离数据库和缓存服务,还不能满足要求的,则增加路由服务器,增加应用服务器。
历史性突破:使用 .net core 日处理消息量超过 1.7 万条!的更多相关文章
- .net core使用rabbitmq消息队列 (二)
之前有写过.net core集成使用rabbitmq的博文,见.net core使用rabbitmq消息队列,但是里面的使用很简单,而且还有几个bug,想改下,但是后来想了想,还是算了,之前使用的是. ...
- .net core使用rabbitmq消息队列
看博文的朋友,本文有些过时了,还有些BUG,如果想了解更多用法,看看这篇吧:.net core使用rabbitmq消息队列 (二) 首先,如果你还没有安装好rabbitmq,可以参考我的博客: Ubu ...
- 微信公众号开发--用.Net Core实现微信消息加解密
1.进入微信公众号后台设置微信服务器配置参数(注意:Token和EncodingAESKey必须和微信服务器验证参数保持一致,不然验证不会通过). 2.设置为安全模式 3.代码实现(主要分为验证接口和 ...
- .NET Core 企业微信消息推送
接口定义 应用支持推送文本.图片.视频.文件.图文等类型.请求方式:POST(HTTPS)请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send? ...
- asp.net core 阿里云消息服务(Message Service,原MQS)发送接口的实现
最近在后台处理订单统计等相关功能用到了大力的mqs,由于官方没有实现asp.net core的sdk,这里简单实现了发送信息的功能,有兴趣的可以参考实现其他相关功能 using System;usin ...
- 微信公众号开发--.Net Core实现微信消息加解密
1:准备工作 进入微信公众号后台设置微信服务器配置参数(注意:Token和EncodingAESKey必须和微信服务器验证参数保持一致,不然验证不会通过). 2:基本配置 设置为安全模式 3.代码实现 ...
- Effective Objective-C 2.0 — 第二章 对象、消息、运行期 - 第六条:理解“属性”这一概念
开发者通过对象来 存储并传递数据. 在对象之间传递数据并执行任务的过程就叫做“消息传递”. 这两条特性的工作原理? Objective-C运行期环境(Objective-C runtime) ,提供了 ...
- MQTT 单个订阅消息量过大处理
The missing piece between MQTT and a SQL database in a M2M landscape Message Queue Telemetry Transpo ...
- .NET Core Web 文件分片上传,带进度条实用插件
话不多说,上源码连接: 链接:https://pan.baidu.com/s/1_u15zqAjhH0aVpeoyVMfUA 提取码:z209
随机推荐
- npm & cli & node.js
npm & cli & node.js https://www.npmjs.com/ https://www.npmjs.com/settings/xgqfrms/packages h ...
- Flutter: ValueListenableBuilder 内容与ValueListenable保持"同步"的窗口小部件
API 使用这个修改状态可以不用setState(). class _MyHomeState extends State<MyHome> { final ValueNotifier< ...
- 美最大政媒《国会山报》罕见发文阐述BTC,华盛顿金融盛赞SPC
比特币价格突破4万美元创下历史新高,美国最大政治媒体之一<国会山报>罕见的发表了文章对比特币进行阐明. 2021年已经过去一周,但比特币依然没有停下上涨的步伐.在刚刚过去2020年里,比特 ...
- NGK公链:在规则明确的环境下运行超级节点机制
首先要跟大家明确的一点是,21个超级节点是投票选举出来的,并不是系统在创立之初就已经确定好了的.那么相信大家也一定很好奇,这21个超级节点是通过什么方式产生? NGK.IO对分布式超级节点使用了一个自 ...
- 利用Metasploit 打入ThinkPHP内网...
出品|MS08067实验室(www.ms08067.com) 本文作者:dch(Ms08067实验室 SRSP TEAM小组成员) 一.利用Metasploit进行攻击的流程图 Metasploi ...
- Vue的学习总结之---Vue项目 前后端分离模式解决开发环境的跨域问题
原文:https://blog.csdn.net/localhost_1314/article/details/83623526 在前后端分离的web开发中,我们与后台联调时,会遇到跨域的问题. 比如 ...
- springboot项目打包成jar包在Linux服务器默认80端口运行
springboot项目端口设置 在application.properties文件 server.port=80 在application.yml文件 server: port: 80 然后在ide ...
- PHP代码审计_用==与===的区别
目录 背景介绍 如何审计 绕过案例1 绕过案例2 背景介绍 比较==与===的差别 == 是等于符号,=== 是恒等于符号,两个符号的功能都是用来比较两个变量是否相等的,只不过两个符号的比较维度不一样 ...
- MySQL数据库插入数据出现 ERROR 1526 (HY000): Table has no partition for value xxx
MySQL数据库插入数据出现ERROR 1526 (HY000): Table has no partition for value xxx工作的时候发现无法插入数据,报错:ERROR 1526 (H ...
- SSM整合再回顾
一.spring 前言:提起spring就不得不说到它的IOC和AOP的概念.IOC就是一个对象容器,程序员可以将对象的创建交给spring的IOC容器来创建,不再使用传统的new对象方式,从而极大程 ...