今天暴风雨袭击了杭州,而昨天暴风雨(高并发问题)席卷了园子,留下一片狼藉。

在前天傍晚,我们进行了 .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 版博客站点遭遇的高并发问题进展的更多相关文章

  1. 同“窗”的较量:部署在 Windows 上的 .NET Core 版博客站点发布上线

    为了验证 docker swarm 在高并发下的性能问题,周一我们发布了使用 docker-compose 部署的 .net core 版博客站点(博文链接),但由于有1行代码请求后端 web api ...

  2. 【故障公告】发布 .NET Core 版博客站点引起大量 500 错误

    非常抱歉,今天上午的博客站点故障给大家带来了很大的麻烦,请大家谅解.这次故障是我们发布 .NET Core 版博客站点引起的,虽然我们进行了充分的准备,但还是低估了高并发下的复杂问题. 以下是故障背景 ...

  3. 【网站公告】.NET Core 版博客站点第二次发布尝试

    在上次发布失败后,很多朋友建议我们改用 k8s ,但我们还是想再试试 docker swarm ,实在不行再改用 k8s . 在改进了 docker swarm 集群的部署后,我们准备今天 17:30 ...

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

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

  5. [故障公告]博客站点遭遇超过20G的流量攻击被阿里云屏蔽

    2017年2月21日17:34,突然收到阿里云的通知: 您的IP受到攻击流量已超过云盾DDoS基础防护的带宽峰值,服务器的所有访问已被屏蔽,如果35分钟后攻击停止将自动解除否则会延期解除... 紧接着 ...

  6. Powered by .NET Core 进展:用 docker-compose 验证高并发问题嫌疑犯 docker swarm

    相关博文: [故障公告]发布 .NET Core 版博客站点引起大量 500 错误 [网站公告].NET Core 版博客站点第二次发布尝试 暴风雨中的 online : .NET Core 版博客站 ...

  7. 【故障公告】博客站点再次出现故障,最终回退 .NET 5.0 恢复正常

    自从博客系统升级 .NET 5.0 之后遇到的诡异故障(一.二.三.四),今天它又出现了,就在前天刚刚故障之后, 就在昨天 .NET 5.0 正式版刚刚发布之后,出现了. 今天晚上我们在 19:30 ...

  8. NET Core个人博客

    NET Core重写个人博客站点小结 今天用ASP.NET Core重写了个人博客站点,原来是基于ASP.NET 4.5开发的.重写工作总体很顺利,最后成功发布到Ubunt+Nginx平台上.效果如下 ...

  9. 基于 abp vNext 和 .NET Core 开发博客项目 - 终结篇之发布项目

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

随机推荐

  1. 常用的方法论-5why

  2. POJ 3686:The Windy's(最小费用最大流)***

    http://poj.org/problem?id=3686 题意:给出n个玩具和m个工厂,每个工厂加工每个玩具有一个时间,问要加工完这n个玩具最少需要等待的平均时间.例如加工1号玩具时间为t1,加工 ...

  3. Python爬虫入门:爬取豆瓣电影TOP250

    一个很简单的爬虫. 从这里学习的,解释的挺好的:https://xlzd.me/2015/12/16/python-crawler-03 分享写这个代码用到了的学习的链接: BeautifulSoup ...

  4. ElasticStack学习(四):ElasticSearch文档使用与操作

    一.文档的CRUD介绍 ElasticSearch中存在五种操作,分别如下: 1.Index 该操作表示:如果文档的ID不存在,则创建新的文档.若有相同的ID,先删除现有文档,然后再创建新的文档,同时 ...

  5. Linux 操作系统及其组成,shell命令

    Linux 操作系统及其组成 操作系统的作用 操作系统(OS)是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石.操作系统需要处理如管理与配置内存.决定系统资源供需的优先次序.控制 ...

  6. [Poi2012]Festival 题解

    [Poi2012]Festival 时间限制: 1 Sec  内存限制: 64 MB 题目描述 有n个正整数X1,X2,...,Xn,再给出m1+m2个限制条件,限制分为两类: 1. 给出a,b (1 ...

  7. xss magic_quotes_gpc

    ---恢复内容开始--- magic_quotes_gpc函数,在php5.4以上移除了, 但是很奇怪的是  我的5.6版本这边  是可以找到这个选项的. 在php.ini文件里面,默认关闭,如果将此 ...

  8. 个人永久性免费-Excel催化剂功能第20波-Excel与Sqlserver零门槛交互-数据上传篇

    Excel作为众多数据存储的交换介质,在不同的系统内的数据很少可以很连贯地进行整合分析,一般的业务系统都会提供导出Excel作为标配功能供用户使用系统内生成的数据. 此时最大的问题是,Excel很维去 ...

  9. java优化之 单例模式的优化

    该分类下的文章均为笔者阅读<Java程序性能优化>(葛一鸣)一书之所理解.如有欠缺,还请大佬们指点.

  10. 前端插件之Bootstrap Dual Listbox使用

    工欲善其事,必先利其器 对于很多非专业前端开发来说写页面是非常痛苦的,借助框架或插件往往能够达到事半功倍的效果,本系列文章会介绍我在运维系统开发过程中用到的那些顺手的前端插件,如果你是想写XX管理系统 ...