一场不该出现并发的并发事故

问题发现

刚毕业那会儿在客户现场,一天客户的管理员说创建不了FTP帐号了。
FTP服务使用了开源的vsftpd,帐号管理是vsftpd自带的功能,帐号管理就基于最简单的text文档,客户端通过WebService对帐号文件进行增删改查。
WebService基于C++实现的gSOAP框架 。这代码是从客户那里接手的,原开发者精通C++。
首先添加日志,根据日志发现是服务繁忙,请求都被阻塞了。
我就纳闷了,一个企业内部应用,就几个管理员用怎么会出现服务繁忙呢。

问题原因

服务繁忙一定是请求过多造成的。那么接下来我倒要看看是谁在不断地请求这台服务器。
继续添加日志,获取请求者的IP(按理说这种事情找客户的网管就行,但客户的网管什么都不懂,也请不动),运行一段时间后发现惊人,日志里面有大量来自外网的请求。
原来客户财大气粗,有自己的公网IP,有段时间进行网络优化,优化后那台服务器就随意分配了一个公网IP,变成了一台面向互联网的服务器。有些个爬虫啊、漏洞扫描工具啊时不时扫描一下,单线程的WebService不出现请求繁忙才怪。

问题方案

最简单的方法是请客户的网管或运维关掉公网IP,要么开启防火墙,但这种方式在客户那里行不通,因为客户的原则就是什么都不做,全部交给供应商搞定。
那么就从代码上实现,首先WebService加IP过滤,只接受来自内网的请求。
其次将代码重构成多线程实现 ,参见官网Multi-Threaded Stand-Alone Service

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值