暴风雨中的 online :.net core 版博客站点遭遇的高并发问题进展
今天暴风雨袭击了杭州,而昨天暴风雨(高并发问题)席卷了园子,留下一片狼藉。
在前天傍晚,我们进行了 .net core 版博客站点的第二次发布尝试,在发布后通过 kestrel 直接监听取代 nginx 转发解决了高并发下的1秒延迟问题,成功地顶住了下班前的访问小高峰,但这只是一场大雨,第二天的上午和下午的暴风雨(访问高峰中的高并发)才是真正的考验。
昨天,面对暴风雨,我们哼都不敢哼一声“让暴风雨来得更猛烈些吧”,只是一直不停地默念“让暴风雨快点过去吧”,尤其在下午的暴风雨袭击下,跑在 docker swarm 上 .net core 版博客系统溃不成军,大量请求响应速度极不稳定,时而快如闪电(10ms左右),时而慢如蜗牛(10s, 30s 甚至超时)。与第一次发布时不一样,不仅博客应用容器外是暴风雨,容器内也是暴风雨,在容器内用 curl 命令访问与外部用浏览器访问问题一样(难不成真的是 docker swarm 网络的问题?kestrel 监听取代 nginx 转发只是将网络并发负载从 nginx 容器转到了 kestrel 所在的博客应用容器。。。有待验证。)
昨天 17:30 左右并发量回落到一定程度之后,暴风雨飘然而去,立刻风平浪静,晴空万里,下午的那场暴风雨宛如梦中。
在暴风雨过后,我们查看了服务器的 linux 系统日志,发现很多下面的日志,而且都发生在暴风雨期间。
Aug 8 15:57:12 blog-swarm-n3 kernel: nf_conntrack: table full, dropping packet
Aug 8 15:57:12 blog-swarm-n3 kernel: nf_conntrack: table full, dropping packet
Aug 8 15:57:12 blog-swarm-n3 kernel: nf_conntrack: table full, dropping packet
当时 docker swarm 集群中一共5台 worker 节点服务器,统计了一下每台服务器出现 "table full" 日志的数量。
blog-swarm-n3: 2149
blog-swarm-n4: 1964
blog-swarm-n5: 2451
blog-swarm-n6: 2095
blog-swarm-n7: 0
咦,怎么有1台服务器为0?哦,原来是这台没有挂上所有负载均衡,只承受了 2/3 左右的流量,虽然下的暴风雨,但对这台服务器来说只是一场大雨。
针对上面的日志,我们调整了 linux 内核的 2 个设置置(参考文档),在 /etc/sysctl.conf 中添加
net.netfilter.nf_conntrack_max = 655350
net.netfilter.nf_conntrack_tcp_timeout_established = 1200
这个调整成为我们今天唯一的希望,但早上访问高峰来临的时候,迎接我们的不是喜出望外,而是昔日重来。。。
在熟悉的暴风雨面前,我们面临着艰难的选择,放弃-退回 windows 上的 .net framework 版博客系统,还是坚持-至少要找到一种能抵挡一定程度暴风雨的临时解决方法?
那台没有 "table full" 日志的服务器给了我们启发——分而治之,将暴风雨变成每一台服务器的大雨,拆分流量到不同的服务器,减少每台服器的并发连接数,今天就是通过这个临时的笨方法扛住了暴风雨,大量减少了响应速度慢的情况,所以到现在 .net core 版博客站点依然在线。
在抗过今天上下午访问高峰的暴风雨后,杭州也被暴风雨袭击了,因为有了房子,任凭外面风吹雨打,我们可以坐在房间里一边敲着代码,一边凝听着窗外的风雨声。对于这次遇到的高并发问题,我们相信总有一天会为我们的博客系统建造好房子,在暴风雨的风吹雨打中潇洒地在日志中写着“让暴风雨来得更猛烈些吧”。
暴风雨中的 online :.net core 版博客站点遭遇的高并发问题进展的更多相关文章
- 同“窗”的较量:部署在 Windows 上的 .NET Core 版博客站点发布上线
为了验证 docker swarm 在高并发下的性能问题,周一我们发布了使用 docker-compose 部署的 .net core 版博客站点(博文链接),但由于有1行代码请求后端 web api ...
- 【故障公告】发布 .NET Core 版博客站点引起大量 500 错误
非常抱歉,今天上午的博客站点故障给大家带来了很大的麻烦,请大家谅解.这次故障是我们发布 .NET Core 版博客站点引起的,虽然我们进行了充分的准备,但还是低估了高并发下的复杂问题. 以下是故障背景 ...
- 【网站公告】.NET Core 版博客站点第二次发布尝试
在上次发布失败后,很多朋友建议我们改用 k8s ,但我们还是想再试试 docker swarm ,实在不行再改用 k8s . 在改进了 docker swarm 集群的部署后,我们准备今天 17:30 ...
- 峰回路转:去掉 DbContextPool 后 Windows 上的 .NET Core 版博客表现出色
今天早上,我们修改了博客程序中的1行代码,将 services.AddDbContextPool 改为 services.AddDbContext ,去掉 DbContextPool . 然后奇迹出现 ...
- [故障公告]博客站点遭遇超过20G的流量攻击被阿里云屏蔽
2017年2月21日17:34,突然收到阿里云的通知: 您的IP受到攻击流量已超过云盾DDoS基础防护的带宽峰值,服务器的所有访问已被屏蔽,如果35分钟后攻击停止将自动解除否则会延期解除... 紧接着 ...
- Powered by .NET Core 进展:用 docker-compose 验证高并发问题嫌疑犯 docker swarm
相关博文: [故障公告]发布 .NET Core 版博客站点引起大量 500 错误 [网站公告].NET Core 版博客站点第二次发布尝试 暴风雨中的 online : .NET Core 版博客站 ...
- 【故障公告】博客站点再次出现故障,最终回退 .NET 5.0 恢复正常
自从博客系统升级 .NET 5.0 之后遇到的诡异故障(一.二.三.四),今天它又出现了,就在前天刚刚故障之后, 就在昨天 .NET 5.0 正式版刚刚发布之后,出现了. 今天晚上我们在 19:30 ...
- NET Core个人博客
NET Core重写个人博客站点小结 今天用ASP.NET Core重写了个人博客站点,原来是基于ASP.NET 4.5开发的.重写工作总体很顺利,最后成功发布到Ubunt+Nginx平台上.效果如下 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 终结篇之发布项目
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
随机推荐
- Appium+python自动化(十六)- ADB命令,知否知否,应是必知必会(超详解)
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态. adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或 ...
- 基于Dapper的开源Lambda扩展,且支持分库分表自动生成实体之基础介绍
LnskyDB LnskyDB是基于Dapper的Lambda扩展,支持按时间分库分表,也可以自定义分库分表方法.而且可以T4生成实体类免去手写实体类的烦恼. 文档地址: https://lining ...
- C++中 / 和 % 在分离各位时的妙用
在学习c++的过程中,我们一般用 / 和 % 来分解数字的各个位 取整 (/) 比如1234 / 10 等于 123.4,这相当于把前三位分解出来了 取余(%) 比如 12345 的分解方法 个位:1 ...
- 剑指offer第二版-5.替换空格
面试题5:替换空格 题目要求: 实现一个函数,把字符串中的每个空格都替换成“%20”,已知原位置后面有足够的空余位置,要求改替换过程发生在原来的位置上. 思路: 首先遍历字符串求出串中空格的数量,求出 ...
- 剑指offer第二版-3.数组中重复的数
面试题3:数组中重复的数 题目要求: 在一个长度为n的数组中,所有数字的取值范围都在[0,n-1],但不知道有几个数字重复或重复几次,找出其中任意一个重复的数字. 解法比较: /** * Copyri ...
- 20190716 NOIP模拟测试4 考试反思
总分 127分 满分300 第一题 礼物 10分 一道期望题,看起来挺简单,但对于概率与期望这一块我还不怎么会,花了一个小时调他,最后只QJ了一下10%的测试点 第二题 通讯 90分 显然的缩点求解, ...
- Python 为什么要继承 object 类?
自己搬运自己在知乎上的回答,感觉破乎吃枣药丸,哪天挂了这里就是个备份. 链接:https://www.zhihu.com/question/19754936/answer/229327803 2017 ...
- HAproxy+Keepalived实现高可用
HAproxy+Keepalived实现高可用 说明: HA1:HAproxy+Keepalived(master) HA2:HAproxy+Keepalived(backup) 1.HA1上keep ...
- 个人永久性免费-Excel催化剂功能第104波-批量选择多种类型的图形对象
在Excel的日常操作过程中,选择绝对是一个高频的操作,之前开发过一些快速选择单元格区域的辅助功能,除了单元格区域,Excel强大之处在于,类似PhotoShop那般可以存放多种图形,并且有图层先后顺 ...
- leetcode 198. House Robber (Easy)
https://leetcode.com/problems/house-robber/ 题意: 一维数组,相加不相邻的数组,返回最大的结果. 思路: 一开始思路就是DP,用一维数组保存dp[i]保存如 ...