为了验证 docker swarm 在高并发下的性能问题,周一我们发布了使用 docker-compose 部署的 .net core 版博客站点(博文链接),但由于有1行代码请求后端 web api 时没有使用缓存,结果造成大量 web api 请求发向跑后端服务的集群,悲剧的是这个集群是用 docker swarm 部署的,请求是用 nginx 容器转发的,结果压垮了 nginx ,大量后端请求 502 ,被迫回退至 windows + .net framework 版博客系统。

使用 docker-compose 部署没有出现高并发下响应速度极不稳定的性能问题,以及后端 docker swarm 集群被大量请求压垮,已经基本验证了 docker swarm 的眼高手低,无法胜任高并发的场景。

在准备改用 k8s 部署之前,我们决定进行一个最直截了当的对比,用同样配置的 windows 服务器部署 .net core 版博客系统(同“窗”就是指这个),对比一下 .net core vs .net framework 的性能,看看是否真的是“青出于蓝而胜于蓝”?

直接在部署 .net framework 博客系统的 windows 服务器上安装 .net core sdk 并部署 .net core 版博客系统,“同窗”名副其实,一点不参假,不仅用的都是“Windows Server  2016 数据中心版 64位英文版”,而且系统环境配置都一样。asp.net core 站点部署方式使用的是 IIS InProcess Hosting :

<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

在 Startup 的 ConfigureServices 中允许 IIS InProcess Hosting 的同步 IO

services.Configure<IISServerOptions>(options =>
{
options.AllowSynchronousIO = true;
});

不然会出现错误

Synchronous operations are disallowed. Call WriteAsync or set AllowSynchronousIO to true instead

另外,之前发布后提交评论速度慢是代码的问题,.net core 中没有 .net framework 中的  HostingEnvironment.QueueBackgroundWorkItem ,迁移时我们偷懒了,没有把提交评论的一些操作放到队列中处理。今天我们改进了代码,用 Coravel 的队列功能实现了,现在提交速度有了明显的改善。

Windows 上的 .net core 版博客站点已于 18: 15 左右发布上线,它的表现如何,请看明天上午下午访问高峰的演出。

发布后立即发现 .net core 版的 CPU 消耗明显高于 .net framework 版

发布前 .net framework 版用了4台4核8G的服务器,CPU 占用情况如下

发布后 .net core 版用了5台4核8G的服务器,且访问量更低,CPU 占用情况如下

这个 CPU 占用异常高的问题估计我们写的代码有关,我们会进一步排查。

更新

18:45 左右,加了1台服务器,现在是6台服务器。

19:10 左右,由于CPU占用问题,暂时下线。6台服务器访问量更低时,CPU 波动很大,见下图。

22:26 ,CPU 占用异常高问题目前排查下来最大的嫌疑是 EnyimMemcachedCore ,明天会进行验证。

8:22 ,

相关博文:

同“窗”的较量:部署在 Windows 上的 .NET Core 版博客站点发布上线的更多相关文章

  1. 峰回路转:去掉 DbContextPool 后 Windows 上的 .NET Core 版博客表现出色

    今天早上,我们修改了博客程序中的1行代码,将 services.AddDbContextPool 改为 services.AddDbContext ,去掉 DbContextPool . 然后奇迹出现 ...

  2. 做梦也没有想到:Windows 上的 .NET Core 表现更糟糕

    昨天晚上 18:15 左右我们发布了跑在 Windows 上 .NET Core 博客系统,本想与 .NET Framework 版进行同“窗”的较量,结果刚发布上线就发现 CPU 占用异常高,发布不 ...

  3. 在 windows 上安装免安装版的mysql

    在 windows 上安装免安装版的 1. 下载路径 https://downloads.mysql.com/archives/community/ 2. 解压 假设解压后的路径为:E:\Enviro ...

  4. windows上使用mkdocs搭建静态博客

    windows上使用mkdocs搭建静态博客 之前尝试过用HEXO搭建静态博客,最近发现有个叫mkdocs的开源项目也是搭建静态博客的好选择,而且它支持markdown格式,下面简要介绍一下mkdoc ...

  5. .NET平台系列26:在 Windows 上安装 .NET Core/.NET5/.NET6

    系列目录     [已更新最新开发文章,点击查看详细] 本文介绍如何在 Windows 上安装 .NET. .NET 由运行时和 SDK 组成. 运行时用于运行 .NET 应用,应用可能包含也可能不包 ...

  6. 【转】jenkins自动化部署项目7 -- 新建job(将服务代码部署在windows上)

    关于构建结束后jenkins会kill所有衍生子进程的官方解决方案:https://wiki.jenkins.io/display/JENKINS/Spawning+processes+from+bu ...

  7. CAS部署在Windows上

    我这里有下载好的cas.war和tomcat7,然后我在将cas.war放在tomcat目录下的webapps下,启动tomcat自动解压war包.浏览器输入http://localhost:8080 ...

  8. 解决Activiti5.22流程图部署在Windows上正常,但在linux上部署后出现中文变方块的问题

    总结/朱季谦 楼主最近在做公司的工作流平台,发现一个很无语的事情,Activiti5.22的流程图在Windows环境上部署,是可以正常查看的,但发布到公司的Linux服务器上后,在上面进行流程图在线 ...

  9. .net core 部署到windows上的方法与 系统中相关问题的解决

    前言 Net core 项目部门在Windows有很多种方式,大致有以下几种, dotnet 命令, iis(windowshosts), 一些开源的应用容器(docker ) 基于一些exe 程序, ...

随机推荐

  1. linuxprobe培训第2节课笔记2019年7月6日

    使用VM虚拟机配置RHEL实验环境. 鉴于在笔记本上装过centos7,这章内容难度对我来说不是很大. 重置root管理员密码(RHCSA考题,第一题,做不出来无法进行下一步考试) e linux16 ...

  2. centos 7 安装docker,conflicts 异常

    [root@localhost html]# yum install docker-io 已加载插件:fastestmirror, langpacks Loading mirror speeds fr ...

  3. [Noi2002]Savage 题解

    [Noi2002]Savage 时间限制: 5 Sec  内存限制: 64 MB 题目描述 输入 第1行为一个整数N(1<=N<=15),即野人的数目. 第2行到第N+1每行为三个整数Ci ...

  4. 用MATLB仿真一个单闭环控制量,同时还存在两个开环控制变量的阶跃响应曲线。(自动控制方法是PID中的P控制。通过查表法直接给开环参数稳态最佳的大小)

    实际项目背景:甘肃省,航天510所的LIPS100电推力器.一共有三个控制变量,开环控制变量是:Ia(阳极电流).mmrf(阳极主流率) 这个阳极主流率是阀门变量,不能够突变,模拟用(大学一年级课,电 ...

  5. k8s学习 - 概念 - Deployment

    k8s学习 - 概念 - Deployment 有了 ReplicaSet 还需要有 Deployment 的原因是希望有一个控制器能管理部署更新时候的版本控制问题.一个 Deployment 可以管 ...

  6. 洛谷P2057 [SHOI2007]善意的投票 题解

    题目链接: https://www.luogu.org/problemnew/show/P2057 分析: 由0和1的选择我们直觉的想到0与S一堆,1与T一堆. 但是发现,刚开始的主意并不一定是最终的 ...

  7. Excel催化剂开源第15波-VSTO开发之DataTable数据导出至单元格区域

    上篇提到如何从Excel界面上拿到用户的数据,另外反方向的怎样输出给用户数据,也是关键之处. VSTO最大的优势是,这双向的过程中,全程有用户的交互操作. 而一般IT型的程序,都是脱离用户的操作,只能 ...

  8. HHyperledger Fabric 之 TLS (fabric-java-sdk)使用grpcs方式访问fabric

    我在很多fabric的技术群中,很多使用javasdk连接fabric的同友,初始的时候很多都没有成功的使用TLS进行区块链交易: 是sdk不支持,还是我们没有找到解决方案? 其实不然,我这里使用的是 ...

  9. ieda使用 在jsp页面中,有时候会出现不能智能显示方法 idea pageContext.setAttribute

    idea使用,出现问题记录: 就比如在 pageContext.setAttribute("user",u);这句打pageContext会智能提示, 但是后面的setAttrib ...

  10. vscode在win10 / linux下的.vscode文件夹的配置 (c++/c)

    系统方面配置自行查找 linux: launch.json { // 使用 IntelliSense 了解相关属性. // 悬停以查看现有属性的描述. // 欲了解更多信息,请访问: https:// ...