暴风雨中的 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 开发博客项目 - 给项目瘦身,让它跑起来 ... 
随机推荐
- CentOS  常用命令合集
			tail -f ../logs/catalina.out 在Tomcat中的bin目录下查看Tomcat日志 ps -ef|grep java 查看Tomcat服 ... 
- ajax 的简单请求,get的加法运算,post加法运算,用户登录认证
			视图函数部分 from django.shortcuts import render, HttpResponse import time from app01.models import User i ... 
- ABP开发框架前后端开发系列---(15)ABP框架的服务端和客户端缓存的使用
			缓存在一个大型一点的系统里面是必然会涉及到的,合理的使用缓存能够给我们的系统带来更高的响应速度.由于数据提供服务涉及到数据库的相关操作,如果客户端的并发数量超过一定的数量,那么数据库的请求处理则以爆发 ... 
- 修改SearchBar的取消按钮Cancel为中文
			一开始在网上看到很多方法都是循环,好吧,我也循环 创建UISearchBar的时候循环,不行 用searchBarTextDidBeginEditing事件去循环,也不行 无语了,搜索了Baidu第一 ... 
- Tell Don’t Ask
			The Tell, Don’t Ask (TDA) principle suggests that it is better to issue an object a command do perfo ... 
- 1. UML软件设计模型图整理
			UML建模 程序设计ER图 UML建模(一)---UserCase用例图 UML建模(二)--流程图 (程序框图) UML建模(三)--部署图 UML建模(四)--类图 UML用例图.流程图 (五) 
- 多线程总结-同步之ReentrantLock
			目录 1 ReentrantLock与synchronized对比 2.示例用法 2.1 基本用法 2.2 尝试锁 2.3 可打断 2.4 公平锁 1 ReentrantLock与synchroniz ... 
- [Usaco2007 Open]Fliptile 翻格子游戏题解
			问题 B: [Usaco2007 Open]Fliptile 翻格子游戏 时间限制: 5 Sec 内存限制: 128 MB 题目描述 Farmer John knows that an intell ... 
- Python之爬虫有感(一)
			urllib.request.Request('URL',headers = headers)User-Agent 是爬虫和反爬虫斗争的第一步,发送请求必须带User—Agent使用流程: 1. ... 
- C# ExcelAddIn 开发笔记
			好久都没有写博客了,最近真的是太忙了,接手公司要做的一个小的新的项目,从接触认识到一个新东西,再到自己琢磨研究,最终结合公司业务把整个excel插件项目完成,还是有一点点成就感.以下是项目中基本上大致 ... 
