转载:Redis 的 KEYS 命令引起 RDS 数据库雪崩

最近的互联网线上事故发生比较频繁,9月19日网上爆料出顺丰近期发生了一起线上删库事件,在这里就不介绍了。

在这里讲述一下最近发生在我公司的事故,以及如何避免,并且如何处理优化。 该宕机的直接原因是使用 Redis 的 keys * 命令引起的,一共造成了某个服务化项目的两次宕机。

间接原因还有很多,技术跟不上业务的发展,由每日百万量到千万级是一个大的跨进,公司对于系统优化的处理优先级不高,技术开发人手的短缺。
第一次宕机

2018年9月13日的某个点,公司某服务化项目的 RDS 实例连接飙升,CPU 升到 100%,拒绝了其他应用的所有请求服务。

整个过程如下:

阅读更多

Linux进程间通信的六种主要手段

1.管道(Pipe)及有名管道(named pipe)

管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;

2.信号(Signal)

信号是比较复杂的通信方式,用于通知接受进程有某种事件生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期 信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上, 该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,sigaction函数重新实现了signal函数);

3.报文(Message)队列(消息队列)

消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。

阅读更多

如何正确看待软件开发技术外包价格的高低

软件外包这个事,随着需求的不同,价格区间跨度本来就是会相当大。一个软件有报几千的,也有报几万的,差距相当大,一个网站,一款软件或者一个完整的系统,其结构功能复杂与否首先只能确定其价格底线。多数的企业只考虑表面的代码开发费用,至于后期的方案是否可以匹配上业务、运营和维护几乎都没有考虑。

一心只通过价格来选择开发人员,也就容易在后期跟外包方产生纠葛,而通常在这样的状况下,基本上所开发出的软件或者系统,也就不太可能运营出效果,反而浪费了企业发展的时间。这样算下来,为了当初省去的几万块钱,而赔掉了可能几十万,几百万,甚至几千万的市场,想想还真是得不偿失。

阅读更多

提升PHP运行效率的20个注意事项

1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。

2、$row[’id’] 的速度是$row[id]的7倍。

3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。

4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。

5、注销那些不用的变量尤其是大数组,以便释放内存。

阅读更多

新出现的钓鱼攻击方式 慎用链接的target=”_blank”属性

早在2014年,就已经有很多安全研究专家表示,target=”_blank”属性是非常不安全的一个属性。而且当初有些关于该属性的安全报告为了引起人们的注意,还特地将标题设置得非常醒目。

现在,许多主流的互联网服务提供商都会在网页的链接地址中加入target=”_blank”属性,而这绝对是一种非常不安全的行为。不仅如此,target=”_blank”属性还将会使广大互联网用户暴露在钓鱼攻击的风险之下。

早在2014年,就已经有很多安全研究专家表示,target=”_blank”属性是非常不安全的一个属性。而且当初有些关于该属性的安全报告为了引起人们的注意,还特地将标题设置得非常醒目。

漏洞实现机制

阅读更多

转载:Nginx多站点虚拟主机实现独立启动停止php-fpm和权限控制设置

说明:

站点1:bbs.osyunwei.com 程序所在目录/data/osyunwei/bbs

站点2:sns.osyunwei.com 程序所在目录/data/osyunwei/sns

相关配置文件目录:

nginx主配置文件:/usr/local/nginx/conf/nginx.conf

php安装目录:/usr/local/php5/

站点1虚拟主机配置配置文件:/usr/local/nginx/conf/vhost/bbs.conf

站点2虚拟主机配置配置文件:/usr/local/nginx/conf/vhost/sns.conf

实现目的:

1、可以对站点1和站点2单独启动、停止php-fpm

2、站点1和站点2的php运行权限相互隔离,不能跨目录浏览,即站点1内的php木马不能访问站点2中的内容,

同理,站2内的php木马不能访问站点1中的内容。

实现方法:

阅读更多

预防注入的4条建议

1.假定所有输入都是可疑的,必须对所有输入中的script、iframe等字样进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等;

2.不要仅仅验证数据的类型,还要验证其格式、长度、范围和内容;

3.不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行;

4.对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行安全检查;

阅读更多

从技术岗位走向管理岗位:机会是留给有准备的人

做好本职工作是第一步

技术人员能管理好自己,出色完成本职工作是第一步。在领导交给你任务时,要主动制定工作计划,定期向领导汇报工作进展,出了问题及时 沟通,且要勇于承担责任,同时确保工作顺利进行。如果能让领导对你的工作完全信任和放心,那么你在自我管理上就已经准备好了。

阅读更多

在SVN中进行分支开发的最佳实践

1.在分支上做开发的时候,必须定期使分支与主干同步,避免开发完成后合并(merge)回主干时出现严重冲突(confict)。

2.进行合并前,处理掉工作副本上的所有本地修改,方便合并失败时进行回滚(revert)。

3.进行合并时,特别注意 新增/删除 操作,因为很多冲突都是这类操作引起的。

4.完成一个分支的功能并合并回主干后,抛弃该分支,后续其它功能的开发使用新建的分支。

百万级访问量网站的技术准备工作摘录

一、开发语言

一般来说,技术人员(程序员)都是根据自己技术背景选择自己最熟悉的语言,不过不可能永远是一个人写程序,所以在语言的选择上还要是要费些心思。首先明确一点,无论用什么语言,最终代码质量是看管理,因此我们从前期开发成本分析。现在国内流行的适用于网站的语言,大概有java、php、.net、python、ruby这五大阵营。python和ruby因为在国内流行的比较晚,现在人员还是相对难招一些。.net平台的人相对多,但是到后期需要解决性能问题时,对人员技能的要求比较高。剩余的java、php用人可以说是最多的。java和php无法从语言层面做比较,但对于初期,应用几乎都是靠前端支撑的网站来说,php入门简单、编写快速,优势相对大一点。至于后端例如行为分析、银行接口、异步消息处理等,等真正需要时,就要根据不同业务需求来选择不同语言了。

阅读更多